ZwOpenDirectoryObject 関数 (ntifs.h)

ZwOpenDirectoryObject ルーチンは、既存のディレクトリ オブジェクトを開きます。

構文

NTSYSAPI NTSTATUS ZwOpenDirectoryObject(
  [out] PHANDLE            DirectoryHandle,
  [in]  ACCESS_MASK        DesiredAccess,
  [in]  POBJECT_ATTRIBUTES ObjectAttributes
);

パラメーター

[out] DirectoryHandle

新しく開いたディレクトリ オブジェクトのハンドル。

[in] DesiredAccess

このディレクトリ オブジェクトに対して要求されるアクセスの種類を指定するACCESS_MASK構造体。 呼び出し元は、次の 1 つまたは 1 つの組み合わせを指定できます。

DesiredAccess フラグ 意味
DIRECTORY_QUERY ディレクトリ オブジェクトへのクエリ アクセス
DIRECTORY_TRAVERSE ディレクトリ オブジェクトへの名前参照アクセス
DIRECTORY_CREATE_OBJECT ディレクトリ オブジェクトへの名前作成アクセス
DIRECTORY_CREATE_SUBDIRECTORY ディレクトリ オブジェクトへのサブディレクトリ作成アクセス
DIRECTORY_ALL_ACCESS 上記のすべての権限とSTANDARD_RIGHTS_REQUIRED。
 

これらの要求されたアクセスの種類は、オブジェクトの随意アクセス制御リスト (DACL) と比較して、許可または拒否されるアクセスを決定します。

[in] ObjectAttributes

呼び出し元によって提供されるディレクトリ オブジェクトに指定された属性。 このパラメーターは、 InitializeObjectAttributes マクロを呼び出すことによって初期化されます。

戻り値

ZwOpenDirectoryObject は 、STATUS_SUCCESSまたは適切なエラー状態を返します。 最も一般的なエラー状態コードは次のとおりです。

リターン コード 説明
STATUS_INSUFFICIENT_RESOURCES
このルーチンに必要な一時バッファーを割り当てませんでした。
STATUS_INVALID_PARAMETER
指定された ObjectAttributes パラメーターが NULL ポインターであり、 OBJECT_ATTRIBUTES 構造体への有効なポインターではないか、OBJECT_ATTRIBUTES構造体で指定されたフィールドの一部が無効でした。
STATUS_OBJECT_NAME_INVALID
ObjectAttributes パラメーターには、OBJECT_NAME_PATH_SEPARATOR文字の後に空の文字列が見つかったため、無効だった ObjectName フィールドがOBJECT_ATTRIBUTES構造体に含まれていました。
STATUS_OBJECT_NAME_NOT_FOUND
ObjectAttributes パラメーターには、見つからなかった objectName フィールドがOBJECT_ATTRIBUTES構造体に含まれていました。
STATUS_OBJECT_PATH_NOT_FOUND
ObjectAttributes パラメーターには、見つからなかったオブジェクト パスを持つOBJECT_ATTRIBUTES構造体に ObjectName フィールドが含まれていました。
STATUS_OBJECT_PATH_SYNTAX_BAD
ObjectAttributes パラメーターに RootDirectory フィールドが含まれていませんでしたが、OBJECT_ATTRIBUTES構造体の ObjectName フィールドが空の文字列であるか、OBJECT_NAME_PATH_SEPARATOR文字が含まれていませんでした。 これは、オブジェクト パスの正しくない構文を示します。
 

DirectoryHandle パラメーターが無効なポインターである場合、ZwOpenDirectoryObject ルーチンは例外をスローします。

注釈

ZwOpenDirectoryObject は、既存のディレクトリ オブジェクトを開き、オブジェクトへのハンドルを返します。

ZwOpenDirectoryObject ルーチンは、InitializeObjectAttributes マクロを使用して、開くオブジェクトのOBJECT_ATTRIBUTES構造体の特定の属性を初期化した後に呼び出されます。

ディレクトリ オブジェクトは、ZwCreateDirectoryObject ルーチンを使用して作成されますZwOpenDirectoryObject を呼び出して取得したハンドルは、最終的に ZwClose を呼び出して解放する必要があります。

セキュリティとアクセス制御の詳細については、 ドライバー開発者向けの Windows セキュリティ モデル と、Windows SDK のこれらのトピックに関するドキュメントを参照してください。

メモZwCreateDirectoryObject 関数の呼び出しがユーザー モードで行われる場合は、"ZwCreateDirectoryObject" ではなく "NtCreateDirectoryObject" という名前を使用する必要があります。
 
カーネル モード ドライバーからの呼び出しの場合、Windows ネイティブ システム サービス ルーチンの NtXxx および ZwXxx バージョンは、入力パラメーターを処理および解釈する方法で動作が異なる場合があります。 ルーチンの NtXxx バージョンと ZwXxx バージョンの間の関係の詳細については、「ネイティブ システム サービス ルーチンの Nt バージョンと Zw バージョンの使用」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP
対象プラットフォーム ユニバーサル
Header ntifs.h (Ntdef.h、Ntifs.h、Fltkernel.h を含む)
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI コンプライアンス規則 HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm)

こちらもご覧ください

ACCESS_MASK

ACL

InitializeObjectAttributes

Nt および Zw バージョンのネイティブ システム サービス ルーチンの使用

ZwClose

ZwCreateDirectoryObject