共用方式為


ZwCreateKey 函式 (wdm.h)

ZwCreateKey 例程會建立新的登錄機碼或開啟現有的登錄機碼。

語法

NTSYSAPI NTSTATUS ZwCreateKey(
  [out]           PHANDLE            KeyHandle,
  [in]            ACCESS_MASK        DesiredAccess,
  [in]            POBJECT_ATTRIBUTES ObjectAttributes,
                  ULONG              TitleIndex,
  [in, optional]  PUNICODE_STRING    Class,
  [in]            ULONG              CreateOptions,
  [out, optional] PULONG             Disposition
);

參數

[out] KeyHandle

接收索引鍵句柄的 HANDLE 變數指標。

[in] DesiredAccess

指定 ACCESS_MASK 值,這個值會決定對物件的要求存取權。 除了針對所有類型的物件所定義的訪問許可權(請參閱 ACCESS_MASK),呼叫者還可以指定下列一或多個特定物件目錄的訪問許可權:

DesiredAccess 旗標 允許呼叫端執行此動作
KEY_QUERY_VALUE 讀取索引鍵值。
KEY_SET_VALUE 寫入索引鍵值。
KEY_CREATE_SUB_KEY 建立金鑰的子機碼。
KEY_ENUMERATE_SUB_KEYS 讀取金鑰的子機碼。
KEY_CREATE_LINK 建立索引鍵的符號連結。 裝置和中繼驅動程式不會使用此旗標。
KEY_NOTIFY 當金鑰的名稱、值或屬性變更時,要求接收通知。 如需詳細資訊,請參閱 ZwNotifyChangeKey

呼叫端也可以指定下列其中一個常數,結合數個ACCESS_MASK旗標。

不斷 由這些ACCESS_MASK旗標所組成
KEY_READ STANDARD_RIGHTS_READ、KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS和KEY_NOTIFY
KEY_WRITE STANDARD_RIGHTS_WRITE、KEY_SET_VALUE和KEY_CREATE_SUB_KEY
KEY_EXECUTE 與KEY_READ相同。
KEY_ALL_ACCESS STANDARD_RIGHTS_ALL、KEY_QUERY_VALUE、KEY_SET_VALUE、KEY_CREATE_SUB_KEY、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY和KEY_CREATE_LINK

[in] ObjectAttributes

指定物件名稱和其他屬性之 OBJECT_ATTRIBUTES 結構的指標。 使用 InitializeObjectAttributes 來初始化這個結構。 如果呼叫端未在系統線程內容中執行,則呼叫 InitializeObjectAttributes時,它必須設定OBJ_KERNEL_HANDLE屬性。

TitleIndex

裝置和中繼驅動程式將此參數設定為零。

[in, optional] Class

包含索引鍵物件類別之 Unicode 字串的指標。 組態管理員會使用這項資訊。

[in] CreateOptions

指定建立或開啟索引鍵時要套用的選項,指定為下列旗標的兼容組合。

CreateOptions 旗標 描述
REG_OPTION_VOLATILE 重新啟動系統時不會保留金鑰。
REG_OPTION_NON_VOLATILE 重新啟動系統時會保留金鑰。
REG_OPTION_CREATE_LINK 新建立的索引鍵是符號連結。 裝置和中繼驅動程式不會使用此旗標。
REG_OPTION_BACKUP_RESTORE 密鑰應以允許備份和還原作業的特殊許可權來建立或開啟。 裝置和中繼驅動程式不會使用此旗標。

[out, optional] Disposition

接收值的變數指標,指出是否已建立新的索引鍵或已開啟現有的索引鍵。

處置 描述
REG_CREATED_NEW_KEY 已建立新的金鑰。
REG_OPENED_EXISTING_KEY 已開啟現有的金鑰。

傳回值

ZwCreateKey 會在成功時傳回STATUS_SUCCESS,或在失敗時傳回適當的 NTSTATUS 錯誤碼。

言論

ZwCreateKey 提供呼叫端可用來操作登錄機碼的句柄。 如需詳細資訊,請參閱在驅動程式中使用登錄

一旦 KeyHandle 所指向的句柄不再使用,驅動程式必須呼叫 ZwClose 關閉它。

有兩種替代方式可指定要建立或開啟的檔名,ZwCreateKey

  1. 作為完整路徑名稱,提供於輸入 ObjectAttributesObjectName 成員中。 登入機碼的路徑名稱開頭為 \Registry

  2. 做為相對於另一個登錄機碼的路徑名稱,由輸入 ObjectAttributesRootDirectory 成員表示的句柄。

如果 ObjectAttributes 所指定的索引鍵不存在,則例程會嘗試建立索引鍵。 若要讓此嘗試成功,新密鑰必須是 RootDirectory所參考之密鑰的直接子機碼,而且 RootDirectory 所參考的密鑰必須已開啟KEY_CREATE_SUB_KEY存取。

如果指定的索引鍵已經存在,則會開啟,而且其值不會以任何方式受到影響。

建立索引鍵時,ObjectAttributes 所指定的安全性屬性會 判斷指定的 DesiredAccess 是否會在後續 呼叫 ZwCreateKeyZwOpenKey時授與 。

如果呼叫端未在系統線程內容中執行,則必須確保所建立的任何句柄都是私人句柄。 否則,進程可以存取其內容中的驅動程序執行句柄。 如需詳細資訊,請參閱 物件句柄

如需使用登錄機碼的詳細資訊,請參閱在驅動程式中使用登錄

如果呼叫此函式是在使用者模式中發生,您應該使用名稱 「NtCreateKey」 而不是 「ZwCreateKey」。

Windows 核心中的 NtCreateKey 例程無法直接存取內核模式驅動程式。

對於內核模式驅動程式的呼叫,NtXxxZwXxx 版本的 Windows 原生系統服務例程,在處理和解譯輸入參數的方式上可能會有不同的行為。 如需 nt NtXxxZwXxx 例程之間關聯性的詳細資訊,請參閱 使用 Nt 和 Zw 版本的原生系統服務例程

要求

要求 價值
目標平臺 普遍
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
連結庫 NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDIS(storport)IrqlZwPassive(wdm)PowerIrpDDis(wdm)ZwRegistryCreate(storport),ZwRegistryCreate(storport),ZwRegistryCreate(wdm)ZwRegistryOpen(wdm)

另請參閱

ACCESS_MASK

InitializeObjectAttributes

使用 Nt 和 Zw 版本的原生系統服務例程

ZwClose

ZwDeleteKey

ZwEnumerateKey

ZwEnumerateValueKey

ZwFlushKey

ZwNotifyChangeKey

ZwOpenKey

ZwQueryValueKey

ZwSetValueKey