NtOpenFile 関数 (winternl.h)
既存のファイル、デバイス、ディレクトリ、またはボリュームを開き、ファイル オブジェクトのハンドルを返します。
この関数は、Windows Driver Kit (WDK) に記載されている ZwOpenFile 関数と同じです。
構文
__kernel_entry NTSTATUS NtOpenFile(
[out] PHANDLE FileHandle,
[in] ACCESS_MASK DesiredAccess,
[in] POBJECT_ATTRIBUTES ObjectAttributes,
[out] PIO_STATUS_BLOCK IoStatusBlock,
[in] ULONG ShareAccess,
[in] ULONG OpenOptions
);
パラメーター
[out] FileHandle
開かれたファイルのハンドルへのポインター。 ハンドルが使用されなくなったら、ドライバーは ZwClose でハンドルを閉じる必要があります。
[in] DesiredAccess
呼び出し元が必要とするファイル アクセスの種類を表す ACCESS_MASK 値。 指定できるアクセスの種類については、「WDK の ZwCreateFile 」を参照してください。
[in] ObjectAttributes
InitializeObjectAttributes を使用して呼び出し元が初期化する構造体へのポインター。 呼び出し元がシステム プロセス コンテキストで実行されていない場合は、ObjectAttributes のOBJ_KERNEL_HANDLE属性を設定する必要があります。 オブジェクト属性の指定の詳細については、WDK の ZwCreateFile の CreateOptions パラメーターを参照してください。
[out] IoStatusBlock
要求された操作と最終的な完了状態に関する情報を含む構造体へのポインター。
[in] ShareAccess
ファイルの共有アクセスの種類。 詳細については、「WDK の ZwCreateFile 」を参照してください。
[in] OpenOptions
ファイルを開くときに適用するオプション。 詳細については、「WDK の ZwCreateFile 」を参照してください。
戻り値
NtOpenFile は、STATUS_SUCCESSまたは適切なエラー状態を返します。 エラー状態が返された場合、呼び出し元は IoStatusBlock を確認することで、エラーの原因に関する追加情報を見つけることができます。
注釈
システム プロセス以外のプロセス コンテキストで実行されるドライバー ルーチンは、ZwOpenFile の ObjectAttributes パラメーターのOBJ_KERNEL_HANDLE属性を設定する必要があります。 これにより、 ZwOpenFile によって返されるハンドルの使用が、カーネル モードでのみ実行されているプロセスに制限されます。 それ以外の場合は、ドライバーが実行されているコンテキスト内のプロセスによってハンドルにアクセスできます。 ドライバーは InitializeObjectAttributes を呼び出して 、OBJ_KERNEL_HANDLE 属性を次のように設定できます。
InitializeObjectAttributes(&ObjectAddributes, NULL, OBJ_KERNEL_HANDLE, NULL, NULL);
ZwCreateFile の呼び出し元は IRQL = PASSIVE_LEVELで実行されている必要があります。
WDK ヘッダー ファイル Ntdef.h は、多くの定数定義と InitializeObjectAttributes マクロに必要であることに注意してください。 LoadLibrary 関数と GetProcAddress 関数を使用して、Ntdll.dll に動的にリンクすることもできます。
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | winternl.h |
Library | ntdll.lib |
[DLL] | ntdll.dll |