1 #ifndef __INCLUDE_DDK_FSFUNCS_H
2 #define __INCLUDE_DDK_FSFUNCS_H
4 #define FlagOn(x,f) ((x) & (f))
14 FsRtlAllocateFileLock (
15 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
16 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
19 #define FsRtlAreThereCurrentFileLocks(FL) (((FL)->FastIoIsQuestionable))
22 FsRtlAddLargeMcbEntry(IN PLARGE_MCB Mcb,
25 IN LONGLONG SectorCount);
36 FsRtlAddToTunnelCache (
38 IN ULONGLONG DirectoryKey,
39 IN PUNICODE_STRING ShortName,
40 IN PUNICODE_STRING LongName,
41 IN BOOLEAN KeyByShortName,
48 IN POOL_TYPE PoolType,
49 IN ULONG NumberOfBytes
53 FsRtlAllocatePoolWithQuota (
54 IN POOL_TYPE PoolType,
55 IN ULONG NumberOfBytes
59 FsRtlAllocatePoolWithQuotaTag (
60 IN POOL_TYPE PoolType,
61 IN ULONG NumberOfBytes,
66 FsRtlAllocatePoolWithTag (
67 IN POOL_TYPE PoolType,
68 IN ULONG NumberOfBytes,
73 FsRtlAllocateResource (
79 IN PUNICODE_STRING Name1,
80 IN PUNICODE_STRING Name2,
81 IN BOOLEAN IgnoreCase,
82 IN PWCHAR UpcaseTable OPTIONAL
87 IN PDEVICE_OBJECT TargetDevice
91 FsRtlCheckLockForReadAccess (
92 IN PFILE_LOCK FileLock,
97 FsRtlCheckLockForWriteAccess (
98 IN PFILE_LOCK FileLock,
103 FsRtlCheckOplock(IN POPLOCK Oplock,
106 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
107 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
112 IN PFILE_OBJECT FileObject,
113 IN PLARGE_INTEGER FileOffset,
118 OUT PIO_STATUS_BLOCK IoStatus,
119 IN PDEVICE_OBJECT DeviceObject
124 IN PFILE_OBJECT FileObject,
125 IN PLARGE_INTEGER FileOffset,
130 OUT PIO_STATUS_BLOCK IoStatus,
131 IN PDEVICE_OBJECT DeviceObject
135 FsRtlCurrentBatchOplock(IN POPLOCK Oplock);
138 FsRtlDeleteKeyFromTunnelCache(IN PTUNNEL Cache,
139 IN ULONGLONG DirectoryKey);
142 FsRtlDeleteTunnelCache(IN PTUNNEL Cache);
145 FsRtlDeregisterUncProvider(IN HANDLE Handle);
158 IN UNICODE_STRING Path,
159 OUT PUNICODE_STRING FirstName,
160 OUT PUNICODE_STRING RemainingName
164 FsRtlDoesDbcsContainWildCards (
169 FsRtlDoesNameContainWildCards (
170 IN PUNICODE_STRING Name
174 FsRtlFastCheckLockForRead (
175 IN PFILE_LOCK FileLock,
176 IN PLARGE_INTEGER FileOffset,
177 IN PLARGE_INTEGER Length,
179 IN PFILE_OBJECT FileObject,
184 FsRtlFastCheckLockForWrite (
185 IN PFILE_LOCK FileLock,
186 IN PLARGE_INTEGER FileOffset,
187 IN PLARGE_INTEGER Length,
189 IN PFILE_OBJECT FileObject,
195 IN PFILE_LOCK FileLock,
196 IN PFILE_OBJECT FileObject,
197 IN PEPROCESS Process,
198 IN PVOID Context OPTIONAL
202 FsRtlFastUnlockAllByKey (
203 IN PFILE_LOCK FileLock,
204 IN PFILE_OBJECT FileObject,
205 IN PEPROCESS Process,
207 IN PVOID Context OPTIONAL
211 FsRtlFastUnlockSingle (
212 IN PFILE_LOCK FileLock,
213 IN PFILE_OBJECT FileObject,
214 IN PLARGE_INTEGER FileOffset,
215 IN PLARGE_INTEGER Length,
216 IN PEPROCESS Process,
218 IN PVOID Context OPTIONAL,
219 IN BOOLEAN AlreadySynchronized
223 FsRtlFindInTunnelCache (
225 IN ULONGLONG DirectoryKey,
226 IN PUNICODE_STRING Name,
227 OUT PUNICODE_STRING ShortName,
228 OUT PUNICODE_STRING LongName,
229 IN OUT PULONG DataLength,
235 IN PFILE_OBJECT FileObject,
236 IN OUT PLARGE_INTEGER FileSize
240 FsRtlGetNextFileLock (
241 IN PFILE_LOCK FileLock,
246 FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb,
250 OUT PLONGLONG SectorCount);
254 FsRtlGetNextMcbEntry (
261 #define FsRtlEnterFileSystem KeEnterCriticalRegion
262 #define FsRtlExitFileSystem KeLeaveCriticalRegion
265 FsRtlInitializeFileLock (
266 IN PFILE_LOCK FileLock,
267 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
268 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
272 FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb,
273 IN POOL_TYPE PoolType);
283 FsRtlInitializeOplock(IN OUT POPLOCK Oplock);
287 FsRtlInitializeTunnelCache (
292 FsRtlIsDbcsInExpression (
298 FsRtlIsFatDbcsLegal (
299 IN ANSI_STRING DbcsName,
300 IN BOOLEAN WildCardsPermissible,
301 IN BOOLEAN PathNamePermissible,
302 IN BOOLEAN LeadingBackslashPermissible
306 FsRtlIsHpfsDbcsLegal (
315 FsRtlIsNameInExpression (
316 IN PUNICODE_STRING Expression,
317 IN PUNICODE_STRING Name,
318 IN BOOLEAN IgnoreCase,
319 IN PWCHAR UpcaseTable OPTIONAL
323 FsRtlIsNtstatusExpected(IN NTSTATUS NtStatus);
326 FsRtlIsTotalDeviceFailure(IN NTSTATUS NtStatus);
328 /* Set as flags in FsRtlLegalAnsiCharacterArray character-array */
329 #define FSRTL_FAT_LEGAL 0x01
330 #define FSRTL_HPFS_LEGAL 0x02
331 #define FSRTL_NTFS_LEGAL 0x04
332 #define FSRTL_WILD_CHARACTER 0x08
333 #define FSRTL_OLE_LEGAL 0x10
334 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
336 #define FsRtlIsUnicodeCharacterWild(C) ( \
339 FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
343 FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb,
345 OUT PLONGLONG Lbn OPTIONAL,
346 OUT PLONGLONG SectorCountFromLbn OPTIONAL,
347 OUT PLONGLONG StartingLbn OPTIONAL,
348 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
349 OUT PULONG Index OPTIONAL);
352 FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb,
358 FsRtlLookupLastMcbEntry (
365 FsRtlLookupMcbEntry (
375 IN PFILE_OBJECT FileObject,
376 IN PLARGE_INTEGER FileOffset,
380 OUT PIO_STATUS_BLOCK IoStatus
384 FsRtlMdlReadComplete (
385 IN PFILE_OBJECT FileObject,
390 FsRtlMdlReadCompleteDev (
391 IN PFILE_OBJECT FileObject,
393 IN PDEVICE_OBJECT DeviceObject
398 IN PFILE_OBJECT FileObject,
399 IN PLARGE_INTEGER FileOffset,
403 OUT PIO_STATUS_BLOCK IoStatus,
404 IN PDEVICE_OBJECT DeviceObject
408 FsRtlMdlWriteComplete (
409 IN PFILE_OBJECT FileObject,
410 IN PLARGE_INTEGER FileOffset,
415 FsRtlMdlWriteCompleteDev (
416 IN PFILE_OBJECT FileObject,
417 IN PLARGE_INTEGER FileOffset,
419 IN PDEVICE_OBJECT DeviceObject
423 FsRtlNotifyChangeDirectory (
424 IN PNOTIFY_SYNC NotifySync,
426 IN PSTRING FullDirectoryName,
427 IN PLIST_ENTRY NotifyList,
428 IN BOOLEAN WatchTree,
429 IN ULONG CompletionFilter,
435 IN PNOTIFY_SYNC NotifySync,
436 IN PLIST_ENTRY NotifyList,
440 BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) (
441 IN PVOID NotifyContext,
442 IN PVOID TargetContext,
443 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
447 FsRtlNotifyFullChangeDirectory (
448 IN PNOTIFY_SYNC NotifySync,
449 IN PLIST_ENTRY NotifyList,
451 IN PSTRING FullDirectoryName,
452 IN BOOLEAN WatchTree,
453 IN BOOLEAN IgnoreBuffer,
454 IN ULONG CompletionFilter,
456 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
457 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
461 FsRtlNotifyFullReportChange (
462 IN PNOTIFY_SYNC NotifySync,
463 IN PLIST_ENTRY NotifyList,
464 IN PSTRING FullTargetName,
465 IN USHORT TargetNameOffset,
466 IN PSTRING StreamName OPTIONAL,
467 IN PSTRING NormalizedParentName OPTIONAL,
468 IN ULONG FilterMatch,
470 IN PVOID TargetContext
474 FsRtlNotifyUninitializeSync (
475 IN OUT PNOTIFY_SYNC * NotifySync
479 FsRtlNotifyReportChange (
480 IN PNOTIFY_SYNC NotifySync,
481 IN PLIST_ENTRY NotifyList,
482 IN PSTRING FullTargetName,
483 IN PUSHORT FileNamePartLength,
488 FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC *NotifySync);
491 FsRtlNotifyVolumeEvent(IN PFILE_OBJECT FileObject,
495 FsRtlOplockFsctrl(IN POPLOCK Oplock,
500 FsRtlOplockIsFastIoPossible(IN POPLOCK Oplock);
504 FsRtlPrepareMdlWrite (
505 IN PFILE_OBJECT FileObject,
506 IN PLARGE_INTEGER FileOffset,
510 OUT PIO_STATUS_BLOCK IoStatus
514 FsRtlPrepareMdlWriteDev (
515 IN PFILE_OBJECT FileObject,
516 IN PLARGE_INTEGER FileOffset,
520 OUT PIO_STATUS_BLOCK IoStatus,
521 IN PDEVICE_OBJECT DeviceObject
525 FsRtlNormalizeNtstatus(IN NTSTATUS NtStatusToNormalize,
526 IN NTSTATUS NormalizedNtStatus);
529 FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb);
533 FsRtlNumberOfRunsInMcb (
538 FsRtlPostPagingFileStackOverflow (
545 FsRtlPostStackOverflow (
553 IN PFILE_LOCK FileLock,
554 IN PFILE_OBJECT FileObject,
555 IN PLARGE_INTEGER FileOffset,
556 IN PLARGE_INTEGER Length,
557 IN PEPROCESS Process,
559 IN BOOLEAN FailImmediately,
560 IN BOOLEAN ExclusiveLock,
561 OUT PIO_STATUS_BLOCK IoStatus,
562 IN PIRP Irp OPTIONAL,
564 IN BOOLEAN AlreadySynchronized
568 FsRtlProcessFileLock (
569 IN PFILE_LOCK FileLock,
571 IN PVOID Context OPTIONAL
575 FsRtlRegisterUncProvider(IN OUT PHANDLE Handle,
576 IN PUNICODE_STRING RedirectorDeviceName,
577 IN BOOLEAN MailslotsSupported);
580 FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb,
582 IN LONGLONG SectorCount);
586 FsRtlRemoveMcbEntry (
593 FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb,
606 FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb,
617 FsRtlUninitializeFileLock (
618 IN PFILE_LOCK FileLock
622 FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb);
626 FsRtlUninitializeMcb (
631 FsRtlUninitializeOplock(IN POPLOCK Oplock);
633 #endif /* __INCLUDE_DDK_FSFUNCS_H */