ReactOS 0.4.15-dev-8241-g63935f8
cmlib.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Configuration Manager Library - CMLIB header
5 * COPYRIGHT: Copyright 2001 - 2005 Eric Kohl
6 * Copyright 2022 George Bișoc <george.bisoc@reactos.org>
7 */
8
9#ifndef _CMLIB_H_
10#define _CMLIB_H_
11
12//
13// Debug support switch
14//
15#define _CMLIB_DEBUG_ 1
16
17#ifdef CMLIB_HOST
18 #include <typedefs.h>
19 #include <stdio.h>
20 #include <string.h>
21
22 // NTDDI_xxx versions we allude to in the library (see psdk/sdkddkver.h)
23 #define NTDDI_WS03SP4 0x05020400
24 #define NTDDI_WIN6 0x06000000
25 #define NTDDI_LONGHORN NTDDI_WIN6
26 #define NTDDI_VISTA NTDDI_WIN6
27 #define NTDDI_WIN7 0x06010000
28
29 #define NTDDI_VERSION NTDDI_WS03SP4 // This is the ReactOS NT kernel version
30
31 /* C_ASSERT Definition */
32 #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
33
34 #ifdef _WIN32
35 #define strncasecmp _strnicmp
36 #define strcasecmp _stricmp
37 #endif // _WIN32
38
39 #if (!defined(_MSC_VER) || (_MSC_VER < 1500))
40 #define _In_
41 #define _Out_
42 #define _Inout_
43 #define _In_opt_
44 #define _In_range_(x, y)
45 #endif
46
47 #define __drv_aliasesMem
48
49 #ifndef min
50 #define min(a, b) (((a) < (b)) ? (a) : (b))
51 #endif
52
53 // #ifndef max
54 // #define max(a, b) (((a) > (b)) ? (a) : (b))
55 // #endif
56
57 // Definitions copied from <ntstatus.h>
58 // We only want to include host headers, so we define them manually
59 #define STATUS_SUCCESS ((NTSTATUS)0x00000000)
60 #define STATUS_NOT_IMPLEMENTED ((NTSTATUS)0xC0000002)
61 #define STATUS_NO_MEMORY ((NTSTATUS)0xC0000017)
62 #define STATUS_INSUFFICIENT_RESOURCES ((NTSTATUS)0xC000009A)
63 #define STATUS_INVALID_PARAMETER ((NTSTATUS)0xC000000D)
64 #define STATUS_REGISTRY_CORRUPT ((NTSTATUS)0xC000014C)
65 #define STATUS_REGISTRY_IO_FAILED ((NTSTATUS)0xC000014D)
66 #define STATUS_NOT_REGISTRY_FILE ((NTSTATUS)0xC000015C)
67 #define STATUS_REGISTRY_RECOVERED ((NTSTATUS)0x40000009)
68
69 #define REG_OPTION_VOLATILE 1
70 #define OBJ_CASE_INSENSITIVE 0x00000040L
71 #define USHORT_MAX USHRT_MAX
72
73 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
74 #define UNICODE_NULL ((WCHAR)0)
75
80
83 IN PCUNICODE_STRING String1,
86
87 // FIXME: DECLSPEC_NORETURN
88 VOID
89 NTAPI
91 IN ULONG BugCheckCode,
92 IN ULONG_PTR BugCheckParameter1,
93 IN ULONG_PTR BugCheckParameter2,
94 IN ULONG_PTR BugCheckParameter3,
95 IN ULONG_PTR BugCheckParameter4);
96
99 OUT PLARGE_INTEGER CurrentTime);
100
103 IN WCHAR Source);
104
105 VOID NTAPI
107 IN PRTL_BITMAP BitMapHeader,
108 IN PULONG BitMapBuffer,
109 IN ULONG SizeOfBitMap);
110
113 IN PRTL_BITMAP BitMapHeader,
116
117 VOID NTAPI
119 IN PRTL_BITMAP BitMapHeader,
121 IN ULONG NumberToSet);
122
123 VOID NTAPI
125 IN PRTL_BITMAP BitMapHeader);
126
127 VOID NTAPI
129 IN PRTL_BITMAP BitMapHeader);
130
131 #define RtlCheckBit(BMH,BP) (((((PLONG)(BMH)->Buffer)[(BP) / 32]) >> ((BP) % 32)) & 0x1)
132 #define UNREFERENCED_PARAMETER(P) ((void)(P))
133
134 #define PKTHREAD PVOID
135 #define PKGUARDED_MUTEX PVOID
136 #define PERESOURCE PVOID
137 #define PFILE_OBJECT PVOID
138 #define PKEVENT PVOID
139 #define PWORK_QUEUE_ITEM PVOID
140 #define EX_PUSH_LOCK PULONG_PTR
141
142 // Definitions copied from <ntifs.h>
143 // We only want to include host headers, so we define them manually
144
146
147 typedef struct _SECURITY_DESCRIPTOR_RELATIVE
148 {
150 UCHAR Sbz1;
152 ULONG Owner;
153 ULONG Group;
154 ULONG Sacl;
155 ULONG Dacl;
157
158 #define CMLTRACE(x, ...)
159 #undef PAGED_CODE
160 #define PAGED_CODE()
161 #define REGISTRY_ERROR ((ULONG)0x00000051L)
162
163#else
164
165 //
166 // Debug/Tracing support
167 //
168 #if _CMLIB_DEBUG_
169 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
170 #define CMLTRACE DbgPrintEx
171 #else
172 #define CMLTRACE(x, ...) \
173 if (x & CmlibTraceLevel) DbgPrint(__VA_ARGS__)
174 #endif
175 #else
176 #define CMLTRACE(x, ...) DPRINT(__VA_ARGS__)
177 #endif
178
179 #include <ntdef.h>
180 #include <ntifs.h>
181 #include <bugcodes.h>
182
183 /* Prevent inclusion of Windows headers through <wine/unicode.h> */
184 #define _WINDEF_
185 #define _WINBASE_
186 #define _WINNLS_
187#endif
188
189
190//
191// These define the Debug Masks Supported
192//
193#define CMLIB_HCELL_DEBUG 0x01
194
195#ifndef ROUND_UP
196#define ROUND_UP(a,b) ((((a)+(b)-1)/(b))*(b))
197#define ROUND_DOWN(a,b) (((a)/(b))*(b))
198#endif
199
200//
201// PAGE_SIZE definition
202//
203#ifndef PAGE_SIZE
204#if defined(TARGET_i386) || defined(TARGET_amd64) || \
205 defined(TARGET_arm) || defined(TARGET_arm64)
206#define PAGE_SIZE 0x1000
207#else
208#error Local PAGE_SIZE definition required when built as host
209#endif
210#endif
211
212#define TAG_CM ' MC'
213#define TAG_KCB 'bkMC'
214#define TAG_CMHIVE 'vHMC'
215#define TAG_CMSD 'DSMC'
216#define TAG_REGISTRY_STACK 'sRMC'
217
218#define CMAPI NTAPI
219
220//
221// Check Registry status type definition
222//
224
225//
226// Check Registry flags
227//
228#define CM_CHECK_REGISTRY_DONT_PURGE_VOLATILES 0x0
229#define CM_CHECK_REGISTRY_PURGE_VOLATILES 0x2
230#define CM_CHECK_REGISTRY_BOOTLOADER_PURGE_VOLATILES 0x4
231#define CM_CHECK_REGISTRY_VALIDATE_HIVE 0x8
232#define CM_CHECK_REGISTRY_FIX_HIVE 0x10
233
234//
235// Check Registry status codes
236//
237#define CM_CHECK_REGISTRY_GOOD 0
238#define CM_CHECK_REGISTRY_INVALID_PARAMETER 1
239#define CM_CHECK_REGISTRY_SD_INVALID 2
240#define CM_CHECK_REGISTRY_HIVE_CORRUPT_SIGNATURE 3
241#define CM_CHECK_REGISTRY_BIN_SIZE_OR_OFFSET_CORRUPT 4
242#define CM_CHECK_REGISTRY_BIN_SIGNATURE_HEADER_CORRUPT 5
243#define CM_CHECK_REGISTRY_BAD_FREE_CELL 6
244#define CM_CHECK_REGISTRY_BAD_ALLOC_CELL 7
245#define CM_CHECK_REGISTRY_ALLOCATE_MEM_STACK_FAIL 8
246#define CM_CHECK_REGISTRY_ROOT_CELL_NOT_FOUND 9
247#define CM_CHECK_REGISTRY_BAD_LEXICOGRAPHICAL_ORDER 10
248#define CM_CHECK_REGISTRY_NODE_NOT_FOUND 11
249#define CM_CHECK_REGISTRY_SUBKEY_NOT_FOUND 12
250#define CM_CHECK_REGISTRY_TREE_TOO_MANY_LEVELS 13
251#define CM_CHECK_REGISTRY_KEY_CELL_NOT_ALLOCATED 14
252#define CM_CHECK_REGISTRY_CELL_DATA_NOT_FOUND 15
253#define CM_CHECK_REGISTRY_CELL_SIZE_NOT_SANE 16
254#define CM_CHECK_REGISTRY_KEY_NAME_LENGTH_ZERO 17
255#define CM_CHECK_REGISTRY_KEY_TOO_BIG_THAN_CELL 18
256#define CM_CHECK_REGISTRY_BAD_KEY_NODE_PARENT 19
257#define CM_CHECK_REGISTRY_BAD_KEY_NODE_SIGNATURE 20
258#define CM_CHECK_REGISTRY_KEY_CLASS_UNALLOCATED 21
259#define CM_CHECK_REGISTRY_VALUE_LIST_UNALLOCATED 22
260#define CM_CHECK_REGISTRY_VALUE_LIST_DATA_NOT_FOUND 23
261#define CM_CHECK_REGISTRY_VALUE_LIST_SIZE_NOT_SANE 24
262#define CM_CHECK_REGISTRY_VALUE_CELL_NIL 25
263#define CM_CHECK_REGISTRY_VALUE_CELL_UNALLOCATED 26
264#define CM_CHECK_REGISTRY_VALUE_CELL_DATA_NOT_FOUND 27
265#define CM_CHECK_REGISTRY_VALUE_CELL_SIZE_NOT_SANE 28
266#define CM_CHECK_REGISTRY_CORRUPT_VALUE_DATA 29
267#define CM_CHECK_REGISTRY_DATA_CELL_NOT_ALLOCATED 30
268#define CM_CHECK_REGISTRY_BAD_KEY_VALUE_SIGNATURE 31
269#define CM_CHECK_REGISTRY_STABLE_KEYS_ON_VOLATILE 32
270#define CM_CHECK_REGISTRY_SUBKEYS_LIST_UNALLOCATED 33
271#define CM_CHECK_REGISTRY_CORRUPT_SUBKEYS_INDEX 34
272#define CM_CHECK_REGISTRY_BAD_SUBKEY_COUNT 35
273#define CM_CHECK_REGISTRY_KEY_INDEX_CELL_UNALLOCATED 36
274#define CM_CHECK_REGISTRY_CORRUPT_LEAF_ON_ROOT 37
275#define CM_CHECK_REGISTRY_CORRUPT_LEAF_SIGNATURE 38
276#define CM_CHECK_REGISTRY_CORRUPT_KEY_INDEX_SIGNATURE 39
277
278//
279// Check Registry success macro
280//
281#define CM_CHECK_REGISTRY_SUCCESS(StatusCode) ((ULONG)(StatusCode) == CM_CHECK_REGISTRY_GOOD)
282
283#include <wine/unicode.h>
284#include <wchar.h>
285#include "hivedata.h"
286#include "cmdata.h"
287
288/* Forward declarations */
292
293// See ntoskrnl/include/internal/cm.h
294#define CMP_SECURITY_HASH_LISTS 64
295
296//
297// Use Count Log and Entry
298//
300{
304
305typedef struct _CM_USE_COUNT_LOG
306{
311
312//
313// Configuration Manager Hive Structure
314//
315typedef struct _CMHIVE
316{
360
361typedef struct _HV_HIVE_CELL_PAIR
362{
366
367#define STATIC_CELL_PAIR_COUNT 4
368typedef struct _HV_TRACK_CELL_REF
369{
376
378
379//
380// Hack since big keys are not yet supported
381//
382#ifdef _BLDR_
383#define ASSERT_VALUE_BIG(h, s) \
384 do { if (CmpIsKeyValueBig(h,s)) DbgPrint("Big keys aren't supported!\n"); } while (0)
385#else
386#define ASSERT_VALUE_BIG(h, s) \
387 ASSERTMSG("Big keys not supported!\n", !CmpIsKeyValueBig(h, s));
388#endif
389
390//
391// Returns whether or not this is a small valued key
392//
393static inline
397{
398 /* Check if the length has the special size value */
400 {
401 /* It does, so this is a small key: return the real length */
402 *RealLength = Length - CM_KEY_VALUE_SPECIAL_SIZE;
403 return TRUE;
404 }
405
406 /* This is not a small key, return the length we read */
407 *RealLength = Length;
408 return FALSE;
409}
410
411//
412// Returns whether or not this is a big valued key
413//
414static inline
418{
419 /* Check if the hive is XP Beta 1 or newer */
420 if (Hive->Version >= HSYS_WHISTLER_BETA1)
421 {
422 /* Check if the key length is valid for a big value key */
424 {
425 /* Yes, this value is big */
426 return TRUE;
427 }
428 }
429
430 /* Not a big value key */
431 return FALSE;
432}
433
434/*
435 * Public Hive functions.
436 */
439 PHHIVE RegistryHive,
440 ULONG OperationType,
441 ULONG HiveFlags,
443 PVOID HiveData OPTIONAL,
446 PFILE_SET_SIZE_ROUTINE FileSetSize,
447 PFILE_WRITE_ROUTINE FileWrite,
448 PFILE_READ_ROUTINE FileRead,
449 PFILE_FLUSH_ROUTINE FileFlush,
450 ULONG Cluster OPTIONAL,
452
455 PHHIVE RegistryHive);
456
457#define HvGetCell(Hive, Cell) \
458 (Hive)->GetCellRoutine(Hive, Cell)
459
460#define HvReleaseCell(Hive, Cell) \
461do { \
462 if ((Hive)->ReleaseCellRoutine) \
463 (Hive)->ReleaseCellRoutine(Hive, Cell); \
464} while(0)
465
468 PHHIVE RegistryHive,
469 PVOID Cell);
470
473 PHHIVE RegistryHive,
474 ULONG Size,
476 IN HCELL_INDEX Vicinity);
477
480 IN PHHIVE RegistryHive,
481 IN HCELL_INDEX CellIndex
482);
483
486 PHHIVE RegistryHive,
487 HCELL_INDEX CellOffset,
488 ULONG Size);
489
492 PHHIVE RegistryHive,
493 HCELL_INDEX CellOffset);
494
497 PHHIVE RegistryHive,
498 HCELL_INDEX CellOffset,
499 BOOLEAN HoldingLock);
500
503 IN PHHIVE Hive,
504 IN HCELL_INDEX Cell
505);
506
508CMAPI
510 IN PHHIVE RegistryHive
511);
512
515 PHHIVE RegistryHive);
516
519 PHHIVE RegistryHive);
520
522CMAPI
524 _In_ PHHIVE RegistryHive);
525
527CMAPI
529 _In_ PHHIVE RegistryHive);
530
532CMAPI
534 IN OUT PHV_TRACK_CELL_REF CellRef,
535 IN PHHIVE Hive,
536 IN HCELL_INDEX Cell
537);
538
539VOID
540CMAPI
543);
544
545/*
546 * Private functions.
547 */
548
551 _In_ PHHIVE Hive,
552 _In_ HCELL_INDEX CellIndex);
553
556 PHHIVE RegistryHive,
557 ULONG Size,
559
562 PHHIVE Hive);
563
566 PHBASE_BLOCK HiveHeader);
567
570 _In_ PHBASE_BLOCK BaseBlock,
572
573//
574// Registry Self-Heal Routines
575//
577CMAPI
579 _In_ BOOLEAN FixHive);
580
582CMAPI
584 _Inout_ PHHIVE Hive,
585 _In_ HCELL_INDEX TargetKey,
587 _In_ BOOLEAN FixHive);
588
590CMAPI
592 _Inout_ PHHIVE Hive,
593 _In_ HCELL_INDEX DirtyCell,
594 _In_ HCELL_INDEX ParentCell,
595 _Inout_ PCELL_DATA CellData,
596 _In_ BOOLEAN FixHive);
597
599CMAPI
601 _Inout_ PHHIVE Hive,
602 _In_ HCELL_INDEX DirtyCell,
603 _Inout_ PCELL_DATA CellData,
604 _In_ BOOLEAN FixHive);
605
607CMAPI
609 _Inout_ PHHIVE Hive,
610 _In_ HCELL_INDEX DirtyCell,
611 _Inout_ PCELL_DATA CellData,
612 _In_ BOOLEAN FixHive);
613
615CMAPI
617 _Inout_ PHHIVE Hive,
618 _In_ HCELL_INDEX CurrentCell,
619 _In_ BOOLEAN FixHive);
620
622CMAPI
624 _Inout_ PHHIVE Hive,
625 _In_ HCELL_INDEX CurrentCell,
626 _In_ ULONG ListCountIndex,
627 _Inout_ PCELL_DATA ValueListData,
628 _In_ BOOLEAN FixHive);
629
631CMAPI
633 _Inout_ PHHIVE Hive,
634 _In_ HCELL_INDEX CurrentCell,
636 _Inout_ PCELL_DATA CellData,
637 _In_ BOOLEAN FixHive);
638
640CMAPI
642 _Inout_ PHHIVE Hive,
643 _In_ HCELL_INDEX CurrentCell,
644 _Inout_ PCELL_DATA CellData,
645 _In_ BOOLEAN FixHive);
646
647/* Old-style Public "Cmlib" functions */
648
651 PHHIVE Hive,
652 PCWSTR Name);
653
654/* NT-style Public Cm functions */
655
656//
657// Check Registry Routines
658//
660NTAPI
662 _In_ PHHIVE Hive,
663 _In_ PHBIN Bin);
664
666NTAPI
668 _In_ PHHIVE Hive);
669
671NTAPI
673 _In_ PCMHIVE RegistryHive,
675
676//
677// Cell Index Routines
678//
680NTAPI
682 IN PHHIVE Hive,
684 IN PCUNICODE_STRING SearchName
685);
686
688NTAPI
690 IN PHHIVE Hive,
693);
694
695ULONG
696NTAPI
698 IN ULONG Hash,
700 IN BOOLEAN AllowSeparators
701);
702
704NTAPI
706 IN PHHIVE Hive,
709);
710
712NTAPI
714 IN PHHIVE Hive,
716 IN HCELL_INDEX TargetKey
717);
718
720NTAPI
722 IN PHHIVE Hive,
724 HCELL_INDEX TargetKey
725);
726
727
728//
729// Name Functions
730//
731LONG
732NTAPI
734 IN PCUNICODE_STRING SearchName,
735 IN PWCHAR CompressedName,
736 IN ULONG NameLength
737);
738
739USHORT
740NTAPI
742 IN PHHIVE Hive,
744);
745
746USHORT
747NTAPI
749 IN PWCHAR Name,
751);
752
753USHORT
754NTAPI
756 IN PHHIVE Hive,
759);
760
761VOID
762NTAPI
765 IN ULONG DestinationLength,
767 IN ULONG SourceLength
768);
769
771NTAPI
773 IN PHHIVE Hive,
776 OUT PULONG ChildIndex OPTIONAL,
777 OUT PHCELL_INDEX CellIndex
778);
779
780
781//
782// Cell Value Routines
783//
785NTAPI
787 IN PHHIVE Hive,
788 IN PCM_KEY_NODE KeyNode,
790);
791
793NTAPI
795 IN PHHIVE Hive,
798);
799
801NTAPI
803 IN PHHIVE Hive,
804 IN PVOID Data,
806 IN HSTORAGE_TYPE StorageType,
807 IN HCELL_INDEX ValueCell,
808 OUT PHCELL_INDEX DataCell
809);
810
812NTAPI
814 IN PHHIVE Hive,
815 IN HCELL_INDEX ValueCell,
816 IN ULONG Index,
817 IN HSTORAGE_TYPE StorageType,
819);
820
822NTAPI
824 IN PHHIVE Hive,
825 IN HCELL_INDEX Cell
826);
827
829NTAPI
831 IN PHHIVE Hive,
833);
834
836NTAPI
838 IN PHHIVE Hive,
839 IN HCELL_INDEX DataCell,
841);
842
844NTAPI
846 IN PHHIVE Hive,
847 IN ULONG Index,
849);
850
852NTAPI
854 IN PHHIVE Hive,
858 OUT PBOOLEAN BufferAllocated,
859 OUT PHCELL_INDEX CellToRelease
860);
861
863NTAPI
865 IN PHHIVE SourceHive,
866 IN PCHILD_LIST SrcValueList,
867 IN PHHIVE DestinationHive,
868 IN OUT PCHILD_LIST DestValueList,
869 IN HSTORAGE_TYPE StorageType
870);
871
873NTAPI
875 IN PHHIVE Hive,
876 IN HCELL_INDEX Cell,
878);
879
880VOID
881NTAPI
883 IN PHHIVE Hive,
884 IN HCELL_INDEX SecurityCell
885);
886
887VOID
888NTAPI
890 IN PHHIVE Hive,
891 IN HCELL_INDEX Cell
892);
893
894/******************************************************************************/
895
896/* To be implemented by the user of this library */
897PVOID
898NTAPI
900 IN SIZE_T Size,
901 IN BOOLEAN Paged,
902 IN ULONG Tag
903);
904
905VOID
906NTAPI
907CmpFree(
908 IN PVOID Ptr,
909 IN ULONG Quota
910);
911
912#endif /* _CMLIB_H_ */
unsigned char BOOLEAN
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn UINT32 *TableIdx 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:732
LONG NTSTATUS
Definition: precomp.h:26
_In_ ULONG _In_opt_ WDFREQUEST _In_opt_ PVOID _In_ size_t _In_ PVOID _In_ size_t _Out_ size_t * DataLength
Definition: cdrom.h:1444
Definition: bin.h:44
Definition: bufpool.h:45
#define CM_KEY_VALUE_BIG
Definition: cmdata.h:50
#define CM_KEY_VALUE_SPECIAL_SIZE
Definition: cmdata.h:51
BOOLEAN CMAPI HvTrackCellRef(IN OUT PHV_TRACK_CELL_REF CellRef, IN PHHIVE Hive, IN HCELL_INDEX Cell)
Definition: hivecell.c:554
CM_CHECK_REGISTRY_STATUS NTAPI HvValidateBin(_In_ PHHIVE Hive, _In_ PHBIN Bin)
Validates a bin from a hive. It performs checks against the cells from this bin, ensuring the bin is ...
Definition: cmcheck.c:1413
struct _HV_TRACK_CELL_REF * PHV_TRACK_CELL_REF
#define CMP_SECURITY_HASH_LISTS
Definition: cmlib.h:294
#define STATIC_CELL_PAIR_COUNT
Definition: cmlib.h:367
BOOLEAN CMAPI HvpVerifyHiveHeader(_In_ PHBASE_BLOCK BaseBlock, _In_ ULONG FileType)
Validates the base block header of a registry file (hive or log).
Definition: hiveinit.c:49
struct _HV_HIVE_CELL_PAIR HV_HIVE_CELL_PAIR
struct _CM_KEY_SECURITY_CACHE_ENTRY * PCM_KEY_SECURITY_CACHE_ENTRY
Definition: cmlib.h:289
BOOLEAN CMAPI CmCreateRootNode(PHHIVE Hive, PCWSTR Name)
Definition: cminit.c:17
BOOLEAN CMAPI CmpRepairParentNode(_Inout_ PHHIVE Hive, _In_ HCELL_INDEX DirtyCell, _In_ HCELL_INDEX ParentCell, _Inout_ PCELL_DATA CellData, _In_ BOOLEAN FixHive)
Repairs the parent of the node from damage due to parent cell and parent node incosistency.
Definition: cmheal.c:532
USHORT NTAPI CmpCopyName(IN PHHIVE Hive, OUT PWCHAR Destination, IN PCUNICODE_STRING Source)
Definition: cmname.c:21
CM_CHECK_REGISTRY_STATUS NTAPI HvValidateHive(_In_ PHHIVE Hive)
Validates a registry hive. This function ensures that the storage of this hive has valid bins.
Definition: cmcheck.c:1505
BOOLEAN NTAPI CmpMarkValueDataDirty(IN PHHIVE Hive, IN PCM_KEY_VALUE Value)
Definition: cmvalue.c:19
static BOOLEAN CmpIsKeyValueBig(IN PHHIVE Hive, IN ULONG Length)
Definition: cmlib.h:416
BOOLEAN NTAPI CmpAddSubKey(IN PHHIVE Hive, IN HCELL_INDEX Parent, IN HCELL_INDEX Child)
Definition: cmindex.c:1465
BOOLEAN CMAPI HvHiveWillShrink(IN PHHIVE RegistryHive)
BOOLEAN NTAPI CmpFreeValue(IN PHHIVE Hive, IN HCELL_INDEX Cell)
Definition: cmvalue.c:73
BOOLEAN NTAPI CmpFreeValueData(IN PHHIVE Hive, IN HCELL_INDEX DataCell, IN ULONG DataLength)
Definition: cmvalue.c:44
BOOLEAN CMAPI CmpRepairClassOfNodeKey(_Inout_ PHHIVE Hive, _In_ HCELL_INDEX DirtyCell, _Inout_ PCELL_DATA CellData, _In_ BOOLEAN FixHive)
Repairs the class from damage due to class corruption within the node key.
Definition: cmheal.c:637
struct _CM_USE_COUNT_LOG_ENTRY * PCM_USE_COUNT_LOG_ENTRY
HCELL_INDEX NTAPI CmpFindSubKeyByNumber(IN PHHIVE Hive, IN PCM_KEY_NODE Node, IN ULONG Number)
Definition: cmindex.c:600
CM_CHECK_REGISTRY_STATUS NTAPI CmCheckRegistry(_In_ PCMHIVE RegistryHive, _In_ ULONG Flags)
Checks the registry that is consistent and its contents valid and not corrupted. More specifically th...
Definition: cmcheck.c:1633
VOID NTAPI CmpFree(IN PVOID Ptr, IN ULONG Quota)
Definition: registry.c:60
#define CMAPI
Definition: cmlib.h:218
BOOLEAN CMAPI HvSyncHiveFromRecover(_In_ PHHIVE RegistryHive)
Synchronizes a hive with recovered data during a healing/resuscitation operation of the registry.
Definition: hivewrt.c:672
ULONG CMAPI HvpHiveHeaderChecksum(PHBASE_BLOCK HiveHeader)
Definition: hivesum.c:17
NTSTATUS NTAPI CmpRemoveValueFromList(IN PHHIVE Hive, IN ULONG Index, IN OUT PCHILD_LIST ChildList)
Definition: cmvalue.c:320
BOOLEAN CMAPI CmpRepairValueList(_Inout_ PHHIVE Hive, _In_ HCELL_INDEX CurrentCell, _In_ BOOLEAN FixHive)
Repairs the value list due to corruption. The process involes by purging the whole damaged list.
Definition: cmheal.c:765
USHORT NTAPI CmpNameSize(IN PHHIVE Hive, IN PCUNICODE_STRING Name)
Definition: cmname.c:74
BOOLEAN CMAPI HvSyncHive(PHHIVE RegistryHive)
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 CMAPI CmIsSelfHealEnabled(_In_ BOOLEAN FixHive)
Checks if self healing is permitted by the kernel and/or bootloader. Self healing is also triggered i...
Definition: cmheal.c:369
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
BOOLEAN NTAPI CmpRemoveSubKey(IN PHHIVE Hive, IN HCELL_INDEX ParentKey, IN HCELL_INDEX TargetKey)
Definition: cmindex.c:1694
VOID NTAPI CmpCopyCompressedName(OUT PWCHAR Destination, IN ULONG DestinationLength, IN PWCHAR Source, IN ULONG SourceLength)
Definition: cmname.c:56
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
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)
BOOLEAN CMAPI CmpRepairKeyNodeSignature(_Inout_ PHHIVE Hive, _In_ HCELL_INDEX DirtyCell, _Inout_ PCELL_DATA CellData, _In_ BOOLEAN FixHive)
Repairs the key node signature from damage due to signature corruption.
Definition: cmheal.c:585
BOOLEAN CMAPI HvIsCellDirty(IN PHHIVE Hive, IN HCELL_INDEX Cell)
Definition: hivecell.c:153
VOID CMAPI HvReleaseFreeCellRefArray(IN OUT PHV_TRACK_CELL_REF CellRef)
Definition: hivecell.c:634
VOID NTAPI CmpFreeSecurityDescriptor(IN PHHIVE Hive, IN HCELL_INDEX Cell)
Definition: cmse.c:65
PCELL_DATA CMAPI HvpGetCellData(_In_ PHHIVE Hive, _In_ HCELL_INDEX CellIndex)
Definition: hivecell.c:77
struct _CM_KEY_CONTROL_BLOCK * PCM_KEY_CONTROL_BLOCK
Definition: cmlib.h:290
BOOLEAN NTAPI CmpMarkIndexDirty(IN PHHIVE Hive, HCELL_INDEX ParentKey, HCELL_INDEX TargetKey)
BOOLEAN CMAPI CmpRepairValueListCount(_Inout_ PHHIVE Hive, _In_ HCELL_INDEX CurrentCell, _In_ ULONG ListCountIndex, _Inout_ PCELL_DATA ValueListData, _In_ BOOLEAN FixHive)
Repairs the value list count of key due to corruption. The process involves by removing one damaged v...
Definition: cmheal.c:696
HCELL_INDEX NTAPI CmpFindValueByName(IN PHHIVE Hive, IN PCM_KEY_NODE KeyNode, IN PCUNICODE_STRING Name)
Definition: cmvalue.c:99
BOOLEAN CMAPI HvWriteAlternateHive(_In_ PHHIVE RegistryHive)
Writes data to an alternate registry hive. An alternate hive is usually backed up by a primary hive....
Definition: hivewrt.c:634
BOOLEAN CMAPI CmpRepairSubKeyCounts(_Inout_ PHHIVE Hive, _In_ HCELL_INDEX CurrentCell, _In_ ULONG Count, _Inout_ PCELL_DATA CellData, _In_ BOOLEAN FixHive)
Repairs the subkey list count due to corruption. The process involves by fixing the count itself with...
Definition: cmheal.c:829
struct _HV_HIVE_CELL_PAIR * PHV_HIVE_CELL_PAIR
BOOLEAN CMAPI CmpRepairSubKeyList(_Inout_ PHHIVE Hive, _In_ HCELL_INDEX CurrentCell, _Inout_ PCELL_DATA CellData, _In_ BOOLEAN FixHive)
Repairs the subkey list due to corruption. The process involves by purging the whole damaged subkeys ...
Definition: cmheal.c:883
BOOLEAN CMAPI CmpRepairParentKey(_Inout_ PHHIVE Hive, _In_ HCELL_INDEX TargetKey, _In_ HCELL_INDEX ParentKey, _In_ BOOLEAN FixHive)
Repairs the parent key from damage by removing the offending subkey cell.
Definition: cmheal.c:409
static BOOLEAN CmpIsKeyValueSmall(OUT PULONG RealLength, IN ULONG Length)
Definition: cmlib.h:395
BOOLEAN CMAPI HvIsCellAllocated(IN PHHIVE RegistryHive, IN HCELL_INDEX CellIndex)
Definition: hivecell.c:53
PCELL_DATA NTAPI CmpValueToData(IN PHHIVE Hive, IN PCM_KEY_VALUE Value, OUT PULONG Length)
Definition: cmvalue.c:167
VOID CMAPI HvFreeCell(PHHIVE RegistryHive, HCELL_INDEX CellOffset)
Definition: hivecell.c:468
struct _CM_CELL_REMAP_BLOCK * PCM_CELL_REMAP_BLOCK
Definition: cmlib.h:291
NTSTATUS CMAPI HvpCreateHiveFreeCellList(PHHIVE Hive)
Definition: hivecell.c:306
LONG CMAPI HvGetCellSize(PHHIVE RegistryHive, PVOID Cell)
LONG NTAPI CmpCompareCompressedName(IN PCUNICODE_STRING SearchName, IN PWCHAR CompressedName, IN ULONG NameLength)
Definition: cmname.c:109
struct _CM_USE_COUNT_LOG * PCM_USE_COUNT_LOG
struct _CMHIVE * PCMHIVE
ULONG CM_CHECK_REGISTRY_STATUS
Definition: cmlib.h:223
USHORT NTAPI CmpCompressedNameSize(IN PWCHAR Name, IN ULONG Length)
Definition: cmname.c:95
BOOLEAN CMAPI HvMarkCellDirty(PHHIVE RegistryHive, HCELL_INDEX CellOffset, BOOLEAN HoldingLock)
Definition: hivecell.c:109
struct _CMHIVE CMHIVE
HCELL_INDEX CMAPI HvReallocateCell(PHHIVE RegistryHive, HCELL_INDEX CellOffset, ULONG Size)
Definition: hivecell.c:421
HCELL_INDEX CMAPI HvAllocateCell(PHHIVE RegistryHive, ULONG Size, HSTORAGE_TYPE Storage, IN HCELL_INDEX Vicinity)
HCELL_INDEX NTAPI CmpFindSubKeyByName(IN PHHIVE Hive, IN PCM_KEY_NODE Parent, IN PCUNICODE_STRING SearchName)
Definition: cmindex.c:683
ULONG NTAPI CmpComputeHashKey(IN ULONG Hash, IN PCUNICODE_STRING Name, IN BOOLEAN AllowSeparators)
Definition: cmindex.c:460
ULONG CmlibTraceLevel
Definition: cminit.c:12
PVOID NTAPI CmpAllocate(IN SIZE_T Size, IN BOOLEAN Paged, IN ULONG Tag)
Definition: registry.c:49
struct _HV_TRACK_CELL_REF HV_TRACK_CELL_REF
VOID CMAPI HvFree(PHHIVE RegistryHive)
BOOLEAN CMAPI HvWriteHive(PHHIVE RegistryHive)
VOID NTAPI CmpRemoveSecurityCellList(IN PHHIVE Hive, IN HCELL_INDEX SecurityCell)
Definition: cmse.c:19
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
NTSTATUS NTAPI CmpFreeKeyByCell(IN PHHIVE Hive, IN HCELL_INDEX Cell, IN BOOLEAN Unlink)
Definition: cmkeydel.c:159
struct _CM_USE_COUNT_LOG_ENTRY CM_USE_COUNT_LOG_ENTRY
PHBIN CMAPI HvpAddBin(PHHIVE RegistryHive, ULONG Size, HSTORAGE_TYPE Storage)
Definition: hivebin.c:12
struct _CM_USE_COUNT_LOG CM_USE_COUNT_LOG
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
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
static int Hash(const char *)
Definition: reader.c:2257
ULONG RtlCompareUnicodeString(PUNICODE_STRING s1, PUNICODE_STRING s2, BOOLEAN UpCase)
Definition: string_lib.cpp:31
#define KeQuerySystemTime(t)
Definition: env_spec_w32.h:570
ERESOURCE * PERESOURCE
Definition: env_spec_w32.h:595
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
Definition: fsrtlfuncs.h:898
BOOLEAN(CMAPI * PFILE_READ_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PULONG FileOffset, PVOID Buffer, SIZE_T BufferLength)
Definition: hivedata.h:248
ULONG * PHCELL_INDEX
Definition: hivedata.h:105
HSTORAGE_TYPE
Definition: hivedata.h:126
#define HFILE_TYPE_MAX
Definition: hivedata.h:37
BOOLEAN(CMAPI * PFILE_WRITE_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PULONG FileOffset, PVOID Buffer, SIZE_T BufferLength)
Definition: hivedata.h:257
VOID(CMAPI * PFREE_ROUTINE)(PVOID Ptr, ULONG Quota)
Definition: hivedata.h:242
BOOLEAN(CMAPI * PFILE_FLUSH_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, PLARGE_INTEGER FileOffset, ULONG Length)
Definition: hivedata.h:274
PVOID(CMAPI * PALLOCATE_ROUTINE)(SIZE_T Size, BOOLEAN Paged, ULONG Tag)
Definition: hivedata.h:235
ULONG HCELL_INDEX
Definition: hivedata.h:105
BOOLEAN(CMAPI * PFILE_SET_SIZE_ROUTINE)(struct _HHIVE *RegistryHive, ULONG FileType, ULONG FileSize, ULONG OldfileSize)
Definition: hivedata.h:266
#define HSYS_WHISTLER_BETA1
Definition: hivedata.h:71
NTSYSAPI void WINAPI RtlInitializeBitMap(PRTL_BITMAP, PULONG, ULONG)
NTSYSAPI void WINAPI RtlSetAllBits(PRTL_BITMAP)
NTSYSAPI void WINAPI RtlClearAllBits(PRTL_BITMAP)
NTSYSAPI ULONG WINAPI RtlFindSetBits(PCRTL_BITMAP, ULONG, ULONG)
NTSYSAPI void WINAPI RtlSetBits(PRTL_BITMAP, ULONG, ULONG)
WORD SECURITY_DESCRIPTOR_CONTROL
Definition: lsa.idl:37
WORD * PSECURITY_DESCRIPTOR_CONTROL
Definition: lsa.idl:37
static IStorage Storage
Definition: ole2.c:3548
#define _Inout_
Definition: ms_sal.h:378
#define _In_
Definition: ms_sal.h:308
_In_ NDIS_STATUS _In_ ULONG _In_ USHORT _In_opt_ PVOID _In_ ULONG DataSize
Definition: ndis.h:4755
_In_ UINT _In_ UINT _In_ PNDIS_PACKET Source
Definition: ndis.h:3169
_In_ const STRING * String2
Definition: rtlfuncs.h:2357
_Out_ _Inout_ POEM_STRING _In_ PCUNICODE_STRING SourceString
Definition: rtlfuncs.h:1910
_In_ const STRING _In_ BOOLEAN CaseInSensitive
Definition: rtlfuncs.h:2390
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
Definition: rtlfuncs.h:3004
_Out_ _Inout_ POEM_STRING DestinationString
Definition: rtlfuncs.h:1909
WCHAR NTAPI RtlUpcaseUnicodeChar(_In_ WCHAR Source)
Definition: nlsboot.c:176
int Count
Definition: noreturn.cpp:7
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
_In_opt_ PENTER_STATE_SYSTEM_HANDLER _In_opt_ PVOID _In_ LONG _In_opt_ LONG volatile * Number
Definition: ntpoapi.h:207
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
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
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
Definition: cmlib.h:316
LONG SecurityHitHint
Definition: cmlib.h:340
ULONG FlushCount
Definition: cmlib.h:356
PKTHREAD HiveSecurityLockOwner
Definition: cmlib.h:329
HHIVE Hive
Definition: cmlib.h:317
BOOLEAN HiveIsLoading
Definition: cmlib.h:357
LIST_ENTRY NotifyList
Definition: cmlib.h:319
BOOLEAN Frozen
Definition: cmlib.h:345
PKGUARDED_MUTEX ViewLock
Definition: cmlib.h:323
LIST_ENTRY HiveList
Definition: cmlib.h:320
ULONG SecurityCount
Definition: cmlib.h:338
EX_PUSH_LOCK WriterLock
Definition: cmlib.h:325
USHORT MappedViews
Definition: cmlib.h:335
PKTHREAD HiveLockOwner
Definition: cmlib.h:322
PERESOURCE FlusherLock
Definition: cmlib.h:327
PKTHREAD WriterLockOwner
Definition: cmlib.h:326
ULONG UseCount
Definition: cmlib.h:337
BOOLEAN GrowOnlyMode
Definition: cmlib.h:347
LIST_ENTRY KnodeConvertListHead
Definition: cmlib.h:350
EX_PUSH_LOCK SecurityLock
Definition: cmlib.h:328
LIST_ENTRY SecurityHash[CMP_SECURITY_HASH_LISTS]
Definition: cmlib.h:342
PWORK_QUEUE_ITEM UnloadWorkItem
Definition: cmlib.h:346
PKTHREAD CreatorOwner
Definition: cmlib.h:358
LIST_ENTRY TrustClassEntry
Definition: cmlib.h:355
ULONG Flags
Definition: cmlib.h:354
CM_USE_COUNT_LOG UseCountLog
Definition: cmlib.h:352
HANDLE FileHandles[HFILE_TYPE_MAX]
Definition: cmlib.h:318
LIST_ENTRY PinViewListHead
Definition: cmlib.h:331
LIST_ENTRY KcbConvertListHead
Definition: cmlib.h:349
PKEVENT UnloadEvent
Definition: cmlib.h:343
UNICODE_STRING FileUserName
Definition: cmlib.h:334
ULONG SecurityCacheSize
Definition: cmlib.h:339
PCM_KEY_SECURITY_CACHE_ENTRY SecurityCache
Definition: cmlib.h:341
PFILE_OBJECT FileObject
Definition: cmlib.h:332
PCM_KEY_CONTROL_BLOCK RootKcb
Definition: cmlib.h:344
LIST_ENTRY LRUViewListHead
Definition: cmlib.h:330
PKTHREAD ViewLockOwner
Definition: cmlib.h:324
PCM_CELL_REMAP_BLOCK CellRemapArray
Definition: cmlib.h:351
ULONG GrowOffset
Definition: cmlib.h:348
EX_PUSH_LOCK HiveLock
Definition: cmlib.h:321
USHORT PinnedViews
Definition: cmlib.h:336
CM_USE_COUNT_LOG LockHiveLog
Definition: cmlib.h:353
UNICODE_STRING FileFullPath
Definition: cmlib.h:333
Definition: cm.h:204
Definition: cmlib.h:300
HCELL_INDEX Cell
Definition: cmlib.h:301
USHORT Size
Definition: cmlib.h:308
USHORT Next
Definition: cmlib.h:307
CM_USE_COUNT_LOG_ENTRY Log[32]
Definition: cmlib.h:309
HCELL_INDEX Cell
Definition: cmlib.h:364
PHV_HIVE_CELL_PAIR CellArray
Definition: cmlib.h:372
HV_HIVE_CELL_PAIR StaticArray[STATIC_CELL_PAIR_COUNT]
Definition: cmlib.h:373
USHORT Count
Definition: cmlib.h:370
USHORT StaticCount
Definition: cmlib.h:374
Definition: typedefs.h:120
SECURITY_DESCRIPTOR_CONTROL Control
Definition: setypes.h:839
uint32_t * PULONG
Definition: typedefs.h:59
const uint16_t * PCWSTR
Definition: typedefs.h:57
unsigned char * PBOOLEAN
Definition: typedefs.h:53
#define NTAPI
Definition: typedefs.h:36
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define IN
Definition: typedefs.h:39
uint16_t * PWCHAR
Definition: typedefs.h:56
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
Definition: dlist.c:348
static int Unlink(const char **args)
Definition: vfdcmd.c:2549
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_CHILD_LIST_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFCHILDLIST * ChildList
Definition: wdfchildlist.h:481
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
Definition: wdfdevice.h:4065
_In_ WDFDEVICE _In_ WDF_SPECIAL_FILE_TYPE FileType
Definition: wdfdevice.h:2741
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFDEVICE Child
Definition: wdffdo.h:536
_Must_inspect_result_ _In_opt_ WDFKEY ParentKey
Definition: wdfregistry.h:69
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
Definition: wdfregistry.h:413
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
_In_opt_ PALLOCATE_FUNCTION Allocate
Definition: exfuncs.h:814
_In_opt_ PALLOCATE_FUNCTION _In_opt_ PFREE_FUNCTION Free
Definition: exfuncs.h:815
* PFILE_OBJECT
Definition: iotypes.h:1998
_In_ ULONG NumberToFind
Definition: rtlfuncs.h:609
_In_ ULONG _In_ ULONG HintIndex
Definition: rtlfuncs.h:610
_In_ ULONG StartingIndex
Definition: rtlfuncs.h:395
struct _SECURITY_DESCRIPTOR_RELATIVE * PISECURITY_DESCRIPTOR_RELATIVE
struct _SECURITY_DESCRIPTOR_RELATIVE SECURITY_DESCRIPTOR_RELATIVE
unsigned char UCHAR
Definition: xmlstorage.h:181
__wchar_t WCHAR
Definition: xmlstorage.h:180