次の方法で共有


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-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 に渡す OBJECT_ATTRIBUTES のルート ディレクトリとして使用し、ZwCreateFileします。

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

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

必要条件

要件 価値
サポートされる最小クライアント Windows 10 バージョン 1803
ヘッダー wdm.h
ライブラリ NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

関連項目

ZwOpenFile

ZwCreateFile

ZwClose

_DEVICE_DIRECTORY_TYPE

OBJECT_ATTRIBUTES

InitializeObjectAttributes