//
// CM_KEY_CONTROL_BLOCK Signatures
//
-#define CM_KCB_SIGNATURE TAG('C', 'm', 'K', 'b')
-#define CM_KCB_INVALID_SIGNATURE TAG('C', 'm', 'F', '4')
+#define CM_KCB_SIGNATURE 'bKmC'
+#define CM_KCB_INVALID_SIGNATURE '4FmC'
//
// CM_KEY_CONTROL_BLOCK Flags
#define CMP_CREATE_FAKE_KCB 0x1
#define CMP_LOCK_HASHES_FOR_KCB 0x2
+//
+// CmpDoCreate and CmpDoOpen flags
+//
+#define CMP_CREATE_KCB_KCB_LOCKED 0x2
+#define CMP_OPEN_KCB_NO_CREATE 0x4
+
//
// EnlistKeyBodyWithKCB Flags
//
#define CMP_ENLIST_KCB_LOCKED_SHARED 0x1
#define CMP_ENLIST_KCB_LOCKED_EXCLUSIVE 0x2
+//
+// Unload Flags
+//
+#define CMP_UNLOCK_KCB_LOCKED 0x1
+#define CMP_UNLOCK_REGISTRY_LOCKED 0x2
+
//
// Maximum size of Value Cache
//
//
typedef struct _CMP_MF_TYPE
{
- PWCHAR Identifier;
+ PCHAR Identifier;
USHORT InterfaceType;
- USHORT Count;
+ USHORT Count;
} CMP_MF_TYPE, *PCMP_MF_TYPE;
//
IN ULONG Flags
);
+//
+// Hive List Routines
+//
+NTSTATUS
+NTAPI
+CmpAddToHiveFileList(
+ IN PCMHIVE Hive
+);
+
+//
+// Quota Routines
+//
+VOID
+NTAPI
+CmpSetGlobalQuotaAllowed(
+ VOID
+);
+
//
// Notification Routines
//
IN ULONG Filter
);
+VOID
+NTAPI
+CmpFlushNotify(
+ IN PCM_KEY_BODY KeyBody,
+ IN BOOLEAN LockHeld
+);
+
VOID
NTAPI
CmpInitCallback(
VOID
);
+VOID
+NTAPI
+CmpLockHiveFlusherExclusive(
+ IN PCMHIVE Hive
+);
+
+VOID
+NTAPI
+CmpLockHiveFlusherShared(
+ IN PCMHIVE Hive
+);
+
+BOOLEAN
+NTAPI
+CmpTestHiveFlusherLockExclusive(
+ IN PCMHIVE Hive
+);
+
+BOOLEAN
+NTAPI
+CmpTestHiveFlusherLockShared(
+ IN PCMHIVE Hive
+);
+
+VOID
+NTAPI
+CmpUnlockHiveFlusher(
+ IN PCMHIVE Hive
+);
+
//
// Delay Functions
//
IN BOOLEAN LockHeldExclusively
);
+VOID
+NTAPI
+CmpArmDelayedCloseTimer(
+ VOID
+);
+
VOID
NTAPI
CmpRemoveFromDelayedClose(IN PCM_KEY_CONTROL_BLOCK Kcb);
IN PCM_KEY_CONTROL_BLOCK Kcb
);
+PUNICODE_STRING
+NTAPI
+CmpConstructName(
+ IN PCM_KEY_CONTROL_BLOCK Kcb
+);
+
+BOOLEAN
+NTAPI
+CmpReferenceKeyControlBlock(
+ IN PCM_KEY_CONTROL_BLOCK Kcb
+);
+
VOID
NTAPI
CmpDereferenceKeyControlBlockWithLock(
IN ULONG ConvKey2
);
+VOID
+NTAPI
+CmpFlushNotifiesOnKeyBodyList(
+ IN PCM_KEY_CONTROL_BLOCK Kcb,
+ IN BOOLEAN LockHeld
+);
+
//
// Name Functions
//
PVOID
NTAPI
CmpAllocate(
- IN ULONG Size,
+ IN SIZE_T Size,
IN BOOLEAN Paged,
IN ULONG Tag
);
IN PCM_KEY_BODY KeyBody
);
+NTSTATUS
+NTAPI
+CmUnloadKey(
+ IN PCM_KEY_CONTROL_BLOCK Kcb,
+ IN ULONG Flags
+);
+
+ULONG
+NTAPI
+CmCountOpenSubKeys(
+ IN PCM_KEY_CONTROL_BLOCK RootKcb,
+ IN BOOLEAN RemoveEmptyCacheEntries
+);
+
//
// Startup and Shutdown
//
+BOOLEAN
+NTAPI
+CmInitSystem1(
+ VOID
+);
+
VOID
NTAPI
CmShutdownSystem(
VOID
);
+VOID
+NTAPI
+CmSetLazyFlushState(
+ IN BOOLEAN Enable
+);
+
+//
+// Driver List Routines
+//
+PUNICODE_STRING*
+NTAPI
+CmGetSystemDriverList(
+ VOID
+);
+
+BOOLEAN
+NTAPI
+CmpFindDrivers(
+ IN PHHIVE Hive,
+ IN HCELL_INDEX ControlSet,
+ IN SERVICE_LOAD_TYPE LoadType,
+ IN PWSTR BootFileSystem OPTIONAL,
+ IN PLIST_ENTRY DriverListHead
+);
+
+
+BOOLEAN
+NTAPI
+CmpSortDriverList(
+ IN PHHIVE Hive,
+ IN HCELL_INDEX ControlSet,
+ IN PLIST_ENTRY DriverListHead
+);
+
+BOOLEAN
+NTAPI
+CmpResolveDriverDependencies(
+ IN PLIST_ENTRY DriverListHead
+);
+
//
// Global variables accessible from all of Cm
//
+extern ULONG CmpTraceLevel;
extern BOOLEAN CmpSpecialBootCondition;
extern BOOLEAN CmpFlushOnLockRelease;
extern BOOLEAN CmpShareSystemHives;
extern BOOLEAN CmpNoWrite;
extern BOOLEAN CmpForceForceFlush;
extern BOOLEAN CmpWasSetupBoot;
+extern BOOLEAN CmpProfileLoaded;
extern PCMHIVE CmiVolatileHive;
extern LIST_ENTRY CmiKeyObjectListHead;
extern BOOLEAN CmpHoldLazyFlush;