Please note this is not duplicate of [File r/w locking and unlink](https://stackoverflow.com/questions/1910624/file-r-w-locking-and-unlink). (The difference - platform. Operations of files like locking and deletion have totally different semantics, thus the sultion would be different).

I have following problem. I want to create a file system based session storage where each session data is stored in simple file named with session ids.

I want following API: `write(sid,data,timeout)`, `read(sid,data,timeout)`, `remove(sid)`
where sid==file name, Also I want to have some kind of GC that may remove all timed-out sessions.

Quite simple task if you work with single process but absolutly not trivial when working with multiple processes or even over shared folders.

The simplest solution I thought about was:

```
write/read:
   hanlde=CreateFile
   LockFile(handle)
   read/write data
   UnlockFile(handle)
   CloseHanlde(handle)

GC (for each file in directory)
   hanlde=CreateFile
   LockFile(handle)
   check if timeout occured
     DeleteFile
   UnlockFile(handle)
   CloseHanlde(handle)

```

But AFIAK I can't call `DeleteFile` on opended locked file (unlike in Unix where file locking is
not mandatory and unlink is allowed for opened files.

But if I put `DeleteFile` outside of Locking loop bad scenario may happen

```
GC - CreateFile/LockFile/Unlock/CloseHandle,
write - oCreateFile/LockFile/WriteUpdatedData/Unlock/CloseHandle
GC - DeleteFile

```

Does anybody have an idea how such issue may be solved? Are there any tricks that allow
combine file locking and file removal or make operation on file atomic (Win32)?

**Notes:**

* I don't want to use Database,
* I look for a solution for Win32 API for NT 5.01 and above

Thanks.