ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

cm.h
Go to the documentation of this file.
00001 /*
00002  * PROJECT:         ReactOS Kernel
00003  * LICENSE:         GPL - See COPYING in the top level directory
00004  * FILE:            ntoskrnl/cm/cm.h
00005  * PURPOSE:         Internal header for the Configuration Manager
00006  * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
00007  */
00008 #define _CM_
00009 #include "cmlib.h"
00010 
00011 //
00012 // Define this if you want debugging support
00013 //
00014 #define _CM_DEBUG_                                      0x00
00015 
00016 //
00017 // These define the Debug Masks Supported
00018 //
00019 #define CM_HANDLE_DEBUG                                 0x01
00020 #define CM_NAMESPACE_DEBUG                              0x02
00021 #define CM_SECURITY_DEBUG                               0x04
00022 #define CM_REFERENCE_DEBUG                              0x08
00023 #define CM_CALLBACK_DEBUG                               0x10
00024 
00025 //
00026 // Debug/Tracing support
00027 //
00028 #if _CM_DEBUG_
00029 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
00030 #define CMTRACE DbgPrintEx
00031 #else
00032 #define CMTRACE(x, ...)                                 \
00033     if (x & CmpTraceLevel) DbgPrint(__VA_ARGS__)
00034 #endif
00035 #else
00036 #define CMTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__)
00037 #endif
00038 
00039 //
00040 // Hack since bigkeys are not yet supported
00041 //
00042 #define ASSERT_VALUE_BIG(h, s)                          \
00043     ASSERTMSG("Big keys not supported!", !CmpIsKeyValueBig(h, s));
00044 
00045 //
00046 // CM_KEY_CONTROL_BLOCK Signatures
00047 //
00048 #define CM_KCB_SIGNATURE                                'bKmC'
00049 #define CM_KCB_INVALID_SIGNATURE                        '4FmC'
00050 
00051 //
00052 // CM_KEY_CONTROL_BLOCK Flags
00053 //
00054 #define CM_KCB_NO_SUBKEY                                0x01
00055 #define CM_KCB_SUBKEY_ONE                               0x02
00056 #define CM_KCB_SUBKEY_HINT                              0x04
00057 #define CM_KCB_SYM_LINK_FOUND                           0x08
00058 #define CM_KCB_KEY_NON_EXIST                            0x10
00059 #define CM_KCB_NO_DELAY_CLOSE                           0x20
00060 #define CM_KCB_INVALID_CACHED_INFO                      0x40
00061 #define CM_KCB_READ_ONLY_KEY                            0x80
00062 
00063 //
00064 // CM_KEY_VALUE Types
00065 //
00066 #define CM_KEY_VALUE_SMALL                              0x4
00067 #define CM_KEY_VALUE_BIG                                0x3FD8
00068 #define CM_KEY_VALUE_SPECIAL_SIZE                       0x80000000
00069 
00070 //
00071 // Number of various lists and hashes
00072 //
00073 #define CMP_SECURITY_HASH_LISTS                         64
00074 #define CMP_MAX_CALLBACKS                               100
00075 
00076 //
00077 // Hashing Constants
00078 //
00079 #define CMP_HASH_IRRATIONAL                             314159269
00080 #define CMP_HASH_PRIME                                  1000000007
00081 
00082 //
00083 // CmpCreateKeyControlBlock Flags
00084 //
00085 #define CMP_CREATE_FAKE_KCB                             0x1
00086 #define CMP_LOCK_HASHES_FOR_KCB                         0x2
00087 
00088 //
00089 // CmpDoCreate and CmpDoOpen flags
00090 //
00091 #define CMP_CREATE_KCB_KCB_LOCKED                       0x2
00092 #define CMP_OPEN_KCB_NO_CREATE                          0x4
00093 
00094 //
00095 // EnlistKeyBodyWithKCB Flags
00096 //
00097 #define CMP_ENLIST_KCB_LOCKED_SHARED                    0x1
00098 #define CMP_ENLIST_KCB_LOCKED_EXCLUSIVE                 0x2
00099 
00100 //
00101 // Unload Flags
00102 //
00103 #define CMP_UNLOCK_KCB_LOCKED                    0x1
00104 #define CMP_UNLOCK_REGISTRY_LOCKED               0x2
00105 
00106 //
00107 // Maximum size of Value Cache
00108 //
00109 #define MAXIMUM_CACHED_DATA                             2 * PAGE_SIZE
00110 
00111 //
00112 // Hives to load on startup
00113 //
00114 #define CM_NUMBER_OF_MACHINE_HIVES                      6
00115 
00116 //
00117 // Number of items that can fit inside an Allocation Page
00118 //
00119 #define CM_KCBS_PER_PAGE                                \
00120     ((PAGE_SIZE - FIELD_OFFSET(CM_ALLOC_PAGE, AllocPage)) / sizeof(CM_KEY_CONTROL_BLOCK))
00121 #define CM_DELAYS_PER_PAGE                              \
00122     ((PAGE_SIZE - FIELD_OFFSET(CM_ALLOC_PAGE, AllocPage)) / sizeof(CM_DELAY_ALLOC))
00123 
00124 //
00125 // Value Search Results
00126 //
00127 typedef enum _VALUE_SEARCH_RETURN_TYPE
00128 {
00129     SearchSuccess,
00130     SearchNeedExclusiveLock,
00131     SearchFail
00132 } VALUE_SEARCH_RETURN_TYPE;
00133 
00134 //
00135 // Key Hash
00136 //
00137 typedef struct _CM_KEY_HASH
00138 {
00139     ULONG ConvKey;
00140     struct _CM_KEY_HASH *NextHash;
00141     PHHIVE KeyHive;
00142     HCELL_INDEX KeyCell;
00143 } CM_KEY_HASH, *PCM_KEY_HASH;
00144 
00145 //
00146 // Key Hash Table Entry
00147 //
00148 typedef struct _CM_KEY_HASH_TABLE_ENTRY
00149 {
00150     EX_PUSH_LOCK Lock;
00151     PKTHREAD Owner;
00152     PCM_KEY_HASH Entry;
00153 } CM_KEY_HASH_TABLE_ENTRY, *PCM_KEY_HASH_TABLE_ENTRY;
00154 
00155 //
00156 // Name Hash
00157 //
00158 typedef struct _CM_NAME_HASH
00159 {
00160     ULONG ConvKey;
00161     struct _CM_NAME_HASH *NextHash;
00162     USHORT NameLength;
00163     WCHAR Name[ANYSIZE_ARRAY];
00164 } CM_NAME_HASH, *PCM_NAME_HASH;
00165 
00166 //
00167 // Name Hash Table Entry
00168 //
00169 typedef struct _CM_NAME_HASH_TABLE_ENTRY
00170 {
00171     EX_PUSH_LOCK Lock;
00172     PCM_NAME_HASH Entry;
00173 } CM_NAME_HASH_TABLE_ENTRY, *PCM_NAME_HASH_TABLE_ENTRY;
00174 
00175 //
00176 // Key Security Cache
00177 //
00178 typedef struct _CM_KEY_SECURITY_CACHE
00179 {
00180     HCELL_INDEX Cell;
00181     ULONG ConvKey;
00182     LIST_ENTRY List;
00183     ULONG DescriptorLength;
00184     SECURITY_DESCRIPTOR_RELATIVE Descriptor;
00185 } CM_KEY_SECURITY_CACHE, *PCM_KEY_SECURITY_CACHE;
00186 
00187 //
00188 // Key Security Cache Entry
00189 //
00190 typedef struct _CM_KEY_SECURITY_CACHE_ENTRY
00191 {
00192     HCELL_INDEX Cell;
00193     PCM_KEY_SECURITY_CACHE CachedSecurity;
00194 } CM_KEY_SECURITY_CACHE_ENTRY, *PCM_KEY_SECURITY_CACHE_ENTRY;
00195 
00196 //
00197 // Cached Child List
00198 //
00199 typedef struct _CACHED_CHILD_LIST
00200 {
00201     ULONG Count;
00202     union
00203     {
00204         ULONG ValueList;
00205         struct _CM_KEY_CONTROL_BLOCK *RealKcb;
00206     };
00207 } CACHED_CHILD_LIST, *PCACHED_CHILD_LIST;
00208 
00209 //
00210 // Index Hint Block
00211 //
00212 typedef struct _CM_INDEX_HINT_BLOCK
00213 {
00214     ULONG Count;
00215     ULONG HashKey[ANYSIZE_ARRAY];
00216 } CM_INDEX_HINT_BLOCK, *PCM_INDEX_HINT_BLOCK;
00217 
00218 //
00219 // Key Body
00220 //
00221 typedef struct _CM_KEY_BODY
00222 {
00223     ULONG Type;
00224     struct _CM_KEY_CONTROL_BLOCK *KeyControlBlock;
00225     struct _CM_NOTIFY_BLOCK *NotifyBlock;
00226     HANDLE ProcessID;
00227     LIST_ENTRY KeyBodyList;
00228 } CM_KEY_BODY, *PCM_KEY_BODY;
00229 
00230 //
00231 // Name Control Block (NCB)
00232 //
00233 typedef struct _CM_NAME_CONTROL_BLOCK
00234 {
00235     BOOLEAN Compressed;
00236     USHORT RefCount;
00237     union
00238     {
00239         CM_NAME_HASH NameHash;
00240         struct
00241         {
00242             ULONG ConvKey;
00243             PCM_KEY_HASH NextHash;
00244             USHORT NameLength;
00245             WCHAR Name[ANYSIZE_ARRAY];
00246         };
00247     };
00248 } CM_NAME_CONTROL_BLOCK, *PCM_NAME_CONTROL_BLOCK;
00249 
00250 //
00251 // Key Control Block (KCB)
00252 //
00253 typedef struct _CM_KEY_CONTROL_BLOCK
00254 {
00255     ULONG Signature;
00256     USHORT RefCount;
00257     USHORT Flags;
00258     struct
00259     {
00260         ULONG ExtFlags:8;
00261         ULONG PrivateAlloc:1;
00262         ULONG Delete:1;
00263         ULONG DelayedCloseIndex:12;
00264         ULONG TotalLevels:10;
00265     };
00266     union
00267     {
00268         CM_KEY_HASH KeyHash;
00269         struct
00270         {
00271             ULONG ConvKey;
00272             PCM_KEY_HASH NextHash;
00273             PHHIVE KeyHive;
00274             HCELL_INDEX KeyCell;
00275         };
00276     };
00277     struct _CM_KEY_CONTROL_BLOCK *ParentKcb;
00278     PCM_NAME_CONTROL_BLOCK NameBlock;
00279     PCM_KEY_SECURITY_CACHE CachedSecurity;
00280     CACHED_CHILD_LIST ValueCache;
00281     union
00282     {
00283         PCM_INDEX_HINT_BLOCK IndexHint;
00284         ULONG HashKey;
00285         ULONG SubKeyCount;
00286     };
00287     union
00288     {
00289         LIST_ENTRY KeyBodyListHead;
00290         LIST_ENTRY FreeListEntry;
00291     };
00292     PCM_KEY_BODY KeyBodyArray[4];
00293     PVOID DelayCloseEntry;
00294     LARGE_INTEGER KcbLastWriteTime;
00295     USHORT KcbMaxNameLen;
00296     USHORT KcbMaxValueNameLen;
00297     ULONG KcbMaxValueDataLen;
00298     ULONG InDelayClose;
00299 } CM_KEY_CONTROL_BLOCK, *PCM_KEY_CONTROL_BLOCK;
00300 
00301 //
00302 // Notify Block
00303 //
00304 typedef struct _CM_NOTIFY_BLOCK
00305 {
00306     LIST_ENTRY HiveList;
00307     LIST_ENTRY PostList;
00308     PCM_KEY_CONTROL_BLOCK KeyControlBlock;
00309     PCM_KEY_BODY KeyBody;
00310     ULONG Filter:29;
00311     ULONG WatchTree:30;
00312     ULONG NotifyPending:31;
00313 } CM_NOTIFY_BLOCK, *PCM_NOTIFY_BLOCK;
00314 
00315 //
00316 // Re-map Block
00317 //
00318 typedef struct _CM_CELL_REMAP_BLOCK
00319 {
00320     HCELL_INDEX OldCell;
00321     HCELL_INDEX NewCell;
00322 } CM_CELL_REMAP_BLOCK, *PCM_CELL_REMAP_BLOCK;
00323 
00324 //
00325 // Allocation Page
00326 //
00327 typedef struct _CM_ALLOC_PAGE
00328 {
00329     ULONG FreeCount;
00330     ULONG Reserved;
00331     PVOID AllocPage;
00332 } CM_ALLOC_PAGE, *PCM_ALLOC_PAGE;
00333 
00334 //
00335 // Allocation Page Entry
00336 //
00337 typedef struct _CM_DELAY_ALLOC
00338 {
00339     LIST_ENTRY ListEntry;
00340     PCM_KEY_CONTROL_BLOCK Kcb;
00341 } CM_DELAY_ALLOC, *PCM_DELAY_ALLOC;
00342 
00343 //
00344 // Delayed Close Entry
00345 //
00346 typedef struct _CM_DELAYED_CLOSE_ENTRY
00347 {
00348     LIST_ENTRY DelayedLRUList;
00349     PCM_KEY_CONTROL_BLOCK KeyControlBlock;
00350 } CM_DELAYED_CLOSE_ENTRY, *PCM_DELAYED_CLOSE_ENTRY;
00351 
00352 //
00353 // Delayed KCB Dereference Entry
00354 //
00355 typedef struct _CM_DELAY_DEREF_KCB_ITEM
00356 {
00357     LIST_ENTRY ListEntry;
00358     PCM_KEY_CONTROL_BLOCK Kcb;
00359 } CM_DELAY_DEREF_KCB_ITEM, *PCM_DELAY_DEREF_KCB_ITEM;
00360 
00361 //
00362 // Use Count Log and Entry
00363 //
00364 typedef struct _CM_USE_COUNT_LOG_ENTRY
00365 {
00366     HCELL_INDEX Cell;
00367     PVOID Stack[7];
00368 } CM_USE_COUNT_LOG_ENTRY, *PCM_USE_COUNT_LOG_ENTRY;
00369 
00370 typedef struct _CM_USE_COUNT_LOG
00371 {
00372     USHORT Next;
00373     USHORT Size;
00374     CM_USE_COUNT_LOG_ENTRY Log[32];
00375 } CM_USE_COUNT_LOG, *PCM_USE_COUNT_LOG;
00376 
00377 //
00378 // Configuration Manager Hive Structure
00379 //
00380 typedef struct _CMHIVE
00381 {
00382     HHIVE Hive;
00383     HANDLE FileHandles[HFILE_TYPE_MAX];
00384     LIST_ENTRY NotifyList;
00385     LIST_ENTRY HiveList;
00386     EX_PUSH_LOCK HiveLock;
00387     PKTHREAD HiveLockOwner;
00388     PKGUARDED_MUTEX ViewLock;
00389     PKTHREAD ViewLockOwner;
00390     EX_PUSH_LOCK WriterLock;
00391     PKTHREAD WriterLockOwner;
00392     PERESOURCE FlusherLock;
00393     EX_PUSH_LOCK SecurityLock;
00394     PKTHREAD HiveSecurityLockOwner;
00395     LIST_ENTRY LRUViewListHead;
00396     LIST_ENTRY PinViewListHead;
00397     PFILE_OBJECT FileObject;
00398     UNICODE_STRING FileFullPath;
00399     UNICODE_STRING FileUserName;
00400     USHORT MappedViews;
00401     USHORT PinnedViews;
00402     ULONG UseCount;
00403     ULONG SecurityCount;
00404     ULONG SecurityCacheSize;
00405     LONG SecurityHitHint;
00406     PCM_KEY_SECURITY_CACHE_ENTRY SecurityCache;
00407     LIST_ENTRY SecurityHash[CMP_SECURITY_HASH_LISTS];
00408     PKEVENT UnloadEvent;
00409     PCM_KEY_CONTROL_BLOCK RootKcb;
00410     BOOLEAN Frozen;
00411     PWORK_QUEUE_ITEM UnloadWorkItem;
00412     BOOLEAN GrowOnlyMode;
00413     ULONG GrowOffset;
00414     LIST_ENTRY KcbConvertListHead;
00415     LIST_ENTRY KnodeConvertListHead;
00416     PCM_CELL_REMAP_BLOCK CellRemapArray;
00417     CM_USE_COUNT_LOG UseCountLog;
00418     CM_USE_COUNT_LOG LockHiveLog;
00419     ULONG Flags;
00420     LIST_ENTRY TrustClassEntry;
00421     ULONG FlushCount;
00422     BOOLEAN HiveIsLoading;
00423     PKTHREAD CreatorOwner;
00424 } CMHIVE, *PCMHIVE;
00425 
00426 //
00427 // Cached Value Index
00428 //
00429 typedef struct _CM_CACHED_VALUE_INDEX
00430 {
00431     HCELL_INDEX CellIndex;
00432     union
00433     {
00434         CELL_DATA CellData;
00435         ULONG_PTR List[ANYSIZE_ARRAY];
00436     } Data;
00437 } CM_CACHED_VALUE_INDEX, *PCM_CACHED_VALUE_INDEX;
00438 
00439 //
00440 // Cached Value
00441 //
00442 typedef struct _CM_CACHED_VALUE
00443 {
00444     USHORT DataCacheType;
00445     USHORT ValueKeySize;
00446     ULONG HashKey;
00447     CM_KEY_VALUE KeyValue;
00448 } CM_CACHED_VALUE, *PCM_CACHED_VALUE;
00449 
00450 //
00451 // Hive List Entry
00452 //
00453 typedef struct _HIVE_LIST_ENTRY
00454 {
00455     PWSTR Name;
00456     PWSTR BaseName;
00457     PCMHIVE CmHive;
00458     ULONG HHiveFlags;
00459     ULONG CmHiveFlags;
00460     PCMHIVE CmHive2;
00461     BOOLEAN ThreadFinished;
00462     BOOLEAN ThreadStarted;
00463     BOOLEAN Allocate;
00464 } HIVE_LIST_ENTRY, *PHIVE_LIST_ENTRY;
00465 
00466 //
00467 // Parse context for Key Object
00468 //
00469 typedef struct _CM_PARSE_CONTEXT
00470 {
00471     ULONG TitleIndex;
00472     UNICODE_STRING Class;
00473     ULONG CreateOptions;
00474     ULONG Disposition;
00475     CM_KEY_REFERENCE ChildHive;
00476     HANDLE PredefinedHandle;
00477     BOOLEAN CreateLink;
00478     BOOLEAN CreateOperation;
00479     PCMHIVE OriginatingPoint;
00480 } CM_PARSE_CONTEXT, *PCM_PARSE_CONTEXT;
00481 
00482 //
00483 // MultiFunction Adapter Recognizer Structure
00484 //
00485 typedef struct _CMP_MF_TYPE
00486 {
00487     PCHAR Identifier;
00488     USHORT InterfaceType;
00489     USHORT Count;
00490 } CMP_MF_TYPE, *PCMP_MF_TYPE;
00491 
00492 //
00493 // System Control Vector
00494 //
00495 typedef struct _CM_SYSTEM_CONTROL_VECTOR
00496 {
00497     PWCHAR KeyPath;
00498     PWCHAR ValueName;
00499     PVOID Buffer;
00500     PULONG BufferLength;
00501     PULONG Type;
00502 } CM_SYSTEM_CONTROL_VECTOR, *PCM_SYSTEM_CONTROL_VECTOR;
00503 
00504 //
00505 // Structure for CmpQueryValueDataFromCache
00506 //
00507 typedef struct _KEY_VALUE_INFORMATION
00508 {
00509     union
00510     {
00511         KEY_VALUE_BASIC_INFORMATION KeyValueBasicInformation;
00512         KEY_VALUE_FULL_INFORMATION KeyValueFullInformation;
00513         KEY_VALUE_PARTIAL_INFORMATION KeyValuePartialInformation;
00514         KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 KeyValuePartialInformationAlign64;
00515     };
00516 } KEY_VALUE_INFORMATION, *PKEY_VALUE_INFORMATION;
00517 
00518 typedef struct _KEY_INFORMATION
00519 {
00520     union
00521     {
00522         KEY_BASIC_INFORMATION KeyBasicInformation;
00523         KEY_FULL_INFORMATION KeyFullInformation;
00524         KEY_NODE_INFORMATION KeyNodeInformation;
00525     };
00526 } KEY_INFORMATION, *PKEY_INFORMATION;
00527 
00529 //
00530 // BUGBUG Old Hive Stuff for Temporary Support
00531 //
00532 NTSTATUS CmiCallRegisteredCallbacks(IN REG_NOTIFY_CLASS Argument1, IN PVOID Argument2);
00534 
00535 //
00536 // Mapped View Hive Functions
00537 //
00538 VOID
00539 NTAPI
00540 CmpInitHiveViewList(
00541     IN PCMHIVE Hive
00542 );
00543 
00544 //
00545 // Security Cache Functions
00546 //
00547 VOID
00548 NTAPI
00549 CmpInitSecurityCache(
00550     IN PCMHIVE Hive
00551 );
00552 
00553 //
00554 // Value Cache Functions
00555 //
00556 VALUE_SEARCH_RETURN_TYPE
00557 NTAPI
00558 CmpFindValueByNameFromCache(
00559     IN PCM_KEY_CONTROL_BLOCK Kcb,
00560     IN PCUNICODE_STRING Name,
00561     OUT PCM_CACHED_VALUE **CachedValue,
00562     OUT ULONG *Index,
00563     OUT PCM_KEY_VALUE *Value,
00564     OUT BOOLEAN *ValueIsCached,
00565     OUT PHCELL_INDEX CellToRelease
00566 );
00567 
00568 VALUE_SEARCH_RETURN_TYPE
00569 NTAPI
00570 CmpQueryKeyValueData(
00571     IN PCM_KEY_CONTROL_BLOCK Kcb,
00572     IN PCM_CACHED_VALUE *CachedValue,
00573     IN PCM_KEY_VALUE ValueKey,
00574     IN BOOLEAN ValueIsCached,
00575     IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
00576     IN PVOID KeyValueInformation,
00577     IN ULONG Length,
00578     OUT PULONG ResultLength,
00579     OUT PNTSTATUS Status
00580 );
00581 
00582 VALUE_SEARCH_RETURN_TYPE
00583 NTAPI
00584 CmpGetValueListFromCache(
00585     IN PCM_KEY_CONTROL_BLOCK Kcb,
00586     OUT PCELL_DATA *CellData,
00587     OUT BOOLEAN *IndexIsCached,
00588     OUT PHCELL_INDEX ValueListToRelease
00589 );
00590 
00591 VALUE_SEARCH_RETURN_TYPE
00592 NTAPI
00593 CmpGetValueKeyFromCache(
00594     IN PCM_KEY_CONTROL_BLOCK Kcb,
00595     IN PCELL_DATA CellData,
00596     IN ULONG Index,
00597     OUT PCM_CACHED_VALUE **CachedValue,
00598     OUT PCM_KEY_VALUE *Value,
00599     IN BOOLEAN IndexIsCached,
00600     OUT BOOLEAN *ValueIsCached,
00601     OUT PHCELL_INDEX CellToRelease
00602 );
00603 
00604 VALUE_SEARCH_RETURN_TYPE
00605 NTAPI
00606 CmpCompareNewValueDataAgainstKCBCache(
00607     IN PCM_KEY_CONTROL_BLOCK Kcb,
00608     IN PUNICODE_STRING ValueName,
00609     IN ULONG Type,
00610     IN PVOID Data,
00611     IN ULONG DataSize
00612 );
00613 
00614 //
00615 // Registry Validation Functions
00616 //
00617 ULONG
00618 NTAPI
00619 CmCheckRegistry(
00620     IN PCMHIVE Hive,
00621     IN ULONG Flags
00622 );
00623 
00624 //
00625 // Hive List Routines
00626 //
00627 NTSTATUS
00628 NTAPI
00629 CmpAddToHiveFileList(
00630     IN PCMHIVE Hive
00631 );
00632 
00633 //
00634 // Quota Routines
00635 //
00636 VOID
00637 NTAPI
00638 CmpSetGlobalQuotaAllowed(
00639     VOID
00640 );
00641 
00642 //
00643 // Notification Routines
00644 //
00645 VOID
00646 NTAPI
00647 CmpReportNotify(
00648     IN PCM_KEY_CONTROL_BLOCK Kcb,
00649     IN PHHIVE Hive,
00650     IN HCELL_INDEX Cell,
00651     IN ULONG Filter
00652 );
00653 
00654 VOID
00655 NTAPI
00656 CmpFlushNotify(
00657     IN PCM_KEY_BODY KeyBody,
00658     IN BOOLEAN LockHeld
00659 );
00660 
00661 VOID
00662 NTAPI
00663 CmpInitCallback(
00664     VOID
00665 );
00666 
00667 //
00668 // KCB Cache/Delay Routines
00669 //
00670 VOID
00671 NTAPI
00672 CmpInitializeCache(
00673     VOID
00674 );
00675 
00676 VOID
00677 NTAPI
00678 CmpInitCmPrivateDelayAlloc(
00679     VOID
00680 );
00681 
00682 VOID
00683 NTAPI
00684 CmpInitCmPrivateAlloc(
00685     VOID
00686 );
00687 
00688 VOID
00689 NTAPI
00690 CmpInitDelayDerefKCBEngine(
00691     VOID
00692 );
00693 
00694 //
00695 // Key Object Routines
00696 //
00697 VOID
00698 NTAPI
00699 CmpCloseKeyObject(
00700     IN PEPROCESS Process OPTIONAL,
00701     IN PVOID Object,
00702     IN ACCESS_MASK GrantedAccess,
00703     IN ULONG ProcessHandleCount,
00704     IN ULONG SystemHandleCount
00705 );
00706 
00707 VOID
00708 NTAPI
00709 CmpDeleteKeyObject(
00710     IN PVOID Object
00711 );
00712 
00713 NTSTATUS
00714 NTAPI
00715 CmpParseKey(
00716     IN PVOID ParseObject,
00717     IN PVOID ObjectType,
00718     IN OUT PACCESS_STATE AccessState,
00719     IN KPROCESSOR_MODE AccessMode,
00720     IN ULONG Attributes,
00721     IN OUT PUNICODE_STRING CompleteName,
00722     IN OUT PUNICODE_STRING RemainingName,
00723     IN OUT PVOID Context OPTIONAL,
00724     IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL,
00725     OUT PVOID *Object
00726 );
00727 
00728 NTSTATUS
00729 NTAPI
00730 CmpSecurityMethod(
00731     IN PVOID Object,
00732     IN SECURITY_OPERATION_CODE OperationType,
00733     IN PSECURITY_INFORMATION SecurityInformation,
00734     IN PSECURITY_DESCRIPTOR SecurityDescriptor,
00735     IN OUT PULONG CapturedLength,
00736     IN OUT PSECURITY_DESCRIPTOR *ObjectSecurityDescriptor,
00737     IN POOL_TYPE PoolType,
00738     IN PGENERIC_MAPPING GenericMapping
00739 );
00740 
00741 NTSTATUS
00742 NTAPI
00743 CmpQueryKeyName(
00744     IN PVOID Object,
00745     IN BOOLEAN HasObjectName,
00746     OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
00747     IN ULONG Length,
00748     OUT PULONG ReturnLength,
00749     IN KPROCESSOR_MODE AccessMode
00750 );
00751 
00752 //
00753 // Hive Routines
00754 //
00755 NTSTATUS
00756 NTAPI
00757 CmpInitializeHive(
00758     OUT PCMHIVE *CmHive,
00759     IN ULONG Operation,
00760     IN ULONG Flags,
00761     IN ULONG FileType,
00762     IN PVOID HiveData OPTIONAL,
00763     IN HANDLE Primary,
00764     IN HANDLE Log,
00765     IN HANDLE External,
00766     IN PCUNICODE_STRING FileName OPTIONAL,
00767     IN ULONG CheckFlags
00768 );
00769 
00770 PSECURITY_DESCRIPTOR
00771 NTAPI
00772 CmpHiveRootSecurityDescriptor(
00773     VOID
00774 );
00775 
00776 NTSTATUS
00777 NTAPI
00778 CmpLinkHiveToMaster(
00779     IN PUNICODE_STRING LinkName,
00780     IN HANDLE RootDirectory,
00781     IN PCMHIVE CmHive,
00782     IN BOOLEAN Allocate,
00783     IN PSECURITY_DESCRIPTOR SecurityDescriptor
00784 );
00785 
00786 NTSTATUS
00787 NTAPI
00788 CmpOpenHiveFiles(
00789     IN PCUNICODE_STRING BaseName,
00790     IN PCWSTR Extension OPTIONAL,
00791     IN PHANDLE Primary,
00792     IN PHANDLE Log,
00793     IN PULONG PrimaryDisposition,
00794     IN PULONG LogDisposition,
00795     IN BOOLEAN CreateAllowed,
00796     IN BOOLEAN MarkAsSystemHive,
00797     IN BOOLEAN NoBuffering,
00798     OUT PULONG ClusterSize OPTIONAL
00799 );
00800 
00801 NTSTATUS
00802 NTAPI
00803 CmpInitHiveFromFile(
00804     IN PCUNICODE_STRING HiveName,
00805     IN ULONG HiveFlags,
00806     OUT PCMHIVE *Hive,
00807     IN OUT PBOOLEAN New,
00808     IN ULONG CheckFlags
00809 );
00810 
00811 VOID
00812 NTAPI
00813 CmpInitializeHiveList(
00814     IN USHORT Flag
00815 );
00816 
00817 //
00818 // Registry Utility Functions
00819 //
00820 BOOLEAN
00821 NTAPI
00822 CmpTestRegistryLockExclusive(
00823     VOID
00824 );
00825 
00826 BOOLEAN
00827 NTAPI
00828 CmpTestRegistryLock(
00829     VOID
00830 );
00831 
00832 VOID
00833 NTAPI
00834 CmpLockRegistryExclusive(
00835     VOID
00836 );
00837 
00838 VOID
00839 NTAPI
00840 CmpLockRegistry(
00841     VOID
00842 );
00843 
00844 VOID
00845 NTAPI
00846 CmpUnlockRegistry(
00847     VOID
00848 );
00849 
00850 VOID
00851 NTAPI
00852 CmpLockHiveFlusherExclusive(
00853     IN PCMHIVE Hive
00854 );
00855 
00856 VOID
00857 NTAPI
00858 CmpLockHiveFlusherShared(
00859     IN PCMHIVE Hive
00860 );
00861 
00862 BOOLEAN
00863 NTAPI
00864 CmpTestHiveFlusherLockExclusive(
00865     IN PCMHIVE Hive
00866 );
00867 
00868 BOOLEAN
00869 NTAPI
00870 CmpTestHiveFlusherLockShared(
00871     IN PCMHIVE Hive
00872 );
00873 
00874 VOID
00875 NTAPI
00876 CmpUnlockHiveFlusher(
00877     IN PCMHIVE Hive
00878 );
00879 
00880 //
00881 // Delay Functions
00882 //
00883 PVOID
00884 NTAPI
00885 CmpAllocateDelayItem(
00886     VOID
00887 );
00888 
00889 VOID
00890 NTAPI
00891 CmpFreeDelayItem(
00892     PVOID Entry
00893 );
00894 
00895 VOID
00896 NTAPI
00897 CmpDelayDerefKeyControlBlock(
00898     IN PCM_KEY_CONTROL_BLOCK Kcb
00899 );
00900 
00901 VOID
00902 NTAPI
00903 CmpAddToDelayedClose(
00904     IN PCM_KEY_CONTROL_BLOCK Kcb,
00905     IN BOOLEAN LockHeldExclusively
00906 );
00907 
00908 VOID
00909 NTAPI
00910 CmpArmDelayedCloseTimer(
00911     VOID
00912 );
00913 
00914 VOID
00915 NTAPI
00916 CmpRemoveFromDelayedClose(IN PCM_KEY_CONTROL_BLOCK Kcb);
00917 
00918 VOID
00919 NTAPI
00920 CmpInitializeDelayedCloseTable(
00921     VOID
00922 );
00923 
00924 //
00925 // KCB Functions
00926 //
00927 PCM_KEY_CONTROL_BLOCK
00928 NTAPI
00929 CmpCreateKeyControlBlock(
00930     IN PHHIVE Hive,
00931     IN HCELL_INDEX Index,
00932     IN PCM_KEY_NODE Node,
00933     IN PCM_KEY_CONTROL_BLOCK Parent,
00934     IN ULONG Flags,
00935     IN PUNICODE_STRING KeyName
00936 );
00937 
00938 PCM_KEY_CONTROL_BLOCK
00939 NTAPI
00940 CmpAllocateKeyControlBlock(
00941     VOID
00942 );
00943 
00944 VOID
00945 NTAPI
00946 CmpFreeKeyControlBlock(
00947     IN PCM_KEY_CONTROL_BLOCK Kcb
00948 );
00949 
00950 VOID
00951 NTAPI
00952 CmpRemoveKeyControlBlock(
00953     IN PCM_KEY_CONTROL_BLOCK Kcb
00954 );
00955 
00956 VOID
00957 NTAPI
00958 CmpCleanUpKcbValueCache(
00959     IN PCM_KEY_CONTROL_BLOCK Kcb
00960 );
00961 
00962 VOID
00963 NTAPI
00964 CmpCleanUpKcbCacheWithLock(
00965     IN PCM_KEY_CONTROL_BLOCK Kcb,
00966     IN BOOLEAN LockHeldExclusively
00967 );
00968 
00969 VOID
00970 NTAPI
00971 CmpCleanUpSubKeyInfo(
00972     IN PCM_KEY_CONTROL_BLOCK Kcb
00973 );
00974 
00975 PUNICODE_STRING
00976 NTAPI
00977 CmpConstructName(
00978     IN PCM_KEY_CONTROL_BLOCK Kcb
00979 );
00980 
00981 BOOLEAN
00982 NTAPI
00983 CmpReferenceKeyControlBlock(
00984     IN PCM_KEY_CONTROL_BLOCK Kcb
00985 );
00986 
00987 VOID
00988 NTAPI
00989 CmpDereferenceKeyControlBlockWithLock(
00990     IN PCM_KEY_CONTROL_BLOCK Kcb,
00991     IN BOOLEAN LockHeldExclusively
00992 );
00993 
00994 VOID
00995 NTAPI
00996 CmpDereferenceKeyControlBlock(
00997     IN PCM_KEY_CONTROL_BLOCK Kcb
00998 );
00999 
01000 VOID
01001 NTAPI
01002 EnlistKeyBodyWithKCB(
01003     IN PCM_KEY_BODY KeyObject,
01004     IN ULONG Flags
01005 );
01006 
01007 VOID
01008 NTAPI
01009 DelistKeyBodyFromKCB(
01010     IN PCM_KEY_BODY KeyBody,
01011     IN BOOLEAN LockHeld
01012 );
01013 
01014 NTSTATUS
01015 NTAPI
01016 CmpFreeKeyByCell(
01017     IN PHHIVE Hive,
01018     IN HCELL_INDEX Cell,
01019     IN BOOLEAN Unlink
01020 );
01021 
01022 VOID
01023 NTAPI
01024 CmpAcquireTwoKcbLocksExclusiveByKey(
01025     IN ULONG ConvKey1,
01026     IN ULONG ConvKey2
01027 );
01028 
01029 VOID
01030 NTAPI
01031 CmpReleaseTwoKcbLockByKey(
01032     IN ULONG ConvKey1,
01033     IN ULONG ConvKey2
01034 );
01035 
01036 VOID
01037 NTAPI
01038 CmpFlushNotifiesOnKeyBodyList(
01039     IN PCM_KEY_CONTROL_BLOCK Kcb,
01040     IN BOOLEAN LockHeld
01041 );
01042 
01043 //
01044 // Name Functions
01045 //
01046 LONG
01047 NTAPI
01048 CmpCompareCompressedName(
01049     IN PCUNICODE_STRING SearchName,
01050     IN PWCHAR CompressedName,
01051     IN ULONG NameLength
01052 );
01053 
01054 USHORT
01055 NTAPI
01056 CmpNameSize(
01057     IN PHHIVE Hive,
01058     IN PUNICODE_STRING Name
01059 );
01060 
01061 USHORT
01062 NTAPI
01063 CmpCompressedNameSize(
01064     IN PWCHAR Name,
01065     IN ULONG Length
01066 );
01067 
01068 VOID
01069 NTAPI
01070 CmpCopyCompressedName(
01071     IN PWCHAR Destination,
01072     IN ULONG DestinationLength,
01073     IN PWCHAR Source,
01074     IN ULONG SourceLength
01075 );
01076 
01077 USHORT
01078 NTAPI
01079 CmpCopyName(
01080     IN PHHIVE Hive,
01081     IN PWCHAR Destination,
01082     IN PUNICODE_STRING Source
01083 );
01084 
01085 BOOLEAN
01086 NTAPI
01087 CmpFindNameInList(
01088     IN PHHIVE Hive,
01089     IN PCHILD_LIST ChildList,
01090     IN PUNICODE_STRING Name,
01091     IN PULONG ChildIndex,
01092     IN PHCELL_INDEX CellIndex
01093 );
01094 
01095 //
01096 // Parse Routines
01097 //
01098 BOOLEAN
01099 NTAPI
01100 CmpGetNextName(
01101     IN OUT PUNICODE_STRING RemainingName,
01102     OUT PUNICODE_STRING NextName,
01103     OUT PBOOLEAN LastName
01104 );
01105 
01106 //
01107 // Command Routines (Flush, Open, Close, Init);
01108 //
01109 BOOLEAN
01110 NTAPI
01111 CmpDoFlushAll(
01112     IN BOOLEAN ForceFlush
01113 );
01114 
01115 VOID
01116 NTAPI
01117 CmpShutdownWorkers(
01118     VOID
01119 );
01120 
01121 VOID
01122 NTAPI
01123 CmpCmdInit(
01124     IN BOOLEAN SetupBoot
01125 );
01126 
01127 NTSTATUS
01128 NTAPI
01129 CmpCmdHiveOpen(
01130     IN POBJECT_ATTRIBUTES FileAttributes,
01131     IN PSECURITY_CLIENT_CONTEXT ImpersonationContext,
01132     IN OUT PBOOLEAN Allocate,
01133     OUT PCMHIVE *NewHive,
01134     IN ULONG CheckFlags
01135 );
01136 
01137 VOID
01138 NTAPI
01139 CmpLazyFlush(
01140     VOID
01141 );
01142 
01143 //
01144 // Open/Create Routines
01145 //
01146 NTSTATUS
01147 NTAPI
01148 CmpDoCreate(
01149     IN PHHIVE Hive,
01150     IN HCELL_INDEX Cell,
01151     IN PACCESS_STATE AccessState,
01152     IN PUNICODE_STRING Name,
01153     IN KPROCESSOR_MODE AccessMode,
01154     IN PCM_PARSE_CONTEXT Context,
01155     IN PCM_KEY_CONTROL_BLOCK ParentKcb,
01156     OUT PVOID *Object
01157 );
01158 
01159 NTSTATUS
01160 NTAPI
01161 CmpCreateLinkNode(
01162     IN PHHIVE Hive,
01163     IN HCELL_INDEX Cell,
01164     IN PACCESS_STATE AccessState,
01165     IN UNICODE_STRING Name,
01166     IN KPROCESSOR_MODE AccessMode,
01167     IN ULONG CreateOptions,
01168     IN PCM_PARSE_CONTEXT Context,
01169     IN PCM_KEY_CONTROL_BLOCK ParentKcb,
01170     OUT PVOID *Object
01171 );
01172 
01173 //
01174 // Cell Index Routines
01175 //
01176 
01177 HCELL_INDEX
01178 NTAPI
01179 CmpFindSubKeyByName(
01180     IN PHHIVE Hive,
01181     IN PCM_KEY_NODE Parent,
01182     IN PCUNICODE_STRING SearchName
01183 );
01184 
01185 HCELL_INDEX
01186 NTAPI
01187 CmpFindSubKeyByNumber(
01188     IN PHHIVE Hive,
01189     IN PCM_KEY_NODE Node,
01190     IN ULONG Number
01191 );
01192 
01193 ULONG
01194 NTAPI
01195 CmpComputeHashKey(
01196     IN ULONG Hash,
01197     IN PCUNICODE_STRING Name,
01198     IN BOOLEAN AllowSeparators
01199 );
01200 
01201 BOOLEAN
01202 NTAPI
01203 CmpAddSubKey(
01204     IN PHHIVE Hive,
01205     IN HCELL_INDEX Parent,
01206     IN HCELL_INDEX Child
01207 );
01208 
01209 BOOLEAN
01210 NTAPI
01211 CmpRemoveSubKey(
01212     IN PHHIVE Hive,
01213     IN HCELL_INDEX ParentKey,
01214     IN HCELL_INDEX TargetKey
01215 );
01216 
01217 BOOLEAN
01218 NTAPI
01219 CmpMarkIndexDirty(
01220     IN PHHIVE Hive,
01221     HCELL_INDEX ParentKey,
01222     HCELL_INDEX TargetKey
01223 );
01224 
01225 //
01226 // Cell Value Routines
01227 //
01228 HCELL_INDEX
01229 NTAPI
01230 CmpFindValueByName(
01231     IN PHHIVE Hive,
01232     IN PCM_KEY_NODE KeyNode,
01233     IN PUNICODE_STRING Name
01234 );
01235 
01236 PCELL_DATA
01237 NTAPI
01238 CmpValueToData(
01239     IN PHHIVE Hive,
01240     IN PCM_KEY_VALUE Value,
01241     OUT PULONG Length
01242 );
01243 
01244 NTSTATUS
01245 NTAPI
01246 CmpSetValueDataNew(
01247     IN PHHIVE Hive,
01248     IN PVOID Data,
01249     IN ULONG DataSize,
01250     IN ULONG StorageType,
01251     IN HCELL_INDEX ValueCell,
01252     OUT PHCELL_INDEX DataCell
01253 );
01254 
01255 NTSTATUS
01256 NTAPI
01257 CmpAddValueToList(
01258     IN PHHIVE Hive,
01259     IN HCELL_INDEX ValueCell,
01260     IN ULONG Index,
01261     IN ULONG Type,
01262     IN OUT PCHILD_LIST ChildList
01263 );
01264 
01265 BOOLEAN
01266 NTAPI
01267 CmpFreeValue(
01268     IN PHHIVE Hive,
01269     IN HCELL_INDEX Cell
01270 );
01271 
01272 BOOLEAN
01273 NTAPI
01274 CmpMarkValueDataDirty(
01275     IN PHHIVE Hive,
01276     IN PCM_KEY_VALUE Value
01277 );
01278 
01279 BOOLEAN
01280 NTAPI
01281 CmpFreeValueData(
01282     IN PHHIVE Hive,
01283     IN HCELL_INDEX DataCell,
01284     IN ULONG DataLength
01285 );
01286 
01287 NTSTATUS
01288 NTAPI
01289 CmpRemoveValueFromList(
01290     IN PHHIVE Hive,
01291     IN ULONG Index,
01292     IN OUT PCHILD_LIST ChildList
01293 );
01294 
01295 BOOLEAN
01296 NTAPI
01297 CmpGetValueData(
01298     IN PHHIVE Hive,
01299     IN PCM_KEY_VALUE Value,
01300     IN PULONG Length,
01301     OUT PVOID *Buffer,
01302     OUT PBOOLEAN BufferAllocated,
01303     OUT PHCELL_INDEX CellToRelease
01304 );
01305 
01306 //
01307 // Boot Routines
01308 //
01309 HCELL_INDEX
01310 NTAPI
01311 CmpFindControlSet(
01312     IN PHHIVE SystemHive,
01313     IN HCELL_INDEX RootCell,
01314     IN PUNICODE_STRING SelectKeyName,
01315     OUT PBOOLEAN AutoSelect
01316 );
01317 
01318 VOID
01319 NTAPI
01320 CmGetSystemControlValues(
01321     IN PVOID SystemHiveData,
01322     IN PCM_SYSTEM_CONTROL_VECTOR ControlVector
01323 );
01324 
01325 
01326 //
01327 // Hardware Configuration Routines
01328 //
01329 NTSTATUS
01330 NTAPI
01331 CmpInitializeRegistryNode(
01332     IN PCONFIGURATION_COMPONENT_DATA CurrentEntry,
01333     IN HANDLE NodeHandle,
01334     OUT PHANDLE NewHandle,
01335     IN INTERFACE_TYPE InterfaceType,
01336     IN ULONG BusNumber,
01337     IN PUSHORT DeviceIndexTable
01338 );
01339 
01340 NTSTATUS
01341 NTAPI
01342 CmpInitializeMachineDependentConfiguration(
01343     IN PLOADER_PARAMETER_BLOCK LoaderBlock
01344 );
01345 
01346 NTSTATUS
01347 NTAPI
01348 CmpInitializeHardwareConfiguration(
01349     IN PLOADER_PARAMETER_BLOCK LoaderBlock
01350 );
01351 
01352 //
01353 // Wrapper Routines
01354 //
01355 NTSTATUS
01356 NTAPI
01357 CmpCreateEvent(
01358     IN EVENT_TYPE EventType,
01359     OUT PHANDLE EventHandle,
01360     OUT PKEVENT *Event
01361 );
01362 
01363 PVOID
01364 NTAPI
01365 CmpAllocate(
01366     IN SIZE_T Size,
01367     IN BOOLEAN Paged,
01368     IN ULONG Tag
01369 );
01370 
01371 VOID
01372 NTAPI
01373 CmpFree(
01374     IN PVOID Ptr,
01375     IN ULONG Quota
01376 );
01377 
01378 BOOLEAN
01379 NTAPI
01380 CmpFileRead(
01381     IN PHHIVE RegistryHive,
01382     IN ULONG FileType,
01383     IN OUT PULONG FileOffset,
01384     OUT PVOID Buffer,
01385     IN SIZE_T BufferLength
01386 );
01387 
01388 BOOLEAN
01389 NTAPI
01390 CmpFileWrite(
01391     IN PHHIVE RegistryHive,
01392     IN ULONG FileType,
01393     IN OUT PULONG FileOffset,
01394     IN PVOID Buffer,
01395     IN SIZE_T BufferLength
01396 );
01397 
01398 BOOLEAN
01399 NTAPI
01400 CmpFileSetSize(
01401     IN PHHIVE RegistryHive,
01402     IN ULONG FileType,
01403     IN ULONG FileSize,
01404     IN ULONG OldFileSize
01405 );
01406 
01407 BOOLEAN
01408 NTAPI
01409 CmpFileFlush(
01410    IN PHHIVE RegistryHive,
01411    IN ULONG FileType,
01412    IN OUT PLARGE_INTEGER FileOffset,
01413    IN ULONG Length
01414 );
01415 
01416 //
01417 // Configuration Manager side of Registry System Calls
01418 //
01419 NTSTATUS
01420 NTAPI
01421 CmEnumerateValueKey(
01422     IN PCM_KEY_CONTROL_BLOCK Kcb,
01423     IN ULONG Index,
01424     IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
01425     IN PVOID KeyValueInformation,
01426     IN ULONG Length,
01427     IN PULONG ResultLength);
01428 
01429 NTSTATUS
01430 NTAPI
01431 CmSetValueKey(
01432     IN PCM_KEY_CONTROL_BLOCK Kcb,
01433     IN PUNICODE_STRING ValueName,
01434     IN ULONG Type,
01435     IN PVOID Data,
01436     IN ULONG DataSize);
01437 
01438 NTSTATUS
01439 NTAPI
01440 CmQueryKey(IN PCM_KEY_CONTROL_BLOCK Kcb,
01441     IN KEY_INFORMATION_CLASS KeyInformationClass,
01442     IN PVOID KeyInformation,
01443     IN ULONG Length,
01444     IN PULONG ResultLength
01445 );
01446 
01447 NTSTATUS
01448 NTAPI
01449 CmEnumerateKey(IN PCM_KEY_CONTROL_BLOCK Kcb,
01450     IN ULONG Index,
01451     IN KEY_INFORMATION_CLASS KeyInformationClass,
01452     IN PVOID KeyInformation,
01453     IN ULONG Length,
01454     IN PULONG ResultLength
01455 );
01456 
01457 NTSTATUS
01458 NTAPI
01459 CmDeleteKey(
01460     IN PCM_KEY_BODY KeyBody
01461 );
01462 
01463 NTSTATUS
01464 NTAPI
01465 CmFlushKey(
01466     IN PCM_KEY_CONTROL_BLOCK Kcb,
01467     IN BOOLEAN EclusiveLock
01468 );
01469 
01470 NTSTATUS
01471 NTAPI
01472 CmDeleteValueKey(
01473     IN PCM_KEY_CONTROL_BLOCK Kcb,
01474     IN UNICODE_STRING ValueName
01475 );
01476 
01477 NTSTATUS
01478 NTAPI
01479 CmQueryValueKey(
01480     IN PCM_KEY_CONTROL_BLOCK Kcb,
01481     IN UNICODE_STRING ValueName,
01482     IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
01483     IN PVOID KeyValueInformation,
01484     IN ULONG Length,
01485     IN PULONG ResultLength
01486 );
01487 
01488 NTSTATUS
01489 NTAPI
01490 CmLoadKey(
01491     IN POBJECT_ATTRIBUTES TargetKey,
01492     IN POBJECT_ATTRIBUTES SourceFile,
01493     IN ULONG Flags,
01494     IN PCM_KEY_BODY KeyBody
01495 );
01496 
01497 NTSTATUS
01498 NTAPI
01499 CmUnloadKey(
01500     IN PCM_KEY_CONTROL_BLOCK Kcb,
01501     IN ULONG Flags
01502 );
01503 
01504 ULONG
01505 NTAPI
01506 CmCountOpenSubKeys(
01507     IN PCM_KEY_CONTROL_BLOCK RootKcb,
01508     IN BOOLEAN RemoveEmptyCacheEntries
01509 );
01510 
01511 //
01512 // Startup and Shutdown
01513 //
01514 BOOLEAN
01515 NTAPI
01516 CmInitSystem1(
01517     VOID
01518 );
01519 
01520 VOID
01521 NTAPI
01522 CmShutdownSystem(
01523     VOID
01524 );
01525 
01526 VOID
01527 NTAPI
01528 CmSetLazyFlushState(
01529     IN BOOLEAN Enable
01530 );
01531 
01532 VOID
01533 NTAPI
01534 CmpSetVersionData(
01535     VOID
01536 );
01537 
01538 //
01539 // Driver List Routines
01540 //
01541 PUNICODE_STRING*
01542 NTAPI
01543 CmGetSystemDriverList(
01544     VOID
01545 );
01546 
01547 BOOLEAN
01548 NTAPI
01549 CmpFindDrivers(
01550     IN PHHIVE Hive,
01551     IN HCELL_INDEX ControlSet,
01552     IN SERVICE_LOAD_TYPE LoadType,
01553     IN PWSTR BootFileSystem OPTIONAL,
01554     IN PLIST_ENTRY DriverListHead
01555 );
01556 
01557 
01558 BOOLEAN
01559 NTAPI
01560 CmpSortDriverList(
01561     IN PHHIVE Hive,
01562     IN HCELL_INDEX ControlSet,
01563     IN PLIST_ENTRY DriverListHead
01564 );
01565 
01566 BOOLEAN
01567 NTAPI
01568 CmpResolveDriverDependencies(
01569     IN PLIST_ENTRY DriverListHead
01570 );
01571 
01572 BOOLEAN
01573 NTAPI
01574 CmpIsSafe(
01575     IN PHHIVE Hive,
01576     IN HCELL_INDEX SafeBootCell,
01577     IN HCELL_INDEX DriverCell);
01578 
01579 //
01580 // Global variables accessible from all of Cm
01581 //
01582 extern ULONG CmpTraceLevel;
01583 extern BOOLEAN CmpSpecialBootCondition;
01584 extern BOOLEAN CmpFlushOnLockRelease;
01585 extern BOOLEAN CmpShareSystemHives;
01586 extern BOOLEAN CmpMiniNTBoot;
01587 extern EX_PUSH_LOCK CmpHiveListHeadLock, CmpLoadHiveLock;
01588 extern LIST_ENTRY CmpHiveListHead;
01589 extern POBJECT_TYPE CmpKeyObjectType;
01590 extern ERESOURCE CmpRegistryLock;
01591 extern PCM_KEY_HASH_TABLE_ENTRY CmpCacheTable;
01592 extern PCM_NAME_HASH_TABLE_ENTRY CmpNameCacheTable;
01593 extern KGUARDED_MUTEX CmpDelayedCloseTableLock;
01594 extern CMHIVE CmControlHive;
01595 extern WCHAR CmDefaultLanguageId[];
01596 extern ULONG CmDefaultLanguageIdLength;
01597 extern ULONG CmDefaultLanguageIdType;
01598 extern WCHAR CmInstallUILanguageId[];
01599 extern ULONG CmInstallUILanguageIdLength;
01600 extern ULONG CmInstallUILanguageIdType;
01601 extern ULONG CmNtGlobalFlag;
01602 extern LANGID PsInstallUILanguageId;
01603 extern LANGID PsDefaultUILanguageId;
01604 extern CM_SYSTEM_CONTROL_VECTOR CmControlVector[];
01605 extern ULONG CmpConfigurationAreaSize;
01606 extern PCM_FULL_RESOURCE_DESCRIPTOR CmpConfigurationData;
01607 extern UNICODE_STRING CmTypeName[];
01608 extern UNICODE_STRING CmClassName[];
01609 extern CMP_MF_TYPE CmpMultifunctionTypes[];
01610 extern USHORT CmpUnknownBusCount;
01611 extern ULONG CmpTypeCount[MaximumType + 1];
01612 extern HIVE_LIST_ENTRY CmpMachineHiveList[];
01613 extern UNICODE_STRING CmSymbolicLinkValueName;
01614 extern UNICODE_STRING CmpSystemStartOptions;
01615 extern UNICODE_STRING CmpLoadOptions;
01616 extern BOOLEAN CmSelfHeal;
01617 extern BOOLEAN CmpSelfHeal;
01618 extern ULONG CmpBootType;
01619 extern HANDLE CmpRegistryRootHandle;
01620 extern BOOLEAN ExpInTextModeSetup;
01621 extern BOOLEAN InitIsWinPEMode;
01622 extern ULONG CmpHashTableSize;
01623 extern ULONG CmpDelayedCloseSize, CmpDelayedCloseIndex;
01624 extern BOOLEAN CmpNoWrite;
01625 extern BOOLEAN CmpForceForceFlush;
01626 extern BOOLEAN CmpWasSetupBoot;
01627 extern BOOLEAN CmpProfileLoaded;
01628 extern PCMHIVE CmiVolatileHive;
01629 extern LIST_ENTRY CmiKeyObjectListHead;
01630 extern BOOLEAN CmpHoldLazyFlush;
01631 
01632 //
01633 // Inlined functions
01634 //
01635 #include "cm_x.h"

Generated on Wed May 23 2012 04:35:06 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.