ReOpenFile 関数 (winbase.h)
異なるアクセス権、共有モード、フラグを使って、指定したファイル システム オブジェクトを再度開きます。
構文
HANDLE ReOpenFile(
[in] HANDLE hOriginalFile,
[in] DWORD dwDesiredAccess,
[in] DWORD dwShareMode,
[in] DWORD dwFlagsAndAttributes
);
パラメーター
[in] hOriginalFile
再度開くオブジェクトのハンドル。 オブジェクトは CreateFile 関数によって作成されている必要があります。
[in] dwDesiredAccess
オブジェクトへの必要なアクセス。 値の一覧については、「 ファイル のセキュリティとアクセス権」を参照してください。 ハンドルがまだ開いている以前のオープン要求で指定された共有モードと競合するアクセス・モードを要求することはできません。
このパラメーターがゼロ (0) の場合、アプリケーションはデバイスにアクセスせずにデバイス属性のクエリを実行できます。 これは、アプリケーションがフロッピー ディスク ドライブのサイズと、ドライブにフロッピーを必要とせずにサポートされている形式を決定する場合に便利です。
[in] dwShareMode
オブジェクトの共有モード。 ハンドルがまだ開いている以前のオープン要求で指定されたアクセス・モードと競合する共有モードを要求することはできません。
このパラメーターが 0 (0) で CreateFile が成功した場合、オブジェクトは共有できず、ハンドルが閉じられるまでもう一度開くことはできません。
プロセスを開いている間に他のプロセスがオブジェクトを共有できるようにするには、次の値の 1 つ以上を組み合わせて、オブジェクトを開くときに要求できるアクセスの種類を指定します。 これらの共有オプションは、オブジェクトのハンドルを閉じるまで有効です。
[in] dwFlagsAndAttributes
ファイル フラグ。 このパラメーターには、次の 1 つ以上の値を指定できます。
値 | 説明 |
---|---|
|
バックアップまたは復元操作のためにファイルが開かれているか作成されていることを示します。 システムは、SE_BACKUP_NAMEおよびSE_RESTORE_NAME特権がある場合に、呼び出し元プロセスがファイル セキュリティ チェックをオーバーライドすることを保証します。 詳細については、「 トークンでの特権の変更」を参照してください。
このフラグを設定して、ディレクトリへのハンドルを取得することもできます。 指定されている場合、ディレクトリ ハンドルは、ファイル ハンドルの代わりに一部の関数に渡すことができます。 |
|
オペレーティング システムが、指定したハンドルだけでなく、他の開いているハンドルまたは重複するハンドルだけでなく、すべてのハンドルが閉じられた直後にファイルを削除することを示します。
FILE_SHARE_DELETEを使用しない限り、ファイルに対する後続のオープン要求は失敗します。 |
|
中間バッファリングまたはキャッシュなしでファイルを開くようシステムに指示します。 FILE_FLAG_OVERLAPPEDと組み合わせると、I/O はメモリ マネージャーの同期操作に依存しないため、 フラグによって最大の非同期パフォーマンスが得られます。 ただし、データがキャッシュに保持されていないため、一部の I/O 操作には時間がかかります。
アプリケーションは、 FILE_FLAG_NO_BUFFERINGで開かれたファイルを操作するときに、特定の要件を満たす必要があります。
アプリケーションは 、GetDiskFreeSpace 関数を呼び出すことによって、ボリューム セクターのサイズを決定できます。 |
|
ファイル データが要求されたが、リモート ストレージに存在し続ける必要があることを示します。 ローカル ストレージに転送しないでください。 このフラグは、リモート ストレージ システムで使用することを目的としています。 |
|
このフラグを使用すると、通常の 再解析ポイント 処理は行われず、 ReOpenFile は再解析ポイントを開こうとします。 ファイルを開くと、再解析ポイントを制御するフィルターが動作可能かどうかに関係なく、ファイル ハンドルが返されます。 このフラグは 、CREATE_ALWAYS フラグでは使用できません。 ファイルが再解析ポイントでない場合、このフラグは無視されます。 |
|
処理にかなりの時間がかかる操作がERROR_IO_PENDING を返すように、オブジェクトを初期化するようにシステムに指示します。 操作が完了すると、指定したイベントがシグナル状態に設定されます。
FILE_FLAG_OVERLAPPEDを指定する場合、ファイルの読み取りおよび書き込み関数で OVERLAPPED 構造体を指定する必要があります。 つまり、 FILE_FLAG_OVERLAPPED が指定されている場合、アプリケーションは重複した読み取りと書き込みを実行 する必要があります 。 FILE_FLAG_OVERLAPPEDが指定されている場合、システムはファイル ポインターを維持しません。 ファイルの位置は、 lpOverlapped パラメーター ( OVERLAPPED 構造体を指す) の一部として、ファイルの読み取りおよび書き込み関数に渡す必要があります。 このフラグを使用すると、複数の操作をハンドルと同時に実行することもできます (たとえば、読み取りと書き込みの同時操作)。 |
|
POSIX 規則に従ってファイルにアクセスすることを示します。 これには、このような名前付けをサポートするファイル システムに対して、名前が異なる複数のファイルを許可することが含まれます。 MS-DOS または 16 ビット Windows 用に作成されたアプリケーションでは、このフラグで作成されたファイルにアクセスできない可能性があるため、このオプションを使用する場合は注意が必要です。 |
|
ファイルがランダムにアクセスされることを示します。 システムはこれをヒントとしてファイルのキャッシュを最適化します。 |
|
ファイルは先頭から末尾まで順次アクセスされることを示します。 システムはこれをヒントとしてファイルのキャッシュを最適化します。 アプリケーションがランダム アクセスのファイル ポインターを移動させると、最適なキャッシングが行われない場合があります。ただし、操作は引き続き正常に実行されます。
このフラグを指定すると、シーケンシャル アクセスを使用して大きなファイルを読み取るアプリケーションのパフォーマンスが向上する可能性があります。 大きなファイルを主に順番に読み取るが、小さなバイト範囲をスキップする場合があるアプリケーションでは、パフォーマンスの向上がさらに顕著になる可能性があります。 |
|
中間キャッシュを介して書き込み、ディスクに直接移動するようにシステムに指示します。 システムは書き込み操作をキャッシュすることはできますが、遅延フラッシュすることはできません。 |
ハンドルが名前付きパイプのクライアント側を表す場合は、 dwFlags パラメーターにセキュリティサービスの品質情報を含めることもできます。 詳細については、「 偽装レベル」を参照してください。 呼び出し元のアプリケーションで SECURITY_SQOS_PRESENT フラグを指定する場合、 dwFlags パラメーターには次の 1 つ以上の値を含めることができます。
戻り値
関数が成功した場合、戻り値は指定されたファイルへの開いているハンドルです。
失敗した場合の戻り値は、INVALID_HANDLE_VALUE です。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
dwFlags パラメーターには、ファイル属性フラグ (FILE_ATTRIBUTE_*) を含めることはできません。 これらは、ファイルの作成時にのみ指定できます。
Windows 8 と Windows Server 2012 では、この関数は、次のテクノロジによってサポートされています。
テクノロジ | サポートされています |
---|---|
サーバー メッセージ ブロック (SMB) 3.0 プロトコル | はい |
SMB 3.0 Transparent Failover (TFO) | はい |
スケールアウト ファイル共有 (SO) を使う SMB 3.0 | はい |
クラスターの共有ボリューム ファイル システム (CsvFS) | はい |
Resilient File System (ReFS) | はい |
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | winbase.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |