次の方法で共有


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 を使用して呼び出し元が初期化する構造体へのポインター。 呼び出し元がシステム プロセス コンテキストで実行されていない場合は、ObjectAttributesOBJ_KERNEL_HANDLE属性を設定する必要があります。 オブジェクト属性の指定の詳細については、WDK の ZwCreateFileCreateOptions パラメーターを参照してください。

[out] IoStatusBlock

要求された操作と最終的な完了状態に関する情報を含む構造体へのポインター。

[in] ShareAccess

ファイルの共有アクセスの種類。 詳細については、「WDK の ZwCreateFile 」を参照してください。

[in] OpenOptions

ファイルを開くときに適用するオプション。 詳細については、「WDK の ZwCreateFile 」を参照してください。

戻り値

NtOpenFile は、STATUS_SUCCESSまたは適切なエラー状態を返します。 エラー状態が返された場合、呼び出し元は IoStatusBlock を確認することで、エラーの原因に関する追加情報を見つけることができます。

注釈

システム プロセス以外のプロセス コンテキストで実行されるドライバー ルーチンは、ZwOpenFileObjectAttributes パラメーターの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