Fix NtQueryOpenSubKeys prototype.
[reactos.git] / reactos / include / ndk / cmfuncs.h
index b149894..b9cd568 100644 (file)
-/*++ NDK Version: 0095\r
-\r
-Copyright (c) Alex Ionescu.  All rights reserved.\r
-\r
-Header Name:\r
-\r
-    cmfuncs.h\r
-\r
-Abstract:\r
-\r
-    Function definitions for the Configuration Manager.\r
-\r
-Author:\r
-\r
-    Alex Ionescu (alex.ionescu@reactos.com)   06-Oct-2004\r
-\r
---*/\r
-\r
-#ifndef _CMFUNCS_H\r
-#define _CMFUNCS_H\r
-\r
-//\r
-// Dependencies\r
-//\r
-#include <umtypes.h>\r
-\r
-//\r
-// Native calls\r
-//\r
-NTSTATUS\r
-NTAPI\r
-NtCreateKey(\r
-    OUT PHANDLE KeyHandle,\r
-    IN ACCESS_MASK DesiredAccess,\r
-    IN POBJECT_ATTRIBUTES ObjectAttributes,\r
-    IN ULONG TitleIndex,\r
-    IN PUNICODE_STRING Class OPTIONAL,\r
-    IN ULONG CreateOptions,\r
-    IN PULONG Disposition OPTIONAL\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtDeleteKey(\r
-    IN HANDLE KeyHandle\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtDeleteValueKey(\r
-    IN HANDLE KeyHandle,\r
-    IN PUNICODE_STRING ValueName\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtEnumerateKey(\r
-    IN HANDLE KeyHandle,\r
-    IN ULONG Index,\r
-    IN KEY_INFORMATION_CLASS KeyInformationClass,\r
-    OUT PVOID KeyInformation,\r
-    IN ULONG Length,\r
-    OUT PULONG ResultLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtEnumerateValueKey(\r
-    IN HANDLE KeyHandle,\r
-    IN ULONG Index,\r
-    IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,\r
-    OUT PVOID KeyValueInformation,\r
-    IN ULONG Length,\r
-    OUT PULONG ResultLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtFlushKey(\r
-    IN HANDLE KeyHandle\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtGetPlugPlayEvent(\r
-    IN ULONG Reserved1,\r
-    IN ULONG Reserved2,\r
-    OUT PPLUGPLAY_EVENT_BLOCK Buffer,\r
-    IN ULONG BufferSize\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtInitializeRegistry(\r
-    BOOLEAN SetUpBoot\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtLoadKey(\r
-    IN POBJECT_ATTRIBUTES KeyObjectAttributes,\r
-    IN POBJECT_ATTRIBUTES FileObjectAttributes\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtLoadKey2(\r
-    IN POBJECT_ATTRIBUTES KeyObjectAttributes,\r
-    IN POBJECT_ATTRIBUTES FileObjectAttributes,\r
-    IN ULONG Flags\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtNotifyChangeKey(\r
-    IN HANDLE KeyHandle,\r
-    IN HANDLE Event,\r
-    IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,\r
-    IN PVOID ApcContext OPTIONAL,\r
-    OUT PIO_STATUS_BLOCK IoStatusBlock,\r
-    IN ULONG CompletionFilter,\r
-    IN BOOLEAN Asynchroneous,\r
-    OUT PVOID ChangeBuffer,\r
-    IN ULONG Length,\r
-    IN BOOLEAN WatchSubtree\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtOpenKey(\r
-    OUT PHANDLE KeyHandle,\r
-    IN ACCESS_MASK DesiredAccess,\r
-    IN POBJECT_ATTRIBUTES ObjectAttributes\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtPlugPlayControl(\r
-    IN PLUGPLAY_CONTROL_CLASS PlugPlayControlClass,\r
-    IN OUT PVOID Buffer,\r
-    IN ULONG BufferSize\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtQueryKey(\r
-    IN HANDLE KeyHandle,\r
-    IN KEY_INFORMATION_CLASS KeyInformationClass,\r
-    OUT PVOID KeyInformation,\r
-    IN ULONG Length,\r
-    OUT PULONG ResultLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtQueryMultipleValueKey(\r
-    IN HANDLE KeyHandle,\r
-    IN OUT PKEY_VALUE_ENTRY ValueList,\r
-    IN ULONG NumberOfValues,\r
-    OUT PVOID Buffer,\r
-    IN OUT PULONG Length,\r
-    OUT PULONG ReturnLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtQueryValueKey(\r
-    IN HANDLE KeyHandle,\r
-    IN PUNICODE_STRING ValueName,\r
-    IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,\r
-    OUT PVOID KeyValueInformation,\r
-    IN ULONG Length,\r
-    OUT PULONG ResultLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtReplaceKey(\r
-    IN POBJECT_ATTRIBUTES ObjectAttributes,\r
-    IN HANDLE Key,\r
-    IN POBJECT_ATTRIBUTES ReplacedObjectAttributes\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtRestoreKey(\r
-    IN HANDLE KeyHandle,\r
-    IN HANDLE FileHandle,\r
-    IN ULONG RestoreFlags\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtSaveKey(\r
-    IN HANDLE KeyHandle,\r
-    IN HANDLE FileHandle\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtSaveKeyEx(\r
-    IN HANDLE KeyHandle,\r
-    IN HANDLE FileHandle,\r
-    IN ULONG Flags\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtSetInformationKey(\r
-    IN HANDLE KeyHandle,\r
-    IN KEY_SET_INFORMATION_CLASS KeyInformationClass,\r
-    IN PVOID KeyInformation,\r
-    IN ULONG KeyInformationLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtSetValueKey(\r
-    IN HANDLE KeyHandle,\r
-    IN PUNICODE_STRING ValueName,\r
-    IN ULONG TitleIndex OPTIONAL,\r
-    IN ULONG Type,\r
-    IN PVOID Data,\r
-    IN ULONG DataSize\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-NtUnloadKey(\r
-    IN POBJECT_ATTRIBUTES KeyObjectAttributes\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwCreateKey(\r
-    OUT PHANDLE KeyHandle,\r
-    IN ACCESS_MASK DesiredAccess,\r
-    IN POBJECT_ATTRIBUTES ObjectAttributes,\r
-    IN ULONG TitleIndex,\r
-    IN PUNICODE_STRING Class OPTIONAL,\r
-    IN ULONG CreateOptions,\r
-    IN PULONG Disposition OPTIONAL\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwDeleteKey(\r
-    IN HANDLE KeyHandle\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwDeleteValueKey(\r
-    IN HANDLE KeyHandle,\r
-    IN PUNICODE_STRING ValueName\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwEnumerateKey(\r
-    IN HANDLE KeyHandle,\r
-    IN ULONG Index,\r
-    IN KEY_INFORMATION_CLASS KeyInformationClass,\r
-    OUT PVOID KeyInformation,\r
-    IN ULONG Length,\r
-    OUT PULONG ResultLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwEnumerateValueKey(\r
-    IN HANDLE KeyHandle,\r
-    IN ULONG Index,\r
-    IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,\r
-    OUT PVOID KeyValueInformation,\r
-    IN ULONG Length,\r
-    OUT PULONG ResultLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwFlushKey(\r
-    IN HANDLE KeyHandle\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwGetPlugPlayEvent(\r
-    IN ULONG Reserved1,\r
-    IN ULONG Reserved2,\r
-    OUT PPLUGPLAY_EVENT_BLOCK Buffer,\r
-    IN ULONG BufferSize\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwInitializeRegistry(\r
-    BOOLEAN SetUpBoot\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwLoadKey(\r
-    IN POBJECT_ATTRIBUTES KeyObjectAttributes,\r
-    IN POBJECT_ATTRIBUTES FileObjectAttributes\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwLoadKey2(\r
-    IN POBJECT_ATTRIBUTES KeyObjectAttributes,\r
-    IN POBJECT_ATTRIBUTES FileObjectAttributes,\r
-    IN ULONG Flags\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwNotifyChangeKey(\r
-    IN HANDLE KeyHandle,\r
-    IN HANDLE Event,\r
-    IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,\r
-    IN PVOID ApcContext OPTIONAL,\r
-    OUT PIO_STATUS_BLOCK IoStatusBlock,\r
-    IN ULONG CompletionFilter,\r
-    IN BOOLEAN Asynchroneous,\r
-    OUT PVOID ChangeBuffer,\r
-    IN ULONG Length,\r
-    IN BOOLEAN WatchSubtree\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwOpenKey(\r
-    OUT PHANDLE KeyHandle,\r
-    IN ACCESS_MASK DesiredAccess,\r
-    IN POBJECT_ATTRIBUTES ObjectAttributes\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwPlugPlayControl(\r
-    IN PLUGPLAY_CONTROL_CLASS PlugPlayControlClass,\r
-    IN OUT PVOID Buffer,\r
-    IN ULONG BufferSize\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwQueryKey(\r
-    IN HANDLE KeyHandle,\r
-    IN KEY_INFORMATION_CLASS KeyInformationClass,\r
-    OUT PVOID KeyInformation,\r
-    IN ULONG Length,\r
-    OUT PULONG ResultLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwQueryMultipleValueKey(\r
-    IN HANDLE KeyHandle,\r
-    IN OUT PKEY_VALUE_ENTRY ValueList,\r
-    IN ULONG NumberOfValues,\r
-    OUT PVOID Buffer,\r
-    IN OUT PULONG Length,\r
-    OUT PULONG ReturnLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwQueryValueKey(\r
-    IN HANDLE KeyHandle,\r
-    IN PUNICODE_STRING ValueName,\r
-    IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,\r
-    OUT PVOID KeyValueInformation,\r
-    IN ULONG Length,\r
-    OUT PULONG ResultLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwReplaceKey(\r
-    IN POBJECT_ATTRIBUTES ObjectAttributes,\r
-    IN HANDLE Key,\r
-    IN POBJECT_ATTRIBUTES ReplacedObjectAttributes\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwRestoreKey(\r
-    IN HANDLE KeyHandle,\r
-    IN HANDLE FileHandle,\r
-    IN ULONG RestoreFlags\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwSaveKey(\r
-    IN HANDLE KeyHandle,\r
-    IN HANDLE FileHandle\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwSaveKeyEx(\r
-    IN HANDLE KeyHandle,\r
-    IN HANDLE FileHandle,\r
-    IN ULONG Flags\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwSetInformationKey(\r
-    IN HANDLE KeyHandle,\r
-    IN KEY_SET_INFORMATION_CLASS KeyInformationClass,\r
-    IN PVOID KeyInformation,\r
-    IN ULONG KeyInformationLength\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwSetValueKey(\r
-    IN HANDLE KeyHandle,\r
-    IN PUNICODE_STRING ValueName,\r
-    IN ULONG TitleIndex OPTIONAL,\r
-    IN ULONG Type,\r
-    IN PVOID Data,\r
-    IN ULONG DataSize\r
-);\r
-\r
-NTSTATUS\r
-NTAPI\r
-ZwUnloadKey(\r
-    IN POBJECT_ATTRIBUTES KeyObjectAttributes\r
-);\r
-\r
-#endif\r
+/*++ NDK Version: 0098
+
+Copyright (c) Alex Ionescu.  All rights reserved.
+
+Header Name:
+
+    cmfuncs.h
+
+Abstract:
+
+    Function definitions for the Configuration Manager.
+
+Author:
+
+    Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
+
+--*/
+
+#ifndef _CMFUNCS_H
+#define _CMFUNCS_H
+
+//
+// Dependencies
+//
+#include <umtypes.h>
+#include <cmtypes.h>
+
+//
+// Native calls
+//
+NTSTATUS
+NTAPI
+NtCompactKeys(
+    IN ULONG Count,
+    IN PHANDLE KeyArray
+);
+
+NTSTATUS
+NTAPI
+NtCompressKey(
+    IN HANDLE Key
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtCreateKey(
+    OUT PHANDLE KeyHandle,
+    IN ACCESS_MASK DesiredAccess,
+    IN POBJECT_ATTRIBUTES ObjectAttributes,
+    IN ULONG TitleIndex,
+    IN PUNICODE_STRING Class OPTIONAL,
+    IN ULONG CreateOptions,
+    IN PULONG Disposition OPTIONAL
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtDeleteKey(
+    IN HANDLE KeyHandle
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtDeleteValueKey(
+    IN HANDLE KeyHandle,
+    IN PUNICODE_STRING ValueName
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtEnumerateKey(
+    IN HANDLE KeyHandle,
+    IN ULONG Index,
+    IN KEY_INFORMATION_CLASS KeyInformationClass,
+    OUT PVOID KeyInformation,
+    IN ULONG Length,
+    OUT PULONG ResultLength
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtEnumerateValueKey(
+    IN HANDLE KeyHandle,
+    IN ULONG Index,
+    IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+    OUT PVOID KeyValueInformation,
+    IN ULONG Length,
+    OUT PULONG ResultLength
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtFlushKey(
+    IN HANDLE KeyHandle
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtGetPlugPlayEvent(
+    IN ULONG Reserved1,
+    IN ULONG Reserved2,
+    OUT PPLUGPLAY_EVENT_BLOCK Buffer,
+    IN ULONG BufferSize
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtInitializeRegistry(
+    USHORT Flag
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtLoadKey(
+    IN POBJECT_ATTRIBUTES KeyObjectAttributes,
+    IN POBJECT_ATTRIBUTES FileObjectAttributes
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtLoadKey2(
+    IN POBJECT_ATTRIBUTES KeyObjectAttributes,
+    IN POBJECT_ATTRIBUTES FileObjectAttributes,
+    IN ULONG Flags
+);
+
+NTSTATUS
+NTAPI
+NtLoadKeyEx(
+    IN POBJECT_ATTRIBUTES TargetKey,
+    IN POBJECT_ATTRIBUTES SourceFile,
+    IN ULONG Flags,
+    IN HANDLE TrustClassKey
+);
+
+NTSTATUS
+NTAPI
+NtLockProductActivationKeys(
+    IN PULONG pPrivateVer,
+    IN PULONG pSafeMode
+);
+
+NTSTATUS
+NTAPI
+NtLockRegistryKey(
+    IN HANDLE KeyHandle
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtNotifyChangeKey(
+    IN HANDLE KeyHandle,
+    IN HANDLE Event,
+    IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+    IN PVOID ApcContext OPTIONAL,
+    OUT PIO_STATUS_BLOCK IoStatusBlock,
+    IN ULONG CompletionFilter,
+    IN BOOLEAN Asynchroneous,
+    OUT PVOID ChangeBuffer,
+    IN ULONG Length,
+    IN BOOLEAN WatchSubtree
+);
+
+NTSTATUS
+NTAPI
+NtNotifyChangeMultipleKeys(
+    IN HANDLE MasterKeyHandle,
+    IN ULONG Count,
+    IN POBJECT_ATTRIBUTES SlaveObjects,
+    IN HANDLE Event,
+    IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+    IN PVOID ApcContext OPTIONAL,
+    OUT PIO_STATUS_BLOCK IoStatusBlock,
+    IN ULONG CompletionFilter,
+    IN BOOLEAN WatchTree,
+    OUT PVOID Buffer,
+    IN ULONG Length,
+    IN BOOLEAN Asynchronous
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtOpenKey(
+    OUT PHANDLE KeyHandle,
+    IN ACCESS_MASK DesiredAccess,
+    IN POBJECT_ATTRIBUTES ObjectAttributes
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtPlugPlayControl(
+    IN PLUGPLAY_CONTROL_CLASS PlugPlayControlClass,
+    IN OUT PVOID Buffer,
+    IN ULONG BufferSize
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtQueryKey(
+    IN HANDLE KeyHandle,
+    IN KEY_INFORMATION_CLASS KeyInformationClass,
+    OUT PVOID KeyInformation,
+    IN ULONG Length,
+    OUT PULONG ResultLength
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtQueryMultipleValueKey(
+    IN HANDLE KeyHandle,
+    IN OUT PKEY_VALUE_ENTRY ValueList,
+    IN ULONG NumberOfValues,
+    OUT PVOID Buffer,
+    IN OUT PULONG Length,
+    OUT PULONG ReturnLength
+);
+
+NTSTATUS
+NTAPI
+NtQueryOpenSubKeys(
+    IN POBJECT_ATTRIBUTES TargetKey,
+    OUT PULONG HandleCount
+);
+
+NTSTATUS
+NTAPI
+NtQueryOpenSubKeysEx(
+    IN POBJECT_ATTRIBUTES TargetKey,
+    IN ULONG BufferLength,
+    IN PVOID Buffer,
+    IN PULONG RequiredSize
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtQueryValueKey(
+    IN HANDLE KeyHandle,
+    IN PUNICODE_STRING ValueName,
+    IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+    OUT PVOID KeyValueInformation,
+    IN ULONG Length,
+    OUT PULONG ResultLength
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRenameKey(
+    IN HANDLE KeyHandle,
+    IN PUNICODE_STRING ReplacementName
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtReplaceKey(
+    IN POBJECT_ATTRIBUTES ObjectAttributes,
+    IN HANDLE Key,
+    IN POBJECT_ATTRIBUTES ReplacedObjectAttributes
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtRestoreKey(
+    IN HANDLE KeyHandle,
+    IN HANDLE FileHandle,
+    IN ULONG RestoreFlags
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtSaveKey(
+    IN HANDLE KeyHandle,
+    IN HANDLE FileHandle
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtSaveKeyEx(
+    IN HANDLE KeyHandle,
+    IN HANDLE FileHandle,
+    IN ULONG Flags
+);
+
+
+NTSTATUS
+NTAPI
+NtSaveMergedKeys(
+    IN HANDLE HighPrecedenceKeyHandle,
+    IN HANDLE LowPrecedenceKeyHandle,
+    IN HANDLE FileHandle
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtSetInformationKey(
+    IN HANDLE KeyHandle,
+    IN KEY_SET_INFORMATION_CLASS KeyInformationClass,
+    IN PVOID KeyInformation,
+    IN ULONG KeyInformationLength
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtSetValueKey(
+    IN HANDLE KeyHandle,
+    IN PUNICODE_STRING ValueName,
+    IN ULONG TitleIndex OPTIONAL,
+    IN ULONG Type,
+    IN PVOID Data,
+    IN ULONG DataSize
+);
+
+NTSYSCALLAPI
+NTSTATUS
+NTAPI
+NtUnloadKey(
+    IN POBJECT_ATTRIBUTES KeyObjectAttributes
+);
+
+NTSTATUS
+NTAPI
+NtUnloadKey2(
+    IN POBJECT_ATTRIBUTES TargetKey,
+    IN ULONG Flags
+);
+
+NTSTATUS
+NTAPI
+NtUnloadKeyEx(
+    IN POBJECT_ATTRIBUTES TargetKey,
+    IN HANDLE Event
+);
+
+#ifdef NTOS_MODE_USER
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwCreateKey(
+    OUT PHANDLE KeyHandle,
+    IN ACCESS_MASK DesiredAccess,
+    IN POBJECT_ATTRIBUTES ObjectAttributes,
+    IN ULONG TitleIndex,
+    IN PUNICODE_STRING Class OPTIONAL,
+    IN ULONG CreateOptions,
+    IN PULONG Disposition OPTIONAL
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeleteKey(
+    IN HANDLE KeyHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwDeleteValueKey(
+    IN HANDLE KeyHandle,
+    IN PUNICODE_STRING ValueName
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwEnumerateKey(
+    IN HANDLE KeyHandle,
+    IN ULONG Index,
+    IN KEY_INFORMATION_CLASS KeyInformationClass,
+    OUT PVOID KeyInformation,
+    IN ULONG Length,
+    OUT PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwEnumerateValueKey(
+    IN HANDLE KeyHandle,
+    IN ULONG Index,
+    IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+    OUT PVOID KeyValueInformation,
+    IN ULONG Length,
+    OUT PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwFlushKey(
+    IN HANDLE KeyHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwGetPlugPlayEvent(
+    IN ULONG Reserved1,
+    IN ULONG Reserved2,
+    OUT PPLUGPLAY_EVENT_BLOCK Buffer,
+    IN ULONG BufferSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwLoadKey(
+    IN POBJECT_ATTRIBUTES KeyObjectAttributes,
+    IN POBJECT_ATTRIBUTES FileObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwLoadKey2(
+    IN POBJECT_ATTRIBUTES KeyObjectAttributes,
+    IN POBJECT_ATTRIBUTES FileObjectAttributes,
+    IN ULONG Flags
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwNotifyChangeKey(
+    IN HANDLE KeyHandle,
+    IN HANDLE Event,
+    IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+    IN PVOID ApcContext OPTIONAL,
+    OUT PIO_STATUS_BLOCK IoStatusBlock,
+    IN ULONG CompletionFilter,
+    IN BOOLEAN Asynchroneous,
+    OUT PVOID ChangeBuffer,
+    IN ULONG Length,
+    IN BOOLEAN WatchSubtree
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwOpenKey(
+    OUT PHANDLE KeyHandle,
+    IN ACCESS_MASK DesiredAccess,
+    IN POBJECT_ATTRIBUTES ObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwPlugPlayControl(
+    IN PLUGPLAY_CONTROL_CLASS PlugPlayControlClass,
+    IN OUT PVOID Buffer,
+    IN ULONG BufferSize
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryKey(
+    IN HANDLE KeyHandle,
+    IN KEY_INFORMATION_CLASS KeyInformationClass,
+    OUT PVOID KeyInformation,
+    IN ULONG Length,
+    OUT PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryMultipleValueKey(
+    IN HANDLE KeyHandle,
+    IN OUT PKEY_VALUE_ENTRY ValueList,
+    IN ULONG NumberOfValues,
+    OUT PVOID Buffer,
+    IN OUT PULONG Length,
+    OUT PULONG ReturnLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwQueryValueKey(
+    IN HANDLE KeyHandle,
+    IN PUNICODE_STRING ValueName,
+    IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
+    OUT PVOID KeyValueInformation,
+    IN ULONG Length,
+    OUT PULONG ResultLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwReplaceKey(
+    IN POBJECT_ATTRIBUTES ObjectAttributes,
+    IN HANDLE Key,
+    IN POBJECT_ATTRIBUTES ReplacedObjectAttributes
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwRestoreKey(
+    IN HANDLE KeyHandle,
+    IN HANDLE FileHandle,
+    IN ULONG RestoreFlags
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSaveKey(
+    IN HANDLE KeyHandle,
+    IN HANDLE FileHandle
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSaveKeyEx(
+    IN HANDLE KeyHandle,
+    IN HANDLE FileHandle,
+    IN ULONG Flags
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetInformationKey(
+    IN HANDLE KeyHandle,
+    IN KEY_SET_INFORMATION_CLASS KeyInformationClass,
+    IN PVOID KeyInformation,
+    IN ULONG KeyInformationLength
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwSetValueKey(
+    IN HANDLE KeyHandle,
+    IN PUNICODE_STRING ValueName,
+    IN ULONG TitleIndex OPTIONAL,
+    IN ULONG Type,
+    IN PVOID Data,
+    IN ULONG DataSize
+);
+#endif
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwInitializeRegistry(
+    USHORT Flag
+);
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+ZwUnloadKey(
+    IN POBJECT_ATTRIBUTES KeyObjectAttributes
+);
+
+#endif