LockFile ファイルのロック

Cの宣言:

BOOL LockFile(
	HANDLE hFile,
	DWORD LockPosLow,
	DWORD LockPosHigh,
	DWORD LockSizeLow,
	DWORD LockSizeHigh);

VBの宣言:

Declare Function LockFile Lib "kernel32" ( _
	ByVal hFile As Long, _
	ByVal LockPosLow As Long, _
	ByVal LockPosHigh As Long, _
	ByVal LockSizeLow As Long, _
	ByVal LockSizeHigh As Long) As Long

説明:

オープンしているファイルの特定の領域を、他のプロセスがアクセスできないようにロックする。ネットワークディレクトリに存在するファイルに対するロックも有効である。

ファイル全体に対するロックならば、CreateFile時にfdwShareModeを0に設定すれば十分である。

ロックした領域は、必ずクローズ前にアンロックしなければならない。ただしこれは、アプリケーション終了後にアンロック状態が残ってしまうことを意味するものではない。

ロックする位置やサイズなどの64bit値の上位32bitは、プラットフォームによっては必ずしも指定可能とは限らない。上位32bitが指定不可能なプラットフォームでこれを指定した場合、ERROR_INVALID_PARAMETERエラーが発生する。

引数の意味は、以下の通り。
hFile ロックするファイルのファイルハンドル
LockPosLow ロックする領域の先頭位置を表す64bit値の下位32bit
LockPosHigh ロックする領域の先頭位置を表す64bit値の上位32bit
LockSizeLow ロックする領域のサイズを表す64bit値の下位32bit
LockSizeHigh ロックする領域のサイズを表す64bit値の上位32bit

戻り値は、関数の実行に成功したか否かを表す真偽値である。

Cのサンプル:

void DoLock()
{
	HANDLE hFile;

	hFile = CreateFile(
		"aaa.txt",
		GENERIC_READ,
		FILE_SHARE_READ | FILE_SHARE_WRITE,
		NULL,
		OPEN_EXISTING,
		FILE_ATTRIBUTE_NORMAL,
		NULL);
	
	LockFile(hFile, 0, 0, 0xffffffff, 0xffffffff);
	printf("Lock aaa.txt\n");
	
	Sleep(5000);
	
	UnlockFile(hFile, 0, 0, 0xffffffff, 0xffffffff);
	printf("Unlock aaa.txt\n");
	
	CloseHandle(hFile);
}

VBのサンプル:

' ファイルのロック
Private Sub DoLockFile()
	Dim hFile As Long

	'ファイルのオープン
	hFile = CreateFile("c:\test.txt", 0, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)

	'ファイルのロック
	LockFile hFile, 0, 0, &HFFFFFFFF, 0
	MsgBox "ファイルをロックしました"

	'ファイルのアンロック
	UnlockFile hFile, 0, 0, &HFFFFFFFF, 0
	MsgBox "ファイルをアンロックしました"

	'ファイルのクローズ
	CloseHandle hFile
End Sub

(original text:1998/12/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。