ReactOS  0.4.15-dev-5120-gfb68e76
cmlib.h
Go to the documentation of this file.
1 /*
2  * PROJECT: Registry manipulation library
3  * LICENSE: GPL - See COPYING in the top level directory
4  * COPYRIGHT: Copyright 2005 Filip Navara <navaraf@reactos.org>
5  * Copyright 2001 - 2005 Eric Kohl
6  */
7 
8 #ifndef _CMLIB_H_
9 #define _CMLIB_H_
10 
11 //
12 // Debug support switch
13 //
14 #define _CMLIB_DEBUG_ 1
15 
16 #ifdef CMLIB_HOST
17  #include <typedefs.h>
18  #include <stdio.h>
19  #include <string.h>
20 
21  // NTDDI_xxx versions we allude to in the library (see psdk/sdkddkver.h)
22  #define NTDDI_WS03SP4 0x05020400
23  #define NTDDI_WIN6 0x06000000
24  #define NTDDI_LONGHORN NTDDI_WIN6
25  #define NTDDI_VISTA NTDDI_WIN6
26  #define NTDDI_WIN7 0x06010000
27 
28  #define NTDDI_VERSION NTDDI_WS03SP4 // This is the ReactOS NT kernel version
29 
30  /* C_ASSERT Definition */
31  #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
32 
33  #ifdef _WIN32
34  #define strncasecmp _strnicmp
35  #define strcasecmp _stricmp
36  #endif // _WIN32
37 
38  #if (!defined(_MSC_VER) || (_MSC_VER < 1500))
39  #define _In_
40  #define _Out_
41  #define _Inout_
42  #define _In_opt_
43  #define _In_range_(x, y)
44  #endif
45 
46  #define __drv_aliasesMem
47 
48  #ifndef min
49  #define min(a, b) (((a) < (b)) ? (a) : (b))
50  #endif
51 
52  // #ifndef max
53  // #define max(a, b) (((a) > (b)) ? (a) : (b))
54  // #endif
55 
56  // Definitions copied from <ntstatus.h>
57  // We only want to include host headers, so we define them manually
58  #define STATUS_SUCCESS ((NTSTATUS)0x00000000)
59  #define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002)
60  #define STATUS_NO_MEMORY ((NTSTATUS)0xC0000017)
61  #define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009A)
62  #define STATUS_REGISTRY_CORRUPT ((NTSTATUS)0xC000014C)
63  #define STATUS_NOT_REGISTRY_FILE ((NTSTATUS)0xC000015C)
64  #define STATUS_REGISTRY_RECOVERED ((NTSTATUS)0x40000009)
65 
66  #define REG_OPTION_VOLATILE 1
67  #define OBJ_CASE_INSENSITIVE 0x00000040L
68  #define USHORT_MAX USHRT_MAX
69 
70  #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
71  #define UNICODE_NULL ((WCHAR)0)
72 
73  VOID NTAPI
77 
78  LONG NTAPI
80  IN PCUNICODE_STRING String1,
83 
84  // FIXME: DECLSPEC_NORETURN
85  VOID
86  NTAPI
88  IN ULONG BugCheckCode,
89  IN ULONG_PTR BugCheckParameter1,
90  IN ULONG_PTR BugCheckParameter2,
91  IN ULONG_PTR BugCheckParameter3,
92  IN ULONG_PTR BugCheckParameter4);
93 
94  VOID NTAPI
96  OUT PLARGE_INTEGER CurrentTime);
97 
98  WCHAR NTAPI
100  IN WCHAR Source);
101 
102  VOID NTAPI
104  IN PRTL_BITMAP BitMapHeader,
105  IN PULONG BitMapBuffer,
106  IN ULONG SizeOfBitMap);
107 
108  ULONG NTAPI
110  IN PRTL_BITMAP BitMapHeader,
112  IN ULONG HintIndex);
113 
114  VOID NTAPI
115  RtlSetBits(
116  IN PRTL_BITMAP BitMapHeader,
118  IN ULONG NumberToSet);
119 
120  VOID NTAPI
122  IN PRTL_BITMAP BitMapHeader);
123 
124  #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP) / 32]) >> ((BP) % 32)) & 0x1)
125  #define UNREFERENCED_PARAMETER(P) ((void)(P))
126 
127  #define PKTHREAD PVOID
128  #define PKGUARDED_MUTEX PVOID
129  #define PERESOURCE PVOID
130  #define PFILE_OBJECT PVOID
131  #define PKEVENT PVOID
132  #define PWORK_QUEUE_ITEM PVOID
133  #define EX_PUSH_LOCK PULONG_PTR
134 
135  // Definitions copied from <ntifs.h>
136  // We only want to include host headers, so we define them manually
137 
139 
140  typedef struct _SECURITY_DESCRIPTOR_RELATIVE
141  {
142  UCHAR Revision;
143  UCHAR Sbz1;
145  ULONG Owner;
146  ULONG Group;
147  ULONG Sacl;
148  ULONG Dacl;
150 
151  #define CMLTRACE(x, ...)
152  #undef PAGED_CODE
153  #define PAGED_CODE()
154  #define REGISTRY_ERROR ((ULONG)0x00000051L)
155 
156 #else
157 
158  //
159  // Debug/Tracing support
160  //
161  #if _CMLIB_DEBUG_
162  #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
163  #define CMLTRACE DbgPrintEx
164  #else
165  #define CMLTRACE(x, ...) \
166  if (x & CmlibTraceLevel) DbgPrint(__VA_ARGS__)
167  #endif
168  #else
169  #define CMLTRACE(x, ...) DPRINT(__VA_ARGS__)
170  #endif
171 
172  #include <ntdef.h>
173  #include <ntifs.h>
174  #include <bugcodes.h>
175 
176  /* Prevent inclusion of Windows headers through <wine/unicode.h> */
177  #define _WINDEF_
178  #define _WINBASE_
179  #define _WINNLS_
180 #endif
181 
182 
183 //
184 // These define the Debug Masks Supported
185 //
186 #define CMLIB_HCELL_DEBUG 0x01
187 
188 #ifndef ROUND_UP
189 #define ROUND_UP(a,b) ((((a)+(b)-1)/(b))*(b))
190 #define ROUND_DOWN(a,b) (((a)/(b))*(b))
191 #endif
192 
193 //
194 // PAGE_SIZE definition
195 //
196 #ifndef PAGE_SIZE
197 #if defined(TARGET_i386) || defined(TARGET_amd64) || \
198  defined(TARGET_arm) || defined(TARGET_arm64)
199 #define PAGE_SIZE 0x1000
200 #else
201 #error Local PAGE_SIZE definition required when built as host
202 #endif
203 #endif
204 
205 #define TAG_CM ' MC'
206 #define TAG_KCB 'bkMC'
207 #define TAG_CMHIVE 'vHMC'
208 #define TAG_CMSD 'DSMC'
209 
210 #define CMAPI NTAPI
211 
212 #include <wine/unicode.h>
213 #include <wchar.h>
214 #include "hivedata.h"
215 #include "cmdata.h"
216 
217 /* Forward declarations */
221 
222 // See ntoskrnl/include/internal/cm.h
223 #define CMP_SECURITY_HASH_LISTS 64
224 
225 //
226 // Use Count Log and Entry
227 //
229 {
233 
234 typedef struct _CM_USE_COUNT_LOG
235 {
240 
241 //
242 // Configuration Manager Hive Structure
243 //
244 typedef struct _CMHIVE
245 {
288 } CMHIVE, *PCMHIVE;
289 
290 typedef struct _HV_HIVE_CELL_PAIR
291 {
295 
296 #define STATIC_CELL_PAIR_COUNT 4
297 typedef struct _HV_TRACK_CELL_REF
298 {
305 
306 extern ULONG CmlibTraceLevel;
307 
308 //
309 // Hack since big keys are not yet supported
310 //
311 #define ASSERT_VALUE_BIG(h, s) \
312  ASSERTMSG("Big keys not supported!\n", !CmpIsKeyValueBig(h, s));
313 
314 //
315 // Returns whether or not this is a small valued key
316 //
317 static inline
318 BOOLEAN
320  IN ULONG Length)
321 {
322  /* Check if the length has the special size value */
324  {
325  /* It does, so this is a small key: return the real length */
326  *RealLength = Length - CM_KEY_VALUE_SPECIAL_SIZE;
327  return TRUE;
328  }
329 
330  /* This is not a small key, return the length we read */
331  *RealLength = Length;
332  return FALSE;
333 }
334 
335 //
336 // Returns whether or not this is a big valued key
337 //
338 static inline
339 BOOLEAN
341  IN ULONG Length)
342 {
343  /* Check if the hive is XP Beta 1 or newer */
344  if (Hive->Version >= HSYS_WHISTLER_BETA1)
345  {
346  /* Check if the key length is valid for a big value key */
348  {
349  /* Yes, this value is big */
350  return TRUE;
351  }
352  }
353 
354  /* Not a big value key */
355  return FALSE;
356 }
357 
358 /*
359  * Public Hive functions.
360  */
363  PHHIVE RegistryHive,
364  ULONG OperationType,
365  ULONG HiveFlags,
366  ULONG FileType,
367  PVOID HiveData OPTIONAL,
370  PFILE_SET_SIZE_ROUTINE FileSetSize,
371  PFILE_WRITE_ROUTINE FileWrite,
372  PFILE_READ_ROUTINE FileRead,
373  PFILE_FLUSH_ROUTINE FileFlush,
374  ULONG Cluster OPTIONAL,
376 
377 VOID CMAPI
378 HvFree(
379  PHHIVE RegistryHive);
380 
381 #define HvGetCell(Hive, Cell) \
382  (Hive)->GetCellRoutine(Hive, Cell)
383 
384 #define HvReleaseCell(Hive, Cell) \
385 do { \
386  if ((Hive)->ReleaseCellRoutine) \
387  (Hive)->ReleaseCellRoutine(Hive, Cell); \
388 } while(0)
389 
390 LONG CMAPI
392  PHHIVE RegistryHive,
393  PVOID Cell);
394 
397  PHHIVE RegistryHive,
398  ULONG Size,
400  IN HCELL_INDEX Vicinity);
401 
404  IN PHHIVE RegistryHive,
405  IN HCELL_INDEX CellIndex
406 );
407 
410  PHHIVE RegistryHive,
411  HCELL_INDEX CellOffset,
412  ULONG Size);
413 
414 VOID CMAPI
415 HvFreeCell(
416  PHHIVE RegistryHive,
417  HCELL_INDEX CellOffset);
418 
421  PHHIVE RegistryHive,
422  HCELL_INDEX CellOffset,
423  BOOLEAN HoldingLock);
424 
427  IN PHHIVE Hive,
428  IN HCELL_INDEX Cell
429 );
430 
431 BOOLEAN
432 CMAPI
434  IN PHHIVE RegistryHive
435 );
436 
438 HvSyncHive(
439  PHHIVE RegistryHive);
440 
443  PHHIVE RegistryHive);
444 
445 BOOLEAN
446 CMAPI
448  IN OUT PHV_TRACK_CELL_REF CellRef,
449  IN PHHIVE Hive,
450  IN HCELL_INDEX Cell
451 );
452 
453 VOID
454 CMAPI
456  IN OUT PHV_TRACK_CELL_REF CellRef
457 );
458 
459 /*
460  * Private functions.
461  */
462 
465  _In_ PHHIVE Hive,
466  _In_ HCELL_INDEX CellIndex);
467 
468 PHBIN CMAPI
469 HvpAddBin(
470  PHHIVE RegistryHive,
471  ULONG Size,
473 
476  PHHIVE Hive);
477 
478 ULONG CMAPI
480  PHBASE_BLOCK HiveHeader);
481 
482 
483 /* Old-style Public "Cmlib" functions */
484 
487  PHHIVE Hive,
488  PCWSTR Name);
489 
490 VOID CMAPI
492  PHHIVE RegistryHive);
493 
494 
495 /* NT-style Public Cm functions */
496 
497 //
498 // Cell Index Routines
499 //
501 NTAPI
503  IN PHHIVE Hive,
505  IN PCUNICODE_STRING SearchName
506 );
507 
509 NTAPI
511  IN PHHIVE Hive,
513  IN ULONG Number
514 );
515 
516 ULONG
517 NTAPI
519  IN ULONG Hash,
521  IN BOOLEAN AllowSeparators
522 );
523 
524 BOOLEAN
525 NTAPI
527  IN PHHIVE Hive,
530 );
531 
532 BOOLEAN
533 NTAPI
535  IN PHHIVE Hive,
537  IN HCELL_INDEX TargetKey
538 );
539 
540 BOOLEAN
541 NTAPI
543  IN PHHIVE Hive,
545  HCELL_INDEX TargetKey
546 );
547 
548 
549 //
550 // Name Functions
551 //
552 LONG
553 NTAPI
555  IN PCUNICODE_STRING SearchName,
556  IN PWCHAR CompressedName,
557  IN ULONG NameLength
558 );
559 
560 USHORT
561 NTAPI
563  IN PHHIVE Hive,
565 );
566 
567 USHORT
568 NTAPI
570  IN PWCHAR Name,
571  IN ULONG Length
572 );
573 
574 USHORT
575 NTAPI
577  IN PHHIVE Hive,
580 );
581 
582 VOID
583 NTAPI
586  IN ULONG DestinationLength,
587  IN PWCHAR Source,
588  IN ULONG SourceLength
589 );
590 
591 BOOLEAN
592 NTAPI
594  IN PHHIVE Hive,
597  OUT PULONG ChildIndex OPTIONAL,
598  OUT PHCELL_INDEX CellIndex
599 );
600 
601 
602 //
603 // Cell Value Routines
604 //
606 NTAPI
608  IN PHHIVE Hive,
609  IN PCM_KEY_NODE KeyNode,
611 );
612 
614 NTAPI
616  IN PHHIVE Hive,
619 );
620 
621 NTSTATUS
622 NTAPI
624  IN PHHIVE Hive,
625  IN PVOID Data,
626  IN ULONG DataSize,
627  IN HSTORAGE_TYPE StorageType,
628  IN HCELL_INDEX ValueCell,
629  OUT PHCELL_INDEX DataCell
630 );
631 
632 NTSTATUS
633 NTAPI
635  IN PHHIVE Hive,
636  IN HCELL_INDEX ValueCell,
637  IN ULONG Index,
638  IN HSTORAGE_TYPE StorageType,
640 );
641 
642 BOOLEAN
643 NTAPI
645  IN PHHIVE Hive,
646  IN HCELL_INDEX Cell
647 );
648 
649 BOOLEAN
650 NTAPI
652  IN PHHIVE Hive,
654 );
655 
656 BOOLEAN
657 NTAPI
659  IN PHHIVE Hive,
660  IN HCELL_INDEX DataCell,
662 );
663 
664 NTSTATUS
665 NTAPI
667  IN PHHIVE Hive,
668  IN ULONG Index,
670 );
671 
672 BOOLEAN
673 NTAPI
675  IN PHHIVE Hive,
677  OUT PULONG Length,
678  OUT PVOID *Buffer,
679  OUT PBOOLEAN BufferAllocated,
680  OUT PHCELL_INDEX CellToRelease
681 );
682 
683 NTSTATUS
684 NTAPI
686  IN PHHIVE SourceHive,
687  IN PCHILD_LIST SrcValueList,
688  IN PHHIVE DestinationHive,
689  IN OUT PCHILD_LIST DestValueList,
690  IN HSTORAGE_TYPE StorageType
691 );
692 
693 NTSTATUS
694 NTAPI
696  IN PHHIVE Hive,
697  IN HCELL_INDEX Cell,
699 );
700 
701 VOID
702 NTAPI
704  IN PHHIVE Hive,
705  IN HCELL_INDEX SecurityCell
706 );
707 
708 VOID
709 NTAPI
711  IN PHHIVE Hive,
712  IN HCELL_INDEX Cell
713 );
714 
715 /******************************************************************************/
716 
717 /* To be implemented by the user of this library */
718 PVOID
719 NTAPI
721  IN SIZE_T Size,
722  IN BOOLEAN Paged,
723  IN ULONG Tag
724 );
725 
726 VOID
727 NTAPI
728 CmpFree(
729  IN PVOID Ptr,
730  IN ULONG Quota
731 );
732 
733 #endif /* _CMLIB_H_ */
#define KeQuerySystemTime(t)
Definition: env_spec_w32.h:570
PKGUARDED_MUTEX ViewLock
Definition: cmlib.h:252
static int Hash(const char *)
Definition: reader.c:2257
BOOLEAN CMAPI HvIsCellDirty(IN PHHIVE Hive, IN HCELL_INDEX Cell)
Definition: hivecell.c:125
LIST_ENTRY TrustClassEntry
Definition: cmlib.h:284
const uint16_t * PCWSTR
Definition: typedefs.h:57
#define IN
Definition: typedefs.h:39
PWORK_QUEUE_ITEM UnloadWorkItem
Definition: cmlib.h:275
struct _CM_USE_COUNT_LOG * PCM_USE_COUNT_LOG
PHBIN CMAPI HvpAddBin(PHHIVE RegistryHive, ULONG Size, HSTORAGE_TYPE Storage)
Definition: hivebin.c:12
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
VOID NTAPI CmpFree(IN PVOID Ptr, IN ULONG Quota)
Definition: registry.c:57
WORD * PSECURITY_DESCRIPTOR_CONTROL
Definition: lsa.idl:37
BOOLEAN(CMAPI * PFILE_SET_SIZE_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, ULONG FileSize, ULONG OldfileSize)
Definition: hivedata.h:241
ULONG NTAPI CmpComputeHashKey(IN ULONG Hash, IN PCUNICODE_STRING Name, IN BOOLEAN AllowSeparators)
Definition: cmindex.c:460
BOOLEAN CMAPI HvIsCellAllocated(IN PHHIVE RegistryHive, IN HCELL_INDEX CellIndex)
Definition: hivecell.c:43
#define TRUE
Definition: types.h:120
LONG SecurityHitHint
Definition: cmlib.h:269
HCELL_INDEX CMAPI HvReallocateCell(PHHIVE RegistryHive, HCELL_INDEX CellOffset, ULONG Size)
Definition: hivecell.c:393
struct _CM_USE_COUNT_LOG_ENTRY CM_USE_COUNT_LOG_ENTRY
ULONG CMAPI HvpHiveHeaderChecksum(PHBASE_BLOCK HiveHeader)
Definition: hivesum.c:17
LIST_ENTRY NotifyList
Definition: cmlib.h:248
CM_USE_COUNT_LOG_ENTRY Log[32]
Definition: cmlib.h:238
NTSTATUS CMAPI HvInitialize(PHHIVE RegistryHive, ULONG OperationType, ULONG HiveFlags, ULONG FileType, PVOID HiveData OPTIONAL, PALLOCATE_ROUTINE Allocate, PFREE_ROUTINE Free, PFILE_SET_SIZE_ROUTINE FileSetSize, PFILE_WRITE_ROUTINE FileWrite, PFILE_READ_ROUTINE FileRead, PFILE_FLUSH_ROUTINE FileFlush, ULONG Cluster OPTIONAL, PCUNICODE_STRING FileName OPTIONAL)
Definition: hiveinit.c:522
NTSTATUS NTAPI CmpFreeKeyByCell(IN PHHIVE Hive, IN HCELL_INDEX Cell, IN BOOLEAN Unlink)
Definition: cmkeydel.c:159
BOOLEAN NTAPI CmpGetValueData(IN PHHIVE Hive, IN PCM_KEY_VALUE Value, OUT PULONG Length, OUT PVOID *Buffer, OUT PBOOLEAN BufferAllocated, OUT PHCELL_INDEX CellToRelease)
Definition: cmvalue.c:125
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
Definition: fsrtlfuncs.h:898
ULONG SecurityCount
Definition: cmlib.h:267
USHORT Count
Definition: cmlib.h:299
PVOID NTAPI CmpAllocate(IN SIZE_T Size, IN BOOLEAN Paged, IN ULONG Tag)
Definition: registry.c:46
USHORT StaticCount
Definition: cmlib.h:303
LONG NTSTATUS
Definition: precomp.h:26
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
VOID NTAPI CmpFreeSecurityDescriptor(IN PHHIVE Hive, IN HCELL_INDEX Cell)
Definition: cmse.c:65
#define STATIC_CELL_PAIR_COUNT
Definition: cmlib.h:296
HCELL_INDEX NTAPI CmpFindSubKeyByNumber(IN PHHIVE Hive, IN PCM_KEY_NODE Node, IN ULONG Number)
Definition: cmindex.c:600
BOOLEAN Frozen
Definition: cmlib.h:274
IN PVOID IN PVOID IN USHORT IN USHORT Size
Definition: pci.h:361
CM_USE_COUNT_LOG UseCountLog
Definition: cmlib.h:281
VOID CMAPI HvReleaseFreeCellRefArray(IN OUT PHV_TRACK_CELL_REF CellRef)
Definition: hivecell.c:606
ULONG Flags
Definition: cmlib.h:283
ULONG FlushCount
Definition: cmlib.h:285
HCELL_INDEX CMAPI HvAllocateCell(PHHIVE RegistryHive, ULONG Size, HSTORAGE_TYPE Storage, IN HCELL_INDEX Vicinity)
NTSYSAPI ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP, ULONG, ULONG)
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 ACPI_BUFFER *RetPathPtr ACPI_OBJECT_HANDLER void *Data ACPI_OBJECT_HANDLER void **Data ACPI_STRING ACPI_OBJECT_LIST ACPI_BUFFER *ReturnObjectBuffer ACPI_DEVICE_INFO **ReturnBuffer ACPI_HANDLE Parent
Definition: acpixf.h:728
ULONG CmlibTraceLevel
Definition: cminit.c:12
EX_PUSH_LOCK SecurityLock
Definition: cmlib.h:257
uint16_t * PWCHAR
Definition: typedefs.h:56
NTSTATUS CMAPI HvpCreateHiveFreeCellList(PHHIVE Hive)
Definition: hivecell.c:278
static int Unlink(const char **args)
Definition: vfdcmd.c:2549
PKTHREAD HiveLockOwner
Definition: cmlib.h:251
USHORT PinnedViews
Definition: cmlib.h:265
struct _CM_KEY_CONTROL_BLOCK * PCM_KEY_CONTROL_BLOCK
Definition: cmlib.h:219
NTSTATUS NTAPI CmpRemoveValueFromList(IN PHHIVE Hive, IN ULONG Index, IN OUT PCHILD_LIST ChildList)
Definition: cmvalue.c:320
_In_opt_ PALLOCATE_FUNCTION Allocate
Definition: exfuncs.h:814
BOOLEAN NTAPI CmpAddSubKey(IN PHHIVE Hive, IN HCELL_INDEX Parent, IN HCELL_INDEX Child)
Definition: cmindex.c:1465
NTSTATUS NTAPI CmpAddValueToList(IN PHHIVE Hive, IN HCELL_INDEX ValueCell, IN ULONG Index, IN HSTORAGE_TYPE StorageType, IN OUT PCHILD_LIST ChildList)
Definition: cmvalue.c:207
_In_ ULONG _In_ ULONG HintIndex
Definition: rtlfuncs.h:609
#define CMAPI
Definition: cmlib.h:210
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
Definition: exfuncs.h:814
#define CM_KEY_VALUE_SPECIAL_SIZE
Definition: cmdata.h:51
UNICODE_STRING FileUserName
Definition: cmlib.h:263
uint32_t ULONG_PTR
Definition: typedefs.h:65
USHORT NTAPI CmpCopyName(IN PHHIVE Hive, OUT PWCHAR Destination, IN PCUNICODE_STRING Source)
Definition: cmname.c:21
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:636
BOOLEAN NTAPI CmpFreeValue(IN PHHIVE Hive, IN HCELL_INDEX Cell)
Definition: cmvalue.c:73
USHORT NTAPI CmpNameSize(IN PHHIVE Hive, IN PCUNICODE_STRING Name)
Definition: cmname.c:74
ERESOURCE * PERESOURCE
Definition: env_spec_w32.h:595
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
_In_ ULONG NumberToFind
Definition: rtlfuncs.h:609
_In_ WDFDEVICE _In_ WDF_SPECIAL_FILE_TYPE FileType
Definition: wdfdevice.h:2739
#define FALSE
Definition: types.h:117
BOOLEAN(CMAPI * PFILE_READ_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PULONG FileOffset, PVOID Buffer, SIZE_T BufferLength)
Definition: hivedata.h:223
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
Definition: wdffdo.h:533
BOOLEAN(CMAPI * PFILE_FLUSH_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PLARGE_INTEGER FileOffset, ULONG Length)
Definition: hivedata.h:249
long LONG
Definition: pedump.c:60
_In_ const STRING _In_ BOOLEAN CaseInSensitive
Definition: rtlfuncs.h:2362
WORD SECURITY_DESCRIPTOR_CONTROL
Definition: lsa.idl:37
VOID NTAPI CmpCopyCompressedName(OUT PWCHAR Destination, IN ULONG DestinationLength, IN PWCHAR Source, IN ULONG SourceLength)
Definition: cmname.c:56
struct _HV_HIVE_CELL_PAIR * PHV_HIVE_CELL_PAIR
PCM_KEY_CONTROL_BLOCK RootKcb
Definition: cmlib.h:273
ULONG GrowOffset
Definition: cmlib.h:277
struct _SECURITY_DESCRIPTOR_RELATIVE * PISECURITY_DESCRIPTOR_RELATIVE
HANDLE FileHandles[HFILE_TYPE_MAX]
Definition: cmlib.h:247
BOOLEAN CMAPI HvWriteHive(PHHIVE RegistryHive)
Definition: hivewrt.c:285
static BOOLEAN CmpIsKeyValueSmall(OUT PULONG RealLength, IN ULONG Length)
Definition: cmlib.h:319
HCELL_INDEX Cell
Definition: cmlib.h:230
unsigned char BOOLEAN
UNICODE_STRING FileFullPath
Definition: cmlib.h:262
#define CMP_SECURITY_HASH_LISTS
Definition: cmlib.h:223
_Out_ _Inout_ POEM_STRING DestinationString
Definition: rtlfuncs.h:1895
ULONG SecurityCacheSize
Definition: cmlib.h:268
ULONG * PHCELL_INDEX
Definition: hivedata.h:80
#define _In_
Definition: ms_sal.h:308
HHIVE Hive
Definition: cmlib.h:246
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
Definition: cdrom.h:1437
VOID CMAPI HvFree(PHHIVE RegistryHive)
Definition: hiveinit.c:628
Definition: bufpool.h:45
#define HFILE_TYPE_MAX
Definition: hivedata.h:36
struct _HV_HIVE_CELL_PAIR HV_HIVE_CELL_PAIR
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:406
struct _CM_CELL_REMAP_BLOCK * PCM_CELL_REMAP_BLOCK
Definition: cmlib.h:220
struct _CMHIVE * PCMHIVE
WCHAR NTAPI RtlUpcaseUnicodeChar(_In_ WCHAR Source)
Definition: nlsboot.c:176
struct _CM_KEY_SECURITY_CACHE_ENTRY * PCM_KEY_SECURITY_CACHE_ENTRY
Definition: cmlib.h:218
HV_HIVE_CELL_PAIR StaticArray[STATIC_CELL_PAIR_COUNT]
Definition: cmlib.h:302
PCELL_DATA NTAPI CmpValueToData(IN PHHIVE Hive, IN PCM_KEY_VALUE Value, OUT PULONG Length)
Definition: cmvalue.c:167
NTSTATUS NTAPI CmpSetValueDataNew(IN PHHIVE Hive, IN PVOID Data, IN ULONG DataSize, IN HSTORAGE_TYPE StorageType, IN HCELL_INDEX ValueCell, OUT PHCELL_INDEX DataCell)
Definition: cmvalue.c:289
BOOLEAN HiveIsLoading
Definition: cmlib.h:286
BOOLEAN CMAPI CmCreateRootNode(PHHIVE Hive, PCWSTR Name)
Definition: cminit.c:17
__wchar_t WCHAR
Definition: xmlstorage.h:180
ULONG HCELL_INDEX
Definition: hivedata.h:80
_In_ WDFCOLLECTION _In_ ULONG Index
BOOLEAN(CMAPI * PFILE_WRITE_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PULONG FileOffset, PVOID Buffer, SIZE_T BufferLength)
Definition: hivedata.h:232
EX_PUSH_LOCK HiveLock
Definition: cmlib.h:250
Definition: cm.h:188
USHORT Next
Definition: cmlib.h:236
VOID(CMAPI * PFREE_ROUTINE)(PVOID Ptr, ULONG Quota)
Definition: hivedata.h:217
BOOLEAN CMAPI HvMarkCellDirty(PHHIVE RegistryHive, HCELL_INDEX CellOffset, BOOLEAN HoldingLock)
Definition: hivecell.c:99
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
Definition: rtlfuncs.h:2977
NTSTATUS NTAPI CmpCopyKeyValueList(IN PHHIVE SourceHive, IN PCHILD_LIST SrcValueList, IN PHHIVE DestinationHive, IN OUT PCHILD_LIST DestValueList, IN HSTORAGE_TYPE StorageType)
Definition: cmvalue.c:521
PERESOURCE FlusherLock
Definition: cmlib.h:256
* PFILE_OBJECT
Definition: iotypes.h:1998
Definition: cmlib.h:228
struct _CMHIVE CMHIVE
LIST_ENTRY HiveList
Definition: cmlib.h:249
BOOLEAN CMAPI HvSyncHive(PHHIVE RegistryHive)
Definition: hivewrt.c:243
VOID CMAPI HvFreeCell(PHHIVE RegistryHive, HCELL_INDEX CellOffset)
Definition: hivecell.c:440
BOOLEAN CMAPI HvTrackCellRef(IN OUT PHV_TRACK_CELL_REF CellRef, IN PHHIVE Hive, IN HCELL_INDEX Cell)
Definition: hivecell.c:526
HCELL_INDEX Cell
Definition: cmlib.h:293
unsigned char UCHAR
Definition: xmlstorage.h:181
char * PBOOLEAN
Definition: retypes.h:11
PCELL_DATA CMAPI HvpGetCellData(_In_ PHHIVE Hive, _In_ HCELL_INDEX CellIndex)
Definition: hivecell.c:67
LONG CMAPI HvGetCellSize(PHHIVE RegistryHive, PVOID Cell)
_Out_ _Inout_ POEM_STRING _In_ PCUNICODE_STRING SourceString
Definition: rtlfuncs.h:1895
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
Definition: string_lib.cpp:31
USHORT Size
Definition: cmlib.h:237
LIST_ENTRY LRUViewListHead
Definition: cmlib.h:259
EX_PUSH_LOCK WriterLock
Definition: cmlib.h:254
USHORT MappedViews
Definition: cmlib.h:264
Definition: typedefs.h:119
struct _SECURITY_DESCRIPTOR_RELATIVE SECURITY_DESCRIPTOR_RELATIVE
PKTHREAD ViewLockOwner
Definition: cmlib.h:253
_In_ ULONG StartingIndex
Definition: rtlfuncs.h:395
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
Definition: wdfdevice.h:4061
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
Definition: ntpoapi.h:204
PKTHREAD WriterLockOwner
Definition: cmlib.h:255
ULONG UseCount
Definition: cmlib.h:266
PFILE_OBJECT FileObject
Definition: cmlib.h:261
struct _HV_TRACK_CELL_REF * PHV_TRACK_CELL_REF
LIST_ENTRY KnodeConvertListHead
Definition: cmlib.h:279
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFCHILDLIST * ChildList
Definition: wdfchildlist.h:474
ULONG_PTR SIZE_T
Definition: typedefs.h:80
_Must_inspect_result_ _In_opt_ WDFKEY ParentKey
Definition: wdfregistry.h:69
PCM_CELL_REMAP_BLOCK CellRemapArray
Definition: cmlib.h:280
PKTHREAD CreatorOwner
Definition: cmlib.h:287
struct _HV_TRACK_CELL_REF HV_TRACK_CELL_REF
SECURITY_DESCRIPTOR_CONTROL Control
Definition: setypes.h:835
unsigned short USHORT
Definition: pedump.c:61
HCELL_INDEX NTAPI CmpFindValueByName(IN PHHIVE Hive, IN PCM_KEY_NODE KeyNode, IN PCUNICODE_STRING Name)
Definition: cmvalue.c:99
LONG NTAPI CmpCompareCompressedName(IN PCUNICODE_STRING SearchName, IN PWCHAR CompressedName, IN ULONG NameLength)
Definition: cmname.c:109
HSTORAGE_TYPE
Definition: hivedata.h:100
#define CM_KEY_VALUE_BIG
Definition: cmdata.h:50
NTSYSAPI void WINAPI RtlSetBits(PRTL_BITMAP, ULONG, ULONG)
VOID NTAPI CmpRemoveSecurityCellList(IN PHHIVE Hive, IN HCELL_INDEX SecurityCell)
Definition: cmse.c:19
unsigned int * PULONG
Definition: retypes.h:1
HCELL_INDEX NTAPI CmpFindSubKeyByName(IN PHHIVE Hive, IN PCM_KEY_NODE Parent, IN PCUNICODE_STRING SearchName)
Definition: cmindex.c:683
PKTHREAD HiveSecurityLockOwner
Definition: cmlib.h:258
LIST_ENTRY PinViewListHead
Definition: cmlib.h:260
PKEVENT UnloadEvent
Definition: cmlib.h:272
NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP)
static BOOLEAN CmpIsKeyValueBig(IN PHHIVE Hive, IN ULONG Length)
Definition: cmlib.h:340
CM_USE_COUNT_LOG LockHiveLog
Definition: cmlib.h:282
BOOLEAN NTAPI CmpMarkIndexDirty(IN PHHIVE Hive, HCELL_INDEX ParentKey, HCELL_INDEX TargetKey)
_In_ const STRING * String2
Definition: rtlfuncs.h:2331
PVOID(CMAPI * PALLOCATE_ROUTINE)(SIZE_T Size, BOOLEAN Paged, ULONG Tag)
Definition: hivedata.h:210
#define HSYS_WHISTLER_BETA1
Definition: hivedata.h:59
#define OUT
Definition: typedefs.h:40
PCM_KEY_SECURITY_CACHE_ENTRY SecurityCache
Definition: cmlib.h:270
BOOLEAN NTAPI CmpRemoveSubKey(IN PHHIVE Hive, IN HCELL_INDEX ParentKey, IN HCELL_INDEX TargetKey)
Definition: cmindex.c:1694
unsigned int ULONG
Definition: retypes.h:1
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
VOID CMAPI CmPrepareHive(PHHIVE RegistryHive)
Definition: cminit.c:135
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3167
struct _CM_USE_COUNT_LOG CM_USE_COUNT_LOG
BOOLEAN NTAPI CmpFindNameInList(IN PHHIVE Hive, IN PCHILD_LIST ChildList, IN PCUNICODE_STRING Name, OUT PULONG ChildIndex OPTIONAL, OUT PHCELL_INDEX CellIndex)
Definition: cmname.c:149
BOOLEAN NTAPI CmpFreeValueData(IN PHHIVE Hive, IN HCELL_INDEX DataCell, IN ULONG DataLength)
Definition: cmvalue.c:44
struct _CM_USE_COUNT_LOG_ENTRY * PCM_USE_COUNT_LOG_ENTRY
LIST_ENTRY SecurityHash[CMP_SECURITY_HASH_LISTS]
Definition: cmlib.h:271
USHORT NTAPI CmpCompressedNameSize(IN PWCHAR Name, IN ULONG Length)
Definition: cmname.c:95
static IStorage Storage
Definition: ole2.c:3548
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
Definition: ndis.h:4751
LIST_ENTRY KcbConvertListHead
Definition: cmlib.h:278
VOID NTAPI KeBugCheckEx(_In_ ULONG BugCheckCode, _In_ ULONG_PTR BugCheckParameter1, _In_ ULONG_PTR BugCheckParameter2, _In_ ULONG_PTR BugCheckParameter3, _In_ ULONG_PTR BugCheckParameter4)
Definition: rtlcompat.c:108
Definition: cmlib.h:244
PHV_HIVE_CELL_PAIR CellArray
Definition: cmlib.h:301
Definition: dlist.c:348
BOOLEAN CMAPI HvHiveWillShrink(IN PHHIVE RegistryHive)
Definition: hivewrt.c:277
BOOLEAN NTAPI CmpMarkValueDataDirty(IN PHHIVE Hive, IN PCM_KEY_VALUE Value)
Definition: cmvalue.c:19
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
BOOLEAN GrowOnlyMode
Definition: cmlib.h:276