IoGetDeviceDirectory 関数 (wdm.h)
ドライバーがファイルを格納できるディスク上のディレクトリへのハンドルを返します。 そのディレクトリ内のファイルは、特定のデバイス インスタンスに適用されます。
構文
NTSTATUS IoGetDeviceDirectory(
[_In_] PDEVICE_OBJECT PhysicalDeviceObject,
[_In_] DEVICE_DIRECTORY_TYPE DirectoryType,
[_In_] ULONG Flags,
[_In_] PVOID Reserved,
[_Out_] PHANDLE DeviceDirectoryHandle
);
パラメーター
[_In_] PhysicalDeviceObject
特定のデバイス インスタンスのデバイス スタックで照会される 物理デバイス オブジェクト へのポインター。 NULL は指定できません。
[_In_] DirectoryType
要求されたディレクトリの種類を示す _DEVICE_DIRECTORY_TYPE型の値。
[_In_] Flags
0 を指定する必要があります。
[_In_] Reserved
予約済み。 NULL にする必要があります
[_Out_] DeviceDirectoryHandle
要求されたデバイス ディレクトリへの HANDLE を受け取る変数へのポインター。 呼び出し元は NULL を渡してはなりません。
戻り値
適切な NTSTATUS 値を返します。 次の値を指定できます。
エラー コード | 説明 |
---|---|
STATUS_SUCCESS | 呼び出しによって、要求されたデバイス ディレクトリへのハンドルが正常に開かれました。 |
STATUS_INVALID_PARAMETER | この関数への入力値が無効です。 たとえば、 PhysicalDeviceObject または DeviceDirectoryHandle は NULL です。 フラグ は 0 ではありません。 予約済み は NULL ではありません。 |
注釈
必要なディスクとボリュームが開始される前に IoGetDeviceDirectory が呼び出された場合、関数はハンドルを開き、エラーを返します。
ドライバーは通常 、ZwOpenFile と ZwCreateFile を使用してファイルにアクセスまたは作成します。 これらの関数のパラメーターの 1 つは、オブジェクト名とルート ディレクトリを含む OBJECT_ATTRIBUTES 構造体です。 ルート ディレクトリが NULL の場合、オブジェクト名は完全修飾パスである必要があります。 ただし、ルート ディレクトリのハンドルを指定する場合、オブジェクト名は、ハンドルが表すオブジェクト (ファイルの場合はディレクトリ) に対する相対パスである必要があります。
IoGetDeviceDirectory 呼び出しが成功したら、受信した HANDLE を、ZwOpenFile と ZwCreateFile に渡すOBJECT_ATTRIBUTESのルート ディレクトリとして使用します。
ドライバーは、アクセスが不要になったときに受信したハンドルを閉じるには 、ZwClose を呼び出す必要があります。
IoGetDeviceDirectory の呼び出し元は、システム スレッドのコンテキストで IRQL = PASSIVE_LEVELで実行されている必要があります。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 10 バージョン 1803 |
Header | wdm.h |
Library | NtosKrnl.lib |
[DLL] | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |