共用方式為


ZwCreateKeyTransacted 函式 (wdm.h)

ZwCreateKeyTransacted 例程會建立新的登錄機碼或開啟現有的登錄機碼,並將密鑰與交易產生關聯。

語法

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

參數

[out] KeyHandle

HANDLE 變數的指標,例程會將句柄寫入索引鍵。

[in] DesiredAccess

指定呼叫端要求之金鑰的存取類型。 此參數是 ACCESS_MASK 值。 如需詳細資訊,請參閱 ZwCreateKey 例程的 DesiredAccess 參數描述。

[in] ObjectAttributes

要開啟之索引鍵之物件屬性的指標。 此參數指向先前必須由 InitializeObjectAttributes 例程初始化的OBJECT_ATTRIBUTES結構。 呼叫端必須將登錄機碼的名稱指定為 InitializeObjectAttributes 呼叫中的 ObjectName 參數。 如果呼叫端未在系統線程內容中執行,它必須在呼叫 InitializeObjectAttributes 時設定OBJ_KERNEL_HANDLE屬性。

TitleIndex

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

[in, optional] Class

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

[in] CreateOptions

指定例程建立或開啟金鑰時要套用的選項。 將此參數設定為零,或設定為下列一或多個 REG_OPTION_XXX 旗標位的位 OR。

CreateOptions 旗標 Description
REG_OPTION_VOLATILE 計算機重新啟動之後 ,不會 保留密鑰。
REG_OPTION_NON_VOLATILE 計算機重新啟動之後,會保留金鑰。
REG_OPTION_CREATE_LINK 索引鍵是符號連結。 裝置和中繼驅動程式不會使用此旗標。
REG_OPTION_BACKUP_RESTORE 以啟用備份和還原作業的特殊許可權開啟金鑰。 裝置和中繼驅動程式不會使用此旗標。

[in] TransactionHandle

交易物件的句柄。 若要取得此句柄,您可以呼叫 ZwCreateTransaction 例程。 或者,如果您有交易物件的指標,則可以提供 ObOpenObjectByPointer 例程的指標,以取得對應的交易句柄。

[out, optional] Disposition

例程寫入下列其中一個值的位置指標,指出呼叫建立新的索引鍵或開啟現有索引鍵。

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

如果不需要此資訊,您可以設定 處置 = NULL

傳回值

如果呼叫成功建立或開啟密鑰,ZwCreateKeyTransacted 會傳回STATUS_SUCCESS。 可能的錯誤傳回值包括下列各項:

傳回碼 Description
STATUS_INVALID_PARAMETER
ObjectAttributes 參數為 NULL 或指向無效的資訊,或 CreateOptions 參數值指定無效的選項。
STATUS_OBJECT_PATH_SYNTAX_BAD
物件屬性中的登錄路徑無效。
STATUS_OBJECT_NAME_NOT_FOUND
找不到物件屬性中的登錄路徑。
STATUS_ACCESS_DENIED
呼叫端沒有開啟具名登錄機碼句柄的必要訪問許可權。
STATUS_INSUFFICIENT_RESOURCES
記憶體配置作業失敗。

備註

此例程提供呼叫端可以使用的句柄來存取登錄機碼。 此外,此例程會將密鑰與使用中交易產生關聯。

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

如同 ZwCreateKeyTransacted,ZwOpenKeyTransacted 例程會將密鑰與交易產生關聯。 不同於 ZwCreateKeyTransacted,它可以建立新的密鑰或開啟現有的機碼, ZwOpenKeyTransacted 只能開啟已經存在的登錄機碼。

例如,在內核模式驅動程式取得交易的句柄 (之後,藉由呼叫 ZwCreateTransaction) ,驅動程式就可以執行屬於此交易的一系列登錄作業。 驅動程式可以認可交易中所做的變更,或復原交易來關閉交易。

驅動程式成功完成屬於交易一部分的所有登錄作業之後,就可以呼叫 ZwCommitTransaction 例程來認可變更。 驅動程式可以呼叫 ZwRollbackTransaction 例程來復原交易。

在交易期間,如果執行作業的系統呼叫符合下列任一條件,登錄作業就會是交易的一部分:

  • 呼叫會將交易句柄指定為輸入參數。 例如,呼叫 ZwCreateKeyTransactedZwOpenKeyTransacted 可以將一或多個句柄與交易產生關聯。
  • 呼叫會指定做為輸入參數的登錄機碼句柄,由呼叫 ZwCreateKeyTransacted 或提供交易句柄的 ZwOpenKeyTransacted 取得。 例如,對 ZwSetValueKey 例程的呼叫可以使用以這種方式取得的機碼句柄,將登錄機碼的值設定為交易的一部分。
如需核心模式交易的詳細資訊,請參閱 使用核心交易管理員

對象屬性中的安全性描述元會決定在稍後呼叫例程時授與 DesiredAccess 參數所指定的訪問許可權,例如存取密鑰的 ZwOpenKeyTransacted ,或是建立密鑰子機碼的例程,例如 ZwCreateKeyTransacted

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

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

規格需求

需求
最低支援的用戶端 可在 Windows Vista 和更新版本的 Windows 中使用。
目標平台 Universal
標頭 wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h)
程式庫 NtosKrnl.lib
Dll NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI 合規性規則 HwStorPortProhibitedDDIs (storport) PowerIrpDDis (wdm)

另請參閱

ACCESS_MASK

InitializeObjectAttributes

OBJECT_ATTRIBUTES

ObOpenObjectByPointer

ZwClose

ZwCommitTransaction

ZwCreateKey

ZwCreateTransaction

ZwOpenKeyTransacted

ZwRollbackTransaction

ZwSetValueKey