ZwOpenKeyEx 関数 (wdm.h)

ZwOpenKeyEx ルーチンは、既存のレジストリ キーを開きます。

構文

NTSYSAPI NTSTATUS ZwOpenKeyEx(
  [out] PHANDLE            KeyHandle,
  [in]  ACCESS_MASK        DesiredAccess,
  [in]  POBJECT_ATTRIBUTES ObjectAttributes,
  [in]  ULONG              OpenOptions
);

パラメーター

[out] KeyHandle

ルーチンがキーにハンドルを書き込む HANDLE 変数へのポインター。

[in] DesiredAccess

呼び出し元が要求するキーへのアクセスの種類を指定します。 このパラメーターは 、ACCESS_MASK 値です。 詳細については、ZwCreateKey ルーチンの DesiredAccess パラメーターの説明を参照してください。

[in] ObjectAttributes

開いているキーのオブジェクト属性へのポインター。 このパラメーターは、InitializeObjectAttributes ルーチンによって以前に初期化されている必要があるOBJECT_ATTRIBUTES構造体を指します。 呼び出し元は、InitializeObjectAttributes の呼び出しで、レジストリ キーの名前を ObjectName パラメーターとして指定する必要があります。 呼び出し元がシステム スレッド コンテキストで実行されていない場合は、 InitializeObjectAttributes を呼び出すときにOBJ_KERNEL_HANDLE属性を設定する必要があります。

[in] OpenOptions

キーを開くときに適用するオプションを指定します。 このパラメーターを 0 に設定するか、次の 1 つ以上のREG_OPTION_XXX フラグ ビットのビットごとの OR 設定します。

OpenOptions フラグ 説明
REG_OPTION_OPEN_LINK キーはシンボリック リンクです。 このフラグは、デバイス ドライバーと中間ドライバーでは使用されません。
REG_OPTION_BACKUP_RESTORE キーは、バックアップ操作と復元操作を許可する特別な特権で開く必要があります。 このフラグは、デバイス ドライバーと中間ドライバーでは使用されません。

戻り値

ZwOpenKeyEx は、呼び出しがキーの開きに成功した場合にSTATUS_SUCCESSを返します。 考えられるエラーの戻り値は次のとおりです。

リターン コード 説明
STATUS_INVALID_PARAMETER_4
OpenOptions パラメーターは無効なオプションを指定します。
STATUS_OBJECT_PATH_SYNTAX_BAD
オブジェクト属性のレジストリ パスが無効です。
STATUS_OBJECT_NAME_NOT_FOUND
オブジェクト属性のレジストリ キー名が見つかりませんでした。
STATUS_OBJECT_TYPE_MISMATCH
名前付きレジストリ キーはシンボリック リンクですが、REG_OPTION_OPEN_LINK フラグ ビットは OpenOptions では設定されません。
STATUS_ACCESS_DENIED
呼び出し元には、名前付きレジストリ キーのハンドルを開くために必要なアクセス権がありませんでした。
STATUS_INSUFFICIENT_RESOURCES
メモリ割り当て操作が失敗しました。

注釈

このルーチンは、呼び出し元がレジストリ キーにアクセスできるハンドルを提供します。 指定したキーが存在しない場合、ルーチンはエラー状態値を返し、キー ハンドルを指定しません。

ZwOpenKey ルーチンは ZwOpenKeyEx に似ていますが、OpenOptions パラメーターは受け入れられません。 ZwOpenKeyExOpenOptions パラメーターを使用すると、呼び出し元はシンボリック リンクであるキーを開くか、バックアップおよび復元操作用のキーを開くことができます。 OpenOptions = 0 の ZwOpenKeyEx の呼び出しは、ZwOpenKey の呼び出しと同じです。

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

ZwOpenKeyEx は、 ObjectAttributes パラメーターが指す構造体のセキュリティ情報を無視します。

カーネル モード呼び出し元がシステム スレッド コンテキストで実行されていない場合は、作成するハンドルがカーネル ハンドルであることを確認する必要があります。 それ以外の場合は、ドライバーが実行されているコンテキスト内のプロセスによってハンドルにアクセスできます。 詳細については、「 オブジェクト ハンドル」を参照してください。

カーネル モードでのレジストリ キーの操作の詳細については、「 ドライバーでのレジストリの使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 7 以降のバージョンの 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

ZwClose

ZwOpenKey