Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygencm.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
1.7.6.1
|