UnlockFile 関数 (fileapi.h)
開いているファイル内のリージョンのロックを解除します。 リージョンのロックを解除すると、他のプロセスがリージョンにアクセスできるようになります。
リージョンを指定する別の方法として、 UnlockFileEx 関数を使用します。
構文
BOOL UnlockFile(
[in] HANDLE hFile,
[in] DWORD dwFileOffsetLow,
[in] DWORD dwFileOffsetHigh,
[in] DWORD nNumberOfBytesToUnlockLow,
[in] DWORD nNumberOfBytesToUnlockHigh
);
パラメーター
[in] hFile
LockFile でロックされた領域を含むファイルのハンドル。 ファイル ハンドルは、 GENERIC_READまたはアクセス 権 GENERIC_WRITE 使用して作成されている必要があります。 詳細については、「 ファイル のセキュリティとアクセス権」を参照してください。
[in] dwFileOffsetLow
ロックされた領域が開始されるファイル内の開始バイト オフセットの下位ワード。
[in] dwFileOffsetHigh
ロックされた領域が開始されるファイル内の開始バイト オフセットの上位ワード。
[in] nNumberOfBytesToUnlockLow
ロックを解除するバイト範囲の長さの下位ワード。
[in] nNumberOfBytesToUnlockHigh
ロックを解除するバイト範囲の長さの上位ワード。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
この関数は常に同期的に動作しますが、完了ポートがファイル ハンドルに関連付けられている場合は、完了エントリをキューに登録することはできません。
ファイルの領域のロックを解除すると、以前に取得したファイルのロックが解除されます。 ロックを解除するリージョンは、既存のロックされているリージョンに正確に対応している必要があります。 ファイルの 2 つの隣接する領域を個別にロックしてから、両方のロックされたリージョンにまたがる 1 つのリージョンを使用してロックを解除することはできません。
ファイルの一部がロックされた状態でプロセスが終了するか、未処理のロックを持つファイルを閉じると、オペレーティング システムによってロックが解除されます。 ただし、オペレーティング システムがこれらのロックを解除するまでにかかる時間は、使用可能なシステム リソースによって異なります。 そのため、プロセスが終了したときにロックされているすべてのファイルのロックを明示的に解除することをお勧めします。 これが行われていない場合は、オペレーティング システムがまだロックを解除していない場合、これらのファイルへのアクセスが拒否される可能性があります。
Windows 8 と Windows Server 2012 では、この関数は、次のテクノロジによってサポートされています。
テクノロジ | サポートされています |
---|---|
サーバー メッセージ ブロック (SMB) 3.0 プロトコル | はい |
SMB 3.0 Transparent Failover (TFO) | はい |
スケールアウト ファイル共有 (SO) を使う SMB 3.0 | はい |
クラスターの共有ボリューム ファイル システム (CsvFS) | はい |
Resilient File System (ReFS) | はい |
要件
サポートされている最小のクライアント | Windows XP [デスクトップ アプリ | UWP アプリ] |
サポートされている最小のサーバー | Windows Server 2003 [デスクトップ アプリのみ | UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | fileapi.h (Windows.h を含む) |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |