ファイルのハンドルを開く
ファイルのハンドルを開くには次の手順に従います。
OBJECT_ATTRIBUTES 構造体を作成し、InitializeObjectAttributes マクロを呼び出して、その構造体を初期化します。 ファイルのオブジェクト名を ObjectName パラメーターとして InitializeObjectAttributes に指定します。
IoCreateFile、ZwCreateFile、または ZwOpenFile に OBJECT_ATTRIBUTES 構造体を渡すことにより、このファイルのハンドルを開きます。
このファイルが存在しない場合、IoCreateFile と ZwCreateFile ではこのファイルが作成されますが、ZwOpenFile では STATUS_OBJECT_NAME_NOT_FOUND が返されます。
ドライバーでは、ほとんどの場合、IoCreateFile ではなく、ZwCreateFile または ZwOpenFile が使用されます。
IoCreateFile、ZwCreateFile、または ZwOpenFile を呼び出すと、Windows のエグゼクティブによって、そのファイルを表す新しいファイル オブジェクトが作成され、そのオブジェクトのハンドルが作成されて開いた状態になります。 このファイル オブジェクトは、開いているハンドルをすべて閉じるまで保持されます。
どのルーチンを呼び出す場合でも、自身が必要とするアクセス権を DesiredAccess パラメーターとして渡す必要があります。 これらの権限は、ドライバーで実行するすべての操作で有効なものにする必要があります。 次の表に、これらの操作および要求する該当のアクセス権を示します。
操作 | 必要なアクセス権 |
---|---|
ファイルから読み取ります。 |
FILE_READ_DATA または GENERIC_READ |
ファイルに書き込みます。 |
FILE_WRITE_DATA または GENERIC_WRITE |
ファイルの末尾にのみ書き込みます。 |
FILE_APPEND_DATA |
ファイルの作成時刻などのファイルのメタデータを読み取ります。 |
FILE_READ_ATTRIBUTES または GENERIC_READ |
ファイルの作成時刻などのファイルのメタデータを書き込みます。 |
FILE_WRITE_ATTRIBUTES または GENERIC_WRITE |
DesiredAccess で使用できる値の詳細については「NtCreateFile 関数」を参照してください。