ZwOpenKeyTransacted 関数 (wdm.h)
ZwOpenKeyTransacted ルーチンは、既存のレジストリ キーを開き、キーをトランザクションに関連付けます。
構文
NTSYSAPI NTSTATUS ZwOpenKeyTransacted(
[out] PHANDLE KeyHandle,
[in] ACCESS_MASK DesiredAccess,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
[in] HANDLE TransactionHandle
);
パラメーター
[out] KeyHandle
ルーチンがキーにハンドルを書き込む HANDLE 変数へのポインター。
[in] DesiredAccess
呼び出し元が要求するキーへのアクセスの種類を指定します。 このパラメーターは 、ACCESS_MASK 値です。 詳細については、ZwCreateKey ルーチンの DesiredAccess パラメーターの説明を参照してください。
[in] ObjectAttributes
開いているキーのオブジェクト属性へのポインター。 このパラメーターは、InitializeObjectAttributes ルーチンによって以前に初期化されている必要があるOBJECT_ATTRIBUTES構造体を指します。 呼び出し元は、InitializeObjectAttributes の呼び出しで、レジストリ キーの名前を ObjectName パラメーターとして指定する必要があります。 呼び出し元がシステム スレッド コンテキストで実行されていない場合は、 InitializeObjectAttributes を呼び出すときにOBJ_KERNEL_HANDLE属性を設定する必要があります。
[in] TransactionHandle
トランザクション オブジェクトへのハンドル。 このハンドルを取得するには、 ZwCreateTransaction ルーチンを呼び出します。 または、トランザクション オブジェクトへのポインターがある場合は、 ObOpenObjectByPointer ルーチンへのポインターを指定して、対応するトランザクション ハンドルを取得できます。
戻り値
ZwOpenKeyTransacted は 、呼び出しが正常にキーを開いた場合にSTATUS_SUCCESSを返します。 エラーの戻り値として考えられるのは、次のとおりです。
リターン コード | 説明 |
---|---|
|
ObjectAttributes パラメーターが NULL であるか、無効な情報を指しています。 |
|
オブジェクト属性のレジストリ パスが無効です。 |
|
オブジェクト属性のレジストリ パスが見つかりませんでした。 |
|
呼び出し元には、名前付きレジストリ キーのハンドルを開くために必要なアクセス権がありませんでした。 |
|
メモリ割り当て操作に失敗しました。 |
注釈
このルーチンは、呼び出し元がレジストリ キーにアクセスできるハンドルを提供します。 さらに、このルーチンは、キーをアクティブなトランザクションに関連付けます。
KeyHandle が指すハンドルが使用されなくなったら、ドライバーは ZwClose ルーチンを呼び出して閉じる必要があります。
指定したキーがレジストリに存在しない場合、 ZwOpenKeyTransacted はエラー状態の値を返し、キー ハンドルを指定しません。 ZwCreateKeyTransacted ルーチンとは異なり、ZwOpenKeyTransacted ルーチンは、キーが存在しない場合、指定されたキーを作成しません。 ZwCreateKeyTransacted と ZwOpenKeyTransacted の両方が、レジストリ キーをトランザクションに関連付けます。
ZwOpenKey ルーチンは ZwOpenKeyTransacted に似ていますが、キーをトランザクションに関連付けません。
カーネル モード ドライバーがトランザクションへのハンドルを取得した後 (たとえば、 ZwCreateTransaction を呼び出すことによって)、ドライバーは、このトランザクションの一部である一連のレジストリ操作を実行できます。 ドライバーは、トランザクションで行われた変更にコミットするか、トランザクションをロールバックすることによって、トランザクションを閉じます。
ドライバーは、トランザクションの一部であるすべてのレジストリ操作を正常に完了した後、 ZwCommitTransaction ルーチンを呼び出して変更をコミットできます。 ドライバーは、トランザクションをロールバックする ZwRollbackTransaction ルーチンを呼び出すことができます。
トランザクション中に、操作を実行するシステム呼び出しが次のいずれかの条件を満たしている場合、レジストリ操作はトランザクションの一部になります。
- 呼び出しは、入力パラメーターとしてトランザクション ハンドルを指定します。 たとえば、 ZwCreateKeyTransacted と ZwOpenKeyTransacted の呼び出しでは、1 つ以上のキーをトランザクションに関連付けることができます。
- 呼び出しは、入力パラメーターとして、トランザクション ハンドルが指定 された ZwCreateKeyTransacted または ZwOpenKeyTransacted の呼び出しによって取得されたレジストリ キー ハンドルを指定します。 たとえば、 ZwSetValueKey ルーチンの呼び出しでは、この方法で取得したキー ハンドルを使用して、トランザクションの一部としてレジストリ キーの値を設定できます。
ZwOpenKeyTransacted は 、ObjectAttributes パラメーターが指す構造体のセキュリティ情報を無視します。
カーネル モードの呼び出し元がシステム スレッド コンテキストで実行されていない場合は、作成するハンドルがカーネル ハンドルであることを確認する必要があります。 それ以外の場合は、ドライバーが実行されているコンテキスト内のプロセスによってハンドルにアクセスできます。 詳細については、「 オブジェクト ハンドル」を参照してください。
カーネル モードでレジストリ キーを操作する方法の詳細については、「 ドライバーでのレジストリの使用」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。 |
対象プラットフォーム | ユニバーサル |
Header | wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む) |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
DDI コンプライアンス規則 | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |