LockFileEx

指定したファイルを呼び出し側プロセスによる排他アクセス用にロックする。この関数は同期的にも非同期的にも動作し、排他ロックまたは共有ロックを要求できる。

LockFileEx hFile, dwFlags, dwReserved, nNumberOfBytesToLockLow, nNumberOfBytesToLockHigh, lpOverlapped

hFile : [intptr] ファイルのハンドル。ハンドルは GENERIC_READ または GENERIC_WRITE アクセス権で作成されている必要がある。詳細は「ファイルのセキュリティとアクセス権」を参照。
dwFlags : [int] 
dwReserved : [int] 予約引数。0 に設定しなければならない。
nNumberOfBytesToLockLow : [int] ロックするバイト範囲の長さの下位 32 ビット。
nNumberOfBytesToLockHigh : [int] ロックするバイト範囲の長さの上位 32 ビット。
lpOverlapped : [var] 関数がロック要求に使用する OVERLAPPED 構造体へのポインタ。必須であるこの構造体には、ロック範囲の先頭となるファイルオフセットが含まれる。hEvent メンバは有効なハンドルまたは 0 で初期化しなければならない。

(プラグイン / モジュール : kernel32.dll)

解説

指定したファイルを呼び出し側プロセスによる排他アクセス用にロックする。この関数は同期的にも非同期的にも動作し、排他ロックまたは共有ロックを要求できる。

[戻り値]
関数が成功した場合、戻り値は 0 以外 (TRUE) である。関数が失敗した場合、戻り値は 0 (FALSE)
である。拡張エラー情報を取得するには GetLastError を呼ぶ。

[備考]

ファイル領域のロックは、このファイルハンドルを使って指定領域への共有アクセスまたは排他アクセスを取得するために用いられる。ファイルハンドルがロックを行ったプロセスから作成された子プロセスに継承されても、子プロセスにはロック領域へのアクセスは付与されない。ロックを行ったプロセスが同じファイルを
2 度目に開いた場合、その 2
つ目のハンドルからは領域のロックを解除するまで指定領域にアクセスできない。ファイルの一部を排他アクセスでロックすると、そのファイルの指定領域に対する他のすべてのプロセスの読み書きアクセスが拒否される。現在のファイル末尾位置を超える領域をロックしてもエラーにはならない。ファイルの一部を共有アクセスでロックすると、最初にその領域をロックしたプロセスを含め、すべてのプロセスのその領域への書き込みアクセスが拒否される。すべてのプロセスはロックされた領域を読むことができる。ファイル領域のロックは、マップされたファイルビューからの読み書きを妨げない。LockFileEx
関数は、ファイルハンドルが非同期 I/O 用に開かれている場合、LOCKFILE_FAIL_IMMEDIATELY
フラグが指定されていない限り非同期に動作する。既に共有ロックまたは排他ロックが掛かっている範囲に対して排他ロックが要求された場合、関数は
ERROR_IO_PENDING を返す。ロックが付与されると、システムは OVERLAPPED
構造体で指定されたイベントをシグナル状態にする。ロックがいつ付与されたかを知るには GetOverlappedResult
関数または待機関数のいずれかを使う。詳細は「同期 I/O と非同期 I/O」を参照。ファイルハンドルが非同期 I/O
用に開かれておらず、ロックが利用できない場合、LOCKFILE_FAIL_IMMEDIATELY
フラグが指定されていない限り、この呼び出しはロックが付与されるかエラーが発生するまで待機する。排他ロックはファイルの既存のロック領域と重なってはならない。共有ロックは、その領域に掛かるロックが共有ロックである限り、ロック領域と重ねることができる。共有ロックは、両方のロックが同じファイルハンドルで作成された場合に限り、排他ロックと重ねることができる。共有ロックが排他ロックと重なる場合、アクセスできるのはロック所有者による読み取りのみである。同じ範囲に排他ロックと共有ロックの両方がかかっている場合、領域のロックを解除するには
2 回のアンロック操作が必要で、1 回目で排他ロック、2 回目で共有ロックを解除する。

プロセスがファイルの一部をロックしたまま終了したり、未解除のロックを持つファイルを閉じた場合、ロックはオペレーティングシステムによって解除される。ただしロック解除にかかる時間は利用可能なシステムリソースに依存する。したがって、プロセスは終了時にロックしているすべてのファイルを明示的にアンロックすることが推奨される。これを行わなかった場合、オペレーティングシステムがまだロックを解除していない間はそれらのファイルへのアクセスが拒否されることがある。Windows
8 および Windows Server 2012 では、この関数は次のテクノロジによってサポートされる。
(以下省略)

情報

プラグイン / モジュールkernel32.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の kernel32.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_kernel32_gen2.hs