次の方法で共有


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を返します。 エラーの戻り値として考えられるのは、次のとおりです。

リターン コード 説明
STATUS_INVALID_PARAMETER
ObjectAttributes パラメーターが NULL であるか、無効な情報を指しています。
STATUS_OBJECT_PATH_SYNTAX_BAD
オブジェクト属性のレジストリ パスが無効です。
STATUS_OBJECT_NAME_NOT_FOUND
オブジェクト属性のレジストリ パスが見つかりませんでした。
STATUS_ACCESS_DENIED
呼び出し元には、名前付きレジストリ キーのハンドルを開くために必要なアクセス権がありませんでした。
STATUS_INSUFFICIENT_RESOURCES
メモリ割り当て操作に失敗しました。

注釈

このルーチンは、呼び出し元がレジストリ キーにアクセスできるハンドルを提供します。 さらに、このルーチンは、キーをアクティブなトランザクションに関連付けます。

KeyHandle が指すハンドルが使用されなくなったら、ドライバーは ZwClose ルーチンを呼び出して閉じる必要があります。

指定したキーがレジストリに存在しない場合、 ZwOpenKeyTransacted はエラー状態の値を返し、キー ハンドルを指定しません。 ZwCreateKeyTransacted ルーチンとは異なり、ZwOpenKeyTransacted ルーチンは、キーが存在しない場合、指定されたキーを作成しません。 ZwCreateKeyTransactedZwOpenKeyTransacted の両方が、レジストリ キーをトランザクションに関連付けます。

ZwOpenKey ルーチンは ZwOpenKeyTransacted に似ていますが、キーをトランザクションに関連付けません。

カーネル モード ドライバーがトランザクションへのハンドルを取得した後 (たとえば、 ZwCreateTransaction を呼び出すことによって)、ドライバーは、このトランザクションの一部である一連のレジストリ操作を実行できます。 ドライバーは、トランザクションで行われた変更にコミットするか、トランザクションをロールバックすることによって、トランザクションを閉じます。

ドライバーは、トランザクションの一部であるすべてのレジストリ操作を正常に完了した後、 ZwCommitTransaction ルーチンを呼び出して変更をコミットできます。 ドライバーは、トランザクションをロールバックする ZwRollbackTransaction ルーチンを呼び出すことができます。

トランザクション中に、操作を実行するシステム呼び出しが次のいずれかの条件を満たしている場合、レジストリ操作はトランザクションの一部になります。

  • 呼び出しは、入力パラメーターとしてトランザクション ハンドルを指定します。 たとえば、 ZwCreateKeyTransactedZwOpenKeyTransacted の呼び出しでは、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)

こちらもご覧ください

ACCESS_MASK

InitializeObjectAttributes

OBJECT_ATTRIBUTES

ObOpenObjectByPointer

ZwClose

ZwCommitTransaction

ZwCreateKey

ZwCreateKeyTransacted

ZwCreateTransaction

ZwOpenKey

ZwOpenKeyTransactedEx

ZwRollbackTransaction

ZwSetValueKey