LockFile 関数 (fileapi.h)
呼び出し元プロセスが排他アクセスできるように、指定したファイルをロックします。
共有ロックの作成や失敗時のブロック操作など、追加のオプションを指定するには、 LockFileEx 関数を使用します。
構文
BOOL LockFile(
[in] HANDLE hFile,
[in] DWORD dwFileOffsetLow,
[in] DWORD dwFileOffsetHigh,
[in] DWORD nNumberOfBytesToLockLow,
[in] DWORD nNumberOfBytesToLockHigh
);
パラメーター
[in] hFile
ファイルへのハンドル。 ファイル ハンドルは、 GENERIC_READまたはGENERIC_WRITE アクセス権を使用 して 作成されている必要があります。 詳細については、「 ファイル のセキュリティとアクセス権」を参照してください。
[in] dwFileOffsetLow
ロックを開始するファイル内の開始バイト オフセットの下位 32 ビット。
[in] dwFileOffsetHigh
ロックを開始するファイル内の開始バイト オフセットの上位 32 ビット。
[in] nNumberOfBytesToLockLow
ロックするバイト範囲の長さの下位 32 ビット。
[in] nNumberOfBytesToLockHigh
ロックするバイト範囲の長さの上位 32 ビット。
戻り値
関数が成功した場合、戻り値は 0 以外 (TRUE) になります。
関数が失敗した場合、戻り値は 0 (FALSE) になります。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
LockFile の呼び出しが同期的に完了した場合、完了ポートがファイル ハンドルに関連付けられているときに、完了エントリがキューに登録されないことがあります。
UnlockFile 関数は、LockFile によってロックされたファイル領域のロックを解除します。
ファイルの領域をロックすると、ロック プロセスのスレッドは、このファイル ハンドルを使用して、指定したリージョンに排他的にアクセスできます。 ロック プロセスによって作成されたプロセスによってファイル ハンドルが継承された場合、子プロセスにはロックされたリージョンへのアクセスは許可されません。 ロック プロセスでファイルが 2 回目に開かれると、その領域のロックが解除されるまで、この 2 番目のハンドルを介して指定されたリージョンにアクセスできません。
ファイルの領域をロックしても、マップされたファイル ビューからの読み取りまたは書き込みが妨げられません。
現在のファイルの末尾を超えるバイトをロックできます。 これは、ファイルの末尾にレコードを追加する調整を行う場合に便利です。
排他ロックは、ファイルの既存のロックされた領域と重複できません。 詳細については、「 LockFileEx」を参照してください。
LockFile でファイルの領域をロックできない場合、すぐに 0 が返されます。 ブロックされません。 ロックが取得されるまでブロックするファイル ロック要求を発行するには、LOCKFILE_FAIL_IMMEDIATELY フラグを指定せずに LockFileEx を使用します。
プロセスがファイルの一部をロックして終了するか、未処理のロックを持つファイルを閉じると、ロックはオペレーティング システムによってロック解除されます。 ただし、オペレーティング システムがこれらのロックを解除するまでにかかる時間は、使用可能なシステム リソースによって異なります。 そのため、プロセスが終了したときにロックされているすべてのファイルのロックを明示的に解除することをお勧めします。 これが行われていない場合は、オペレーティング システムでロックが解除されていない場合、これらのファイルへのアクセスが拒否される可能性があります。
Windows 8 と Windows Server 2012 では、この関数は、次のテクノロジによってサポートされています。
テクノロジ | サポートされています |
---|---|
サーバー メッセージ ブロック (SMB) 3.0 プロトコル | はい |
SMB 3.0 Transparent Failover (TFO) | はい |
スケールアウト ファイル共有 (SO) を使う SMB 3.0 | はい |
クラスターの共有ボリューム ファイル システム (CsvFS) | はい |
Resilient File System (ReFS) | はい |
例
例については、「 1 つのファイルを別のファイルに追加する」を参照してください。
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | fileapi.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |