3 * reactos/ntoskrnl/fs/filelock.c
10 /**********************************************************************
12 * FsRtlCheckLockForReadAccess@8
21 * All this really does is pick out the lock parameters from
22 * the irp (io stack location?), get IoGetRequestorProcess,
23 * and pass values on to FsRtlFastCheckLockForRead.
28 FsRtlCheckLockForReadAccess (
29 IN PFILE_LOCK FileLock,
37 /**********************************************************************
39 * FsRtlCheckLockForWriteAccess@8
48 * All this really does is pick out the lock parameters from
49 * the irp (io stack location?), get IoGetRequestorProcess,
50 * and pass values on to FsRtlFastCheckLockForWrite.
54 FsRtlCheckLockForWriteAccess (
55 IN PFILE_LOCK FileLock,
63 /**********************************************************************
65 * FsRtlFastCheckLockForRead@24
76 FsRtlFastCheckLockForRead (
77 IN PFILE_LOCK FileLock,
78 IN PLARGE_INTEGER FileOffset,
79 IN PLARGE_INTEGER Length,
81 IN PFILE_OBJECT FileObject,
89 /**********************************************************************
91 * FsRtlFastCheckLockForWrite@24
102 FsRtlFastCheckLockForWrite (
103 IN PFILE_LOCK FileLock,
104 IN PLARGE_INTEGER FileOffset,
105 IN PLARGE_INTEGER Length,
107 IN PFILE_OBJECT FileObject,
115 /**********************************************************************
117 * FsRtlFastUnlockAll@16
118 * FsRtlFastUnlockAllByKey@20
130 FsRtlpFastUnlockAllByKey (
131 IN PFILE_LOCK FileLock,
132 IN PFILE_OBJECT FileObject,
133 IN PEPROCESS Process,
134 IN DWORD Key, /* FIXME: guess */
135 IN BOOLEAN UseKey, /* FIXME: guess */
136 IN PVOID Context OPTIONAL
140 return (STATUS_RANGE_NOT_LOCKED);
147 IN PFILE_LOCK FileLock,
148 IN PFILE_OBJECT FileObject,
149 IN PEPROCESS Process,
150 IN PVOID Context OPTIONAL
153 return FsRtlpFastUnlockAllByKey (
158 FALSE, /* Do NOT use Key */
166 FsRtlFastUnlockAllByKey (
167 IN PFILE_LOCK FileLock,
168 IN PFILE_OBJECT FileObject,
169 IN PEPROCESS Process,
171 IN PVOID Context OPTIONAL
174 return FsRtlpFastUnlockAllByKey (
185 /**********************************************************************
187 * FsRtlFastUnlockSingle@32
198 FsRtlFastUnlockSingle (
199 IN PFILE_LOCK FileLock,
200 IN PFILE_OBJECT FileObject,
201 IN PLARGE_INTEGER FileOffset,
202 IN PLARGE_INTEGER Length,
203 IN PEPROCESS Process,
205 IN PVOID Context OPTIONAL,
206 IN BOOLEAN AlreadySynchronized
209 return (STATUS_RANGE_NOT_LOCKED);
213 /**********************************************************************
215 * FsRtlGetNextFileLock@8
222 * NULL if no more locks.
225 * Internals: FsRtlGetNextFileLock uses
226 * FileLock->LastReturnedLockInfo and FileLock->LastReturnedLock
227 * as storage. LastReturnedLock is a pointer to the 'raw' lock
228 * inkl. double linked list, and FsRtlGetNextFileLock needs this
229 * to get next lock on subsequent calls with Restart = FALSE.
233 FsRtlGetNextFileLock (
234 IN PFILE_LOCK FileLock,
242 /**********************************************************************
244 * FsRtlInitializeFileLock@12
255 FsRtlInitializeFileLock (
256 IN PFILE_LOCK FileLock,
257 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
258 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
264 /**********************************************************************
266 * FsRtlPrivateLock@48
273 * IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
276 * -Calls IoCompleteRequest if Irp
277 * -Uses exception handling / ExRaiseStatus with
278 * STATUS_INSUFFICIENT_RESOURCES
283 IN PFILE_LOCK FileLock,
284 IN PFILE_OBJECT FileObject,
285 IN PLARGE_INTEGER FileOffset,
286 IN PLARGE_INTEGER Length,
287 IN PEPROCESS Process,
289 IN BOOLEAN FailImmediately,
290 IN BOOLEAN ExclusiveLock,
291 OUT PIO_STATUS_BLOCK IoStatus,
292 IN PIRP Irp OPTIONAL,
294 IN BOOLEAN AlreadySynchronized
301 /**********************************************************************
303 * FsRtlProcessFileLock@12
310 * -STATUS_INVALID_DEVICE_REQUEST
311 * -STATUS_RANGE_NOT_LOCKED from unlock routines.
312 * -STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
313 * (redirected IoStatus->Status).
316 * -switch ( Irp->CurrentStackLocation->MinorFunction )
317 * lock: return FsRtlPrivateLock;
318 * unlocksingle: return FsRtlFastUnlockSingle;
319 * unlockall: return FsRtlFastUnlockAll;
320 * unlockallbykey: return FsRtlFastUnlockAllByKey;
321 * default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
322 * return STATUS_INVALID_DEVICE_REQUEST;
324 * -'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
325 * -'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
329 FsRtlProcessFileLock (
330 IN PFILE_LOCK FileLock,
332 IN PVOID Context OPTIONAL
335 return (STATUS_NOT_IMPLEMENTED);
339 /**********************************************************************
341 * FsRtlUninitializeFileLock@4
352 FsRtlUninitializeFileLock (
353 IN PFILE_LOCK FileLock
359 /**********************************************************************
361 * FsRtlAllocateFileLock@8
364 * Only present in NT 5.0 or later.
373 FsRtlAllocateFileLock (
374 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
375 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL