1 /* $Id: filelock.c,v 1.3 2002/01/13 22:02:31 ea Exp $
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