1 #ifndef __INCLUDE_DDK_FSFUNCS_H
2 #define __INCLUDE_DDK_FSFUNCS_H
4 #define FlagOn(x,f) ((x) & (f))
6 #include <ntos/fstypes.h>
12 IN PFILE_LOCK FileLock
17 FsRtlAllocateFileLock (
18 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
19 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
22 #define FsRtlAreThereCurrentFileLocks(FL) (((FL)->FastIoIsQuestionable))
25 FsRtlAddLargeMcbEntry(IN PLARGE_MCB Mcb,
28 IN LONGLONG SectorCount);
31 FsRtlAddMcbEntry (IN PMCB Mcb,
34 IN ULONG SectorCount);
37 FsRtlAddToTunnelCache (
39 IN ULONGLONG DirectoryKey,
40 IN PUNICODE_STRING ShortName,
41 IN PUNICODE_STRING LongName,
42 IN BOOLEAN KeyByShortName,
49 IN POOL_TYPE PoolType,
50 IN ULONG NumberOfBytes
54 FsRtlAllocatePoolWithQuota (
55 IN POOL_TYPE PoolType,
56 IN ULONG NumberOfBytes
60 FsRtlAllocatePoolWithQuotaTag (
61 IN POOL_TYPE PoolType,
62 IN ULONG NumberOfBytes,
67 FsRtlAllocatePoolWithTag (
68 IN POOL_TYPE PoolType,
69 IN ULONG NumberOfBytes,
74 FsRtlAllocateResource (
80 IN PUNICODE_STRING Name1,
81 IN PUNICODE_STRING Name2,
82 IN BOOLEAN IgnoreCase,
83 IN PWCHAR UpcaseTable OPTIONAL
92 FsRtlCheckLockForReadAccess (
93 IN PFILE_LOCK FileLock,
98 FsRtlCheckLockForWriteAccess (
99 IN PFILE_LOCK FileLock,
104 FsRtlCheckOplock(IN POPLOCK Oplock,
107 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
108 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
113 IN PFILE_OBJECT FileObject,
114 IN PLARGE_INTEGER FileOffset,
119 OUT PIO_STATUS_BLOCK IoStatus,
120 IN PDEVICE_OBJECT DeviceObject
125 IN PFILE_OBJECT FileObject,
126 IN PLARGE_INTEGER FileOffset,
131 OUT PIO_STATUS_BLOCK IoStatus,
132 IN PDEVICE_OBJECT DeviceObject
136 FsRtlCurrentBatchOplock(IN POPLOCK Oplock);
139 FsRtlDeleteKeyFromTunnelCache(IN PTUNNEL Cache,
140 IN ULONGLONG DirectoryKey);
143 FsRtlDeleteTunnelCache(IN PTUNNEL Cache);
146 FsRtlDeregisterUncProvider(IN HANDLE Handle);
166 FsRtlDoesDbcsContainWildCards (
171 FsRtlDoesNameContainWildCards (
172 IN PUNICODE_STRING Name
176 FsRtlFastCheckLockForRead (
177 IN PFILE_LOCK FileLock,
178 IN PLARGE_INTEGER FileOffset,
179 IN PLARGE_INTEGER Length,
181 IN PFILE_OBJECT FileObject,
186 FsRtlFastCheckLockForWrite (
187 IN PFILE_LOCK FileLock,
188 IN PLARGE_INTEGER FileOffset,
189 IN PLARGE_INTEGER Length,
191 IN PFILE_OBJECT FileObject,
197 IN PFILE_LOCK FileLock,
198 IN PFILE_OBJECT FileObject,
199 IN PEPROCESS Process,
200 IN PVOID Context OPTIONAL
204 FsRtlFastUnlockAllByKey (
205 IN PFILE_LOCK FileLock,
206 IN PFILE_OBJECT FileObject,
207 IN PEPROCESS Process,
209 IN PVOID Context OPTIONAL
213 FsRtlFastUnlockSingle (
214 IN PFILE_LOCK FileLock,
215 IN PFILE_OBJECT FileObject,
216 IN PLARGE_INTEGER FileOffset,
217 IN PLARGE_INTEGER Length,
218 IN PEPROCESS Process,
220 IN PVOID Context OPTIONAL,
221 IN BOOLEAN AlreadySynchronized
225 FsRtlFindInTunnelCache (
227 IN ULONGLONG DirectoryKey,
228 IN PUNICODE_STRING Name,
229 OUT PUNICODE_STRING ShortName,
230 OUT PUNICODE_STRING LongName,
231 IN OUT PULONG DataLength,
237 IN PFILE_OBJECT FileObject,
238 IN OUT PLARGE_INTEGER FileSize
242 FsRtlGetNextFileLock (
243 IN PFILE_LOCK FileLock,
248 FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb,
252 OUT PLONGLONG SectorCount);
255 FsRtlGetNextMcbEntry (IN PMCB Mcb,
259 OUT PULONG SectorCount);
260 #define FsRtlEnterFileSystem KeEnterCriticalRegion
261 #define FsRtlExitFileSystem KeLeaveCriticalRegion
264 FsRtlInitializeFileLock (
265 IN PFILE_LOCK FileLock,
266 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
267 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
271 FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb,
272 IN POOL_TYPE PoolType);
275 FsRtlInitializeMcb (IN PMCB Mcb,
276 IN POOL_TYPE PoolType);
279 FsRtlInitializeOplock(IN OUT POPLOCK Oplock);
283 FsRtlInitializeTunnelCache (
288 FsRtlIsDbcsInExpression (
294 FsRtlIsFatDbcsLegal (
303 FsRtlIsHpfsDbcsLegal (
312 FsRtlIsNameInExpression (
313 IN PUNICODE_STRING Expression,
314 IN PUNICODE_STRING Name,
315 IN BOOLEAN IgnoreCase,
316 IN PWCHAR UpcaseTable OPTIONAL
320 FsRtlIsNtstatusExpected(IN NTSTATUS NtStatus);
323 FsRtlIsTotalDeviceFailure(IN NTSTATUS NtStatus);
325 #define FsRtlIsUnicodeCharacterWild(C) ( \
328 FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
332 FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb,
334 OUT PLONGLONG Lbn OPTIONAL,
335 OUT PLONGLONG SectorCountFromLbn OPTIONAL,
336 OUT PLONGLONG StartingLbn OPTIONAL,
337 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
338 OUT PULONG Index OPTIONAL);
341 FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb,
346 FsRtlLookupLastMcbEntry (IN PMCB Mcb,
350 FsRtlLookupMcbEntry (IN PMCB Mcb,
353 OUT PULONG SectorCount OPTIONAL,
359 IN PFILE_OBJECT FileObject,
360 IN PLARGE_INTEGER FileOffset,
364 OUT PIO_STATUS_BLOCK IoStatus
368 FsRtlMdlReadComplete (
369 IN PFILE_OBJECT FileObject,
374 FsRtlMdlReadCompleteDev (
375 IN PFILE_OBJECT FileObject,
377 IN PDEVICE_OBJECT DeviceObject
382 IN PFILE_OBJECT FileObject,
383 IN PLARGE_INTEGER FileOffset,
387 OUT PIO_STATUS_BLOCK IoStatus,
388 IN PDEVICE_OBJECT DeviceObject
392 FsRtlMdlWriteComplete (
393 IN PFILE_OBJECT FileObject,
394 IN PLARGE_INTEGER FileOffset,
399 FsRtlMdlWriteCompleteDev (
400 IN PFILE_OBJECT FileObject,
401 IN PLARGE_INTEGER FileOffset,
403 IN PDEVICE_OBJECT DeviceObject
407 FsRtlNotifyChangeDirectory (
408 IN PNOTIFY_SYNC NotifySync,
410 IN PSTRING FullDirectoryName,
411 IN PLIST_ENTRY NotifyList,
412 IN BOOLEAN WatchTree,
413 IN ULONG CompletionFilter,
419 IN PNOTIFY_SYNC NotifySync,
420 IN PLIST_ENTRY NotifyList,
424 BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) (
425 IN PVOID NotifyContext,
426 IN PVOID TargetContext,
427 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
431 FsRtlNotifyFullChangeDirectory (
432 IN PNOTIFY_SYNC NotifySync,
433 IN PLIST_ENTRY NotifyList,
435 IN PSTRING FullDirectoryName,
436 IN BOOLEAN WatchTree,
437 IN BOOLEAN IgnoreBuffer,
438 IN ULONG CompletionFilter,
440 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
441 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
445 FsRtlNotifyFullReportChange (
446 IN PNOTIFY_SYNC NotifySync,
447 IN PLIST_ENTRY NotifyList,
448 IN PSTRING FullTargetName,
449 IN USHORT TargetNameOffset,
450 IN PSTRING StreamName OPTIONAL,
451 IN PSTRING NormalizedParentName OPTIONAL,
452 IN ULONG FilterMatch,
454 IN PVOID TargetContext
458 FsRtlNotifyUninitializeSync (
459 IN OUT PNOTIFY_SYNC * NotifySync
463 FsRtlNotifyReportChange (
464 IN PNOTIFY_SYNC NotifySync,
465 IN PLIST_ENTRY NotifyList,
466 IN PSTRING FullTargetName,
467 IN PUSHORT FileNamePartLength,
472 FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC * NotifySync);
475 FsRtlNotifyVolumeEvent(IN PFILE_OBJECT FileObject,
479 FsRtlOplockFsctrl(IN POPLOCK Oplock,
484 FsRtlOplockIsFastIoPossible(IN POPLOCK Oplock);
488 FsRtlPrepareMdlWrite (
489 IN PFILE_OBJECT FileObject,
490 IN PLARGE_INTEGER FileOffset,
494 OUT PIO_STATUS_BLOCK IoStatus
498 FsRtlPrepareMdlWriteDev (
499 IN PFILE_OBJECT FileObject,
500 IN PLARGE_INTEGER FileOffset,
504 OUT PIO_STATUS_BLOCK IoStatus,
505 IN PDEVICE_OBJECT DeviceObject
509 FsRtlNormalizeNtstatus(IN NTSTATUS NtStatusToNormalize,
510 IN NTSTATUS NormalizedNtStatus);
513 FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb);
516 FsRtlNumberOfRunsInMcb (IN PMCB Mcb);
520 FsRtlPostPagingFileStackOverflow (
527 FsRtlPostStackOverflow (
535 IN PFILE_LOCK FileLock,
536 IN PFILE_OBJECT FileObject,
537 IN PLARGE_INTEGER FileOffset,
538 IN PLARGE_INTEGER Length,
539 IN PEPROCESS Process,
541 IN BOOLEAN FailImmediately,
542 IN BOOLEAN ExclusiveLock,
543 OUT PIO_STATUS_BLOCK IoStatus,
544 IN PIRP Irp OPTIONAL,
546 IN BOOLEAN AlreadySynchronized
550 FsRtlProcessFileLock (
551 IN PFILE_LOCK FileLock,
553 IN PVOID Context OPTIONAL
557 FsRtlRegisterUncProvider(IN OUT PHANDLE Handle,
558 IN PUNICODE_STRING RedirectorDeviceName,
559 IN BOOLEAN MailslotsSupported);
562 FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb,
564 IN LONGLONG SectorCount);
567 FsRtlRemoveMcbEntry (IN PMCB Mcb,
569 IN ULONG SectorCount);
572 FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb,
585 FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb,
589 FsRtlTruncateMcb (IN PMCB Mcb,
593 FsRtlUninitializeFileLock (IN PFILE_LOCK FileLock);
596 FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb);
599 FsRtlUninitializeMcb (IN PMCB Mcb);
602 FsRtlUninitializeOplock(IN POPLOCK Oplock);
604 #endif /* __INCLUDE_DDK_FSFUNCS_H */