1 #ifndef __INCLUDE_DDK_FSFUNCS_H
2 #define __INCLUDE_DDK_FSFUNCS_H
3 /* $Id: fsfuncs.h,v 1.17 2002/11/07 02:44:49 robd Exp $ */
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
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
);
165 FsRtlDoesDbcsContainWildCards (
170 FsRtlDoesNameContainWildCards (
171 IN PUNICODE_STRING Name
175 FsRtlFastCheckLockForRead (
176 IN PFILE_LOCK FileLock
,
177 IN PLARGE_INTEGER FileOffset
,
178 IN PLARGE_INTEGER Length
,
180 IN PFILE_OBJECT FileObject
,
185 FsRtlFastCheckLockForWrite (
186 IN PFILE_LOCK FileLock
,
187 IN PLARGE_INTEGER FileOffset
,
188 IN PLARGE_INTEGER Length
,
190 IN PFILE_OBJECT FileObject
,
196 IN PFILE_LOCK FileLock
,
197 IN PFILE_OBJECT FileObject
,
198 IN PEPROCESS Process
,
199 IN PVOID Context OPTIONAL
203 FsRtlFastUnlockAllByKey (
204 IN PFILE_LOCK FileLock
,
205 IN PFILE_OBJECT FileObject
,
206 IN PEPROCESS Process
,
208 IN PVOID Context OPTIONAL
212 FsRtlFastUnlockSingle (
213 IN PFILE_LOCK FileLock
,
214 IN PFILE_OBJECT FileObject
,
215 IN PLARGE_INTEGER FileOffset
,
216 IN PLARGE_INTEGER Length
,
217 IN PEPROCESS Process
,
219 IN PVOID Context OPTIONAL
,
220 IN BOOLEAN AlreadySynchronized
224 FsRtlFindInTunnelCache (
226 IN ULONGLONG DirectoryKey
,
227 IN PUNICODE_STRING Name
,
228 OUT PUNICODE_STRING ShortName
,
229 OUT PUNICODE_STRING LongName
,
230 IN OUT PULONG DataLength
,
236 IN PFILE_OBJECT FileObject
,
237 IN OUT PLARGE_INTEGER FileSize
241 FsRtlGetNextFileLock (
242 IN PFILE_LOCK FileLock
,
247 FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb
,
251 OUT PLONGLONG SectorCount
);
255 FsRtlGetNextMcbEntry (
262 #define FsRtlEnterFileSystem KeEnterCriticalRegion
263 #define FsRtlExitFileSystem KeLeaveCriticalRegion
266 FsRtlInitializeFileLock (
267 IN PFILE_LOCK FileLock
,
268 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL
,
269 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
273 FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb
,
274 IN POOL_TYPE PoolType
);
284 FsRtlInitializeOplock(IN OUT POPLOCK Oplock
);
288 FsRtlInitializeTunnelCache (
293 FsRtlIsDbcsInExpression (
299 FsRtlIsFatDbcsLegal (
308 FsRtlIsHpfsDbcsLegal (
317 FsRtlIsNameInExpression (
318 IN PUNICODE_STRING Expression
,
319 IN PUNICODE_STRING Name
,
320 IN BOOLEAN IgnoreCase
,
321 IN PWCHAR UpcaseTable OPTIONAL
325 FsRtlIsNtstatusExpected(IN NTSTATUS NtStatus
);
328 FsRtlIsTotalDeviceFailure(IN NTSTATUS NtStatus
);
330 #define FsRtlIsUnicodeCharacterWild(C) ( \
333 FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
337 FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb
,
339 OUT PLONGLONG Lbn OPTIONAL
,
340 OUT PLONGLONG SectorCountFromLbn OPTIONAL
,
341 OUT PLONGLONG StartingLbn OPTIONAL
,
342 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL
,
343 OUT PULONG Index OPTIONAL
);
346 FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb
,
352 FsRtlLookupLastMcbEntry (
359 FsRtlLookupMcbEntry (
369 IN PFILE_OBJECT FileObject
,
370 IN PLARGE_INTEGER FileOffset
,
374 OUT PIO_STATUS_BLOCK IoStatus
378 FsRtlMdlReadComplete (
379 IN PFILE_OBJECT FileObject
,
384 FsRtlMdlReadCompleteDev (
385 IN PFILE_OBJECT FileObject
,
387 IN PDEVICE_OBJECT DeviceObject
392 IN PFILE_OBJECT FileObject
,
393 IN PLARGE_INTEGER FileOffset
,
397 OUT PIO_STATUS_BLOCK IoStatus
,
398 IN PDEVICE_OBJECT DeviceObject
402 FsRtlMdlWriteComplete (
403 IN PFILE_OBJECT FileObject
,
404 IN PLARGE_INTEGER FileOffset
,
409 FsRtlMdlWriteCompleteDev (
410 IN PFILE_OBJECT FileObject
,
411 IN PLARGE_INTEGER FileOffset
,
413 IN PDEVICE_OBJECT DeviceObject
417 FsRtlNotifyChangeDirectory (
418 IN PNOTIFY_SYNC NotifySync
,
420 IN PSTRING FullDirectoryName
,
421 IN PLIST_ENTRY NotifyList
,
422 IN BOOLEAN WatchTree
,
423 IN ULONG CompletionFilter
,
429 IN PNOTIFY_SYNC NotifySync
,
430 IN PLIST_ENTRY NotifyList
,
434 BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS
) (
435 IN PVOID NotifyContext
,
436 IN PVOID TargetContext
,
437 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
441 FsRtlNotifyFullChangeDirectory (
442 IN PNOTIFY_SYNC NotifySync
,
443 IN PLIST_ENTRY NotifyList
,
445 IN PSTRING FullDirectoryName
,
446 IN BOOLEAN WatchTree
,
447 IN BOOLEAN IgnoreBuffer
,
448 IN ULONG CompletionFilter
,
450 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL
,
451 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
455 FsRtlNotifyFullReportChange (
456 IN PNOTIFY_SYNC NotifySync
,
457 IN PLIST_ENTRY NotifyList
,
458 IN PSTRING FullTargetName
,
459 IN USHORT TargetNameOffset
,
460 IN PSTRING StreamName OPTIONAL
,
461 IN PSTRING NormalizedParentName OPTIONAL
,
462 IN ULONG FilterMatch
,
464 IN PVOID TargetContext
468 FsRtlNotifyUninitializeSync (
469 IN OUT PNOTIFY_SYNC
* NotifySync
473 FsRtlNotifyReportChange (
474 IN PNOTIFY_SYNC NotifySync
,
475 IN PLIST_ENTRY NotifyList
,
476 IN PSTRING FullTargetName
,
477 IN PUSHORT FileNamePartLength
,
482 FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC
*NotifySync
);
485 FsRtlNotifyVolumeEvent(IN PFILE_OBJECT FileObject
,
489 FsRtlOplockFsctrl(IN POPLOCK Oplock
,
494 FsRtlOplockIsFastIoPossible(IN POPLOCK Oplock
);
498 FsRtlPrepareMdlWrite (
499 IN PFILE_OBJECT FileObject
,
500 IN PLARGE_INTEGER FileOffset
,
504 OUT PIO_STATUS_BLOCK IoStatus
508 FsRtlPrepareMdlWriteDev (
509 IN PFILE_OBJECT FileObject
,
510 IN PLARGE_INTEGER FileOffset
,
514 OUT PIO_STATUS_BLOCK IoStatus
,
515 IN PDEVICE_OBJECT DeviceObject
519 FsRtlNormalizeNtstatus(IN NTSTATUS NtStatusToNormalize
,
520 IN NTSTATUS NormalizedNtStatus
);
523 FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb
);
527 FsRtlNumberOfRunsInMcb (
532 FsRtlPostPagingFileStackOverflow (
539 FsRtlPostStackOverflow (
547 IN PFILE_LOCK FileLock
,
548 IN PFILE_OBJECT FileObject
,
549 IN PLARGE_INTEGER FileOffset
,
550 IN PLARGE_INTEGER Length
,
551 IN PEPROCESS Process
,
553 IN BOOLEAN FailImmediately
,
554 IN BOOLEAN ExclusiveLock
,
555 OUT PIO_STATUS_BLOCK IoStatus
,
556 IN PIRP Irp OPTIONAL
,
558 IN BOOLEAN AlreadySynchronized
562 FsRtlProcessFileLock (
563 IN PFILE_LOCK FileLock
,
565 IN PVOID Context OPTIONAL
569 FsRtlRegisterUncProvider(IN OUT PHANDLE Handle
,
570 IN PUNICODE_STRING RedirectorDeviceName
,
571 IN BOOLEAN MailslotsSupported
);
574 FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb
,
576 IN LONGLONG SectorCount
);
580 FsRtlRemoveMcbEntry (
587 FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb
,
600 FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb
,
611 FsRtlUninitializeFileLock (
612 IN PFILE_LOCK FileLock
616 FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb
);
620 FsRtlUninitializeMcb (
625 FsRtlUninitializeOplock(IN POPLOCK Oplock
);
627 #endif /* __INCLUDE_DDK_FSFUNCS_H */