IoGetDriverDirectory 関数 (wdm.h)

ドライバーがファイルの読み取りと書き込みを行うことができるディスク上のディレクトリへのハンドルを返します。 そのディレクトリ内のファイルは、特定のドライバー オブジェクトに適用されます。

構文

NTSTATUS IoGetDriverDirectory(
  [_In_]  PDRIVER_OBJECT        DriverObject,
  [_In_]  DRIVER_DIRECTORY_TYPE DirectoryType,
  [_In_]  ULONG                 Flags,
  [_Out_] PHANDLE               DriverDirectoryHandle
);

パラメーター

[_In_] DriverObject

呼び出し元ドライバーのドライバー オブジェクト (DRIVER_OBJECT 構造体) へのポインター。

[_In_] DirectoryType

要求されたディレクトリの種類を示す _DRIVER_DIRECTORY_TYPE型の値。

[_In_] Flags

0 を指定する必要があります。

[_Out_] DriverDirectoryHandle

要求されたドライバー ディレクトリへの HANDLE を受け取る変数へのポインター。 呼び出し元は NULL を渡してはなりません。

戻り値

適切な NTSTATUS 値を返します。 次の値を指定できます。

エラー コード 説明
STATUS_SUCCESS 呼び出しによって、要求されたドライバー ディレクトリへのハンドルが正常に開かれました。
STATUS_INVALID_PARAMETER この関数への入力値が無効です。 たとえば、 DriverObject または DriverDirectoryHandle は NULL です。 フラグ は 0 ではありません。

注釈

必要なディスクとボリュームが開始される前に IoGetDriverDirectory が呼び出された場合、関数はハンドルを開かないため、エラーを返します。

ドライバーは通常 、ZwOpenFileZwCreateFile を使用してファイルにアクセスまたは作成します。 これらの関数のパラメーターの 1 つは、オブジェクト名とルート ディレクトリを含む OBJECT_ATTRIBUTES 構造体です。 ルート ディレクトリが NULL の場合、オブジェクト名は完全修飾パスである必要があります。 ただし、ルート ディレクトリのハンドルを指定する場合、オブジェクト名は、ハンドルが表すオブジェクト (ファイルの場合はディレクトリ) に対する相対パスである必要があります。

IoGetDriverDirectory 呼び出しが成功したら、受信した HANDLE を、ZwOpenFile と ZwCreateFile に渡すOBJECT_ATTRIBUTESのルート ディレクトリとして使用します。

ドライバーは、アクセスが不要になったときに受信したハンドルを閉じるには 、ZwClose を呼び出す必要があります。

IoGetDriverDirectory の呼び出し元は、システム スレッドのコンテキストで IRQL = PASSIVE_LEVELで実行されている必要があります。

要件

要件
サポートされている最小のクライアント Windows 10 バージョン 1803
Header wdm.h
Library NtosKrnl.lib
[DLL] NtosKrnl.exe
IRQL PASSIVE_LEVEL

こちらもご覧ください

DRIVER_OBJECT

_DRIVER_DIRECTORY_TYPE

ZwOpenFile

ZwCreateFile

ZwClose

OBJECT_ATTRIBUTES

InitializeObjectAttributes