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);
28 FsRtlAddMcbEntry (IN PMCB Mcb,
31 IN ULONG SectorCount);
34 FsRtlAddToTunnelCache (
36 IN ULONGLONG DirectoryKey,
37 IN PUNICODE_STRING ShortName,
38 IN PUNICODE_STRING LongName,
39 IN BOOLEAN KeyByShortName,
46 IN POOL_TYPE PoolType,
47 IN ULONG NumberOfBytes
51 FsRtlAllocatePoolWithQuota (
52 IN POOL_TYPE PoolType,
53 IN ULONG NumberOfBytes
57 FsRtlAllocatePoolWithQuotaTag (
58 IN POOL_TYPE PoolType,
59 IN ULONG NumberOfBytes,
64 FsRtlAllocatePoolWithTag (
65 IN POOL_TYPE PoolType,
66 IN ULONG NumberOfBytes,
71 FsRtlAllocateResource (
77 IN PUNICODE_STRING Name1,
78 IN PUNICODE_STRING Name2,
79 IN BOOLEAN IgnoreCase,
80 IN PWCHAR UpcaseTable OPTIONAL
85 IN PDEVICE_OBJECT TargetDevice
89 FsRtlCheckLockForReadAccess (
90 IN PFILE_LOCK FileLock,
95 FsRtlCheckLockForWriteAccess (
96 IN PFILE_LOCK FileLock,
101 FsRtlCheckOplock(IN POPLOCK Oplock,
104 IN POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine OPTIONAL,
105 IN POPLOCK_FS_PREPOST_IRP PostIrpRoutine OPTIONAL);
110 IN PFILE_OBJECT FileObject,
111 IN PLARGE_INTEGER FileOffset,
116 OUT PIO_STATUS_BLOCK IoStatus,
117 IN PDEVICE_OBJECT DeviceObject
122 IN PFILE_OBJECT FileObject,
123 IN PLARGE_INTEGER FileOffset,
128 OUT PIO_STATUS_BLOCK IoStatus,
129 IN PDEVICE_OBJECT DeviceObject
133 FsRtlCurrentBatchOplock(IN POPLOCK Oplock);
136 FsRtlDeleteKeyFromTunnelCache(IN PTUNNEL Cache,
137 IN ULONGLONG DirectoryKey);
140 FsRtlDeleteTunnelCache(IN PTUNNEL Cache);
143 FsRtlDeregisterUncProvider(IN HANDLE Handle);
156 IN UNICODE_STRING Path,
157 OUT PUNICODE_STRING FirstName,
158 OUT PUNICODE_STRING RemainingName
162 FsRtlDoesDbcsContainWildCards (
167 FsRtlDoesNameContainWildCards (
168 IN PUNICODE_STRING Name
172 FsRtlFastCheckLockForRead (
173 IN PFILE_LOCK FileLock,
174 IN PLARGE_INTEGER FileOffset,
175 IN PLARGE_INTEGER Length,
177 IN PFILE_OBJECT FileObject,
182 FsRtlFastCheckLockForWrite (
183 IN PFILE_LOCK FileLock,
184 IN PLARGE_INTEGER FileOffset,
185 IN PLARGE_INTEGER Length,
187 IN PFILE_OBJECT FileObject,
193 IN PFILE_LOCK FileLock,
194 IN PFILE_OBJECT FileObject,
195 IN PEPROCESS Process,
196 IN PVOID Context OPTIONAL
200 FsRtlFastUnlockAllByKey (
201 IN PFILE_LOCK FileLock,
202 IN PFILE_OBJECT FileObject,
203 IN PEPROCESS Process,
205 IN PVOID Context OPTIONAL
209 FsRtlFastUnlockSingle (
210 IN PFILE_LOCK FileLock,
211 IN PFILE_OBJECT FileObject,
212 IN PLARGE_INTEGER FileOffset,
213 IN PLARGE_INTEGER Length,
214 IN PEPROCESS Process,
216 IN PVOID Context OPTIONAL,
217 IN BOOLEAN AlreadySynchronized
221 FsRtlFindInTunnelCache (
223 IN ULONGLONG DirectoryKey,
224 IN PUNICODE_STRING Name,
225 OUT PUNICODE_STRING ShortName,
226 OUT PUNICODE_STRING LongName,
227 IN OUT PULONG DataLength,
233 IN PFILE_OBJECT FileObject,
234 IN OUT PLARGE_INTEGER FileSize
238 FsRtlGetNextFileLock (
239 IN PFILE_LOCK FileLock,
244 FsRtlGetNextLargeMcbEntry(IN PLARGE_MCB Mcb,
248 OUT PLONGLONG SectorCount);
251 FsRtlGetNextMcbEntry (IN PMCB Mcb,
255 OUT PULONG SectorCount);
256 #define FsRtlEnterFileSystem KeEnterCriticalRegion
257 #define FsRtlExitFileSystem KeLeaveCriticalRegion
260 FsRtlInitializeFileLock (
261 IN PFILE_LOCK FileLock,
262 IN PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine OPTIONAL,
263 IN PUNLOCK_ROUTINE UnlockRoutine OPTIONAL
267 FsRtlInitializeLargeMcb(IN PLARGE_MCB Mcb,
268 IN POOL_TYPE PoolType);
271 FsRtlInitializeMcb (IN PMCB Mcb,
272 IN POOL_TYPE PoolType);
275 FsRtlInitializeOplock(IN OUT POPLOCK Oplock);
279 FsRtlInitializeTunnelCache (
284 FsRtlIsDbcsInExpression (
290 FsRtlIsFatDbcsLegal (
291 IN ANSI_STRING DbcsName,
292 IN BOOLEAN WildCardsPermissible,
293 IN BOOLEAN PathNamePermissible,
294 IN BOOLEAN LeadingBackslashPermissible
298 FsRtlIsHpfsDbcsLegal (
307 FsRtlIsNameInExpression (
308 IN PUNICODE_STRING Expression,
309 IN PUNICODE_STRING Name,
310 IN BOOLEAN IgnoreCase,
311 IN PWCHAR UpcaseTable OPTIONAL
315 FsRtlIsNtstatusExpected(IN NTSTATUS NtStatus);
318 FsRtlIsTotalDeviceFailure(IN NTSTATUS NtStatus);
320 /* Set as flags in FsRtlLegalAnsiCharacterArray character-array */
321 #define FSRTL_FAT_LEGAL 0x01
322 #define FSRTL_HPFS_LEGAL 0x02
323 #define FSRTL_NTFS_LEGAL 0x04
324 #define FSRTL_WILD_CHARACTER 0x08
325 #define FSRTL_OLE_LEGAL 0x10
326 #define FSRTL_NTFS_STREAM_LEGAL (FSRTL_NTFS_LEGAL | FSRTL_OLE_LEGAL)
328 #define FsRtlIsUnicodeCharacterWild(C) ( \
331 FlagOn((*FsRtlLegalAnsiCharacterArray)[(C)], FSRTL_WILD_CHARACTER )) \
335 FsRtlLookupLargeMcbEntry(IN PLARGE_MCB Mcb,
337 OUT PLONGLONG Lbn OPTIONAL,
338 OUT PLONGLONG SectorCountFromLbn OPTIONAL,
339 OUT PLONGLONG StartingLbn OPTIONAL,
340 OUT PLONGLONG SectorCountFromStartingLbn OPTIONAL,
341 OUT PULONG Index OPTIONAL);
344 FsRtlLookupLastLargeMcbEntry(IN PLARGE_MCB Mcb,
349 FsRtlLookupLastMcbEntry (IN PMCB Mcb,
353 FsRtlLookupMcbEntry (IN PMCB Mcb,
356 OUT PULONG SectorCount OPTIONAL,
362 IN PFILE_OBJECT FileObject,
363 IN PLARGE_INTEGER FileOffset,
367 OUT PIO_STATUS_BLOCK IoStatus
371 FsRtlMdlReadComplete (
372 IN PFILE_OBJECT FileObject,
377 FsRtlMdlReadCompleteDev (
378 IN PFILE_OBJECT FileObject,
380 IN PDEVICE_OBJECT DeviceObject
385 IN PFILE_OBJECT FileObject,
386 IN PLARGE_INTEGER FileOffset,
390 OUT PIO_STATUS_BLOCK IoStatus,
391 IN PDEVICE_OBJECT DeviceObject
395 FsRtlMdlWriteComplete (
396 IN PFILE_OBJECT FileObject,
397 IN PLARGE_INTEGER FileOffset,
402 FsRtlMdlWriteCompleteDev (
403 IN PFILE_OBJECT FileObject,
404 IN PLARGE_INTEGER FileOffset,
406 IN PDEVICE_OBJECT DeviceObject
410 FsRtlNotifyChangeDirectory (
411 IN PNOTIFY_SYNC NotifySync,
413 IN PSTRING FullDirectoryName,
414 IN PLIST_ENTRY NotifyList,
415 IN BOOLEAN WatchTree,
416 IN ULONG CompletionFilter,
422 IN PNOTIFY_SYNC NotifySync,
423 IN PLIST_ENTRY NotifyList,
427 BOOLEAN (*PCHECK_FOR_TRAVERSE_ACCESS) (
428 IN PVOID NotifyContext,
429 IN PVOID TargetContext,
430 IN PSECURITY_SUBJECT_CONTEXT SubjectContext
434 FsRtlNotifyFullChangeDirectory (
435 IN PNOTIFY_SYNC NotifySync,
436 IN PLIST_ENTRY NotifyList,
438 IN PSTRING FullDirectoryName,
439 IN BOOLEAN WatchTree,
440 IN BOOLEAN IgnoreBuffer,
441 IN ULONG CompletionFilter,
443 IN PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback OPTIONAL,
444 IN PSECURITY_SUBJECT_CONTEXT SubjectContext OPTIONAL
448 FsRtlNotifyFullReportChange (
449 IN PNOTIFY_SYNC NotifySync,
450 IN PLIST_ENTRY NotifyList,
451 IN PSTRING FullTargetName,
452 IN USHORT TargetNameOffset,
453 IN PSTRING StreamName OPTIONAL,
454 IN PSTRING NormalizedParentName OPTIONAL,
455 IN ULONG FilterMatch,
457 IN PVOID TargetContext
461 FsRtlNotifyUninitializeSync (
462 IN OUT PNOTIFY_SYNC * NotifySync
466 FsRtlNotifyReportChange (
467 IN PNOTIFY_SYNC NotifySync,
468 IN PLIST_ENTRY NotifyList,
469 IN PSTRING FullTargetName,
470 IN PUSHORT FileNamePartLength,
475 FsRtlNotifyInitializeSync(IN OUT PNOTIFY_SYNC *NotifySync);
478 FsRtlNotifyVolumeEvent(IN PFILE_OBJECT FileObject,
482 FsRtlOplockFsctrl(IN POPLOCK Oplock,
487 FsRtlOplockIsFastIoPossible(IN POPLOCK Oplock);
491 FsRtlPrepareMdlWrite (
492 IN PFILE_OBJECT FileObject,
493 IN PLARGE_INTEGER FileOffset,
497 OUT PIO_STATUS_BLOCK IoStatus
501 FsRtlPrepareMdlWriteDev (
502 IN PFILE_OBJECT FileObject,
503 IN PLARGE_INTEGER FileOffset,
507 OUT PIO_STATUS_BLOCK IoStatus,
508 IN PDEVICE_OBJECT DeviceObject
512 FsRtlNormalizeNtstatus(IN NTSTATUS NtStatusToNormalize,
513 IN NTSTATUS NormalizedNtStatus);
516 FsRtlNumberOfRunsInLargeMcb(IN PLARGE_MCB Mcb);
519 FsRtlNumberOfRunsInMcb (IN PMCB Mcb);
523 FsRtlPostPagingFileStackOverflow (
530 FsRtlPostStackOverflow (
538 IN PFILE_LOCK FileLock,
539 IN PFILE_OBJECT FileObject,
540 IN PLARGE_INTEGER FileOffset,
541 IN PLARGE_INTEGER Length,
542 IN PEPROCESS Process,
544 IN BOOLEAN FailImmediately,
545 IN BOOLEAN ExclusiveLock,
546 OUT PIO_STATUS_BLOCK IoStatus,
547 IN PIRP Irp OPTIONAL,
549 IN BOOLEAN AlreadySynchronized
553 FsRtlProcessFileLock (
554 IN PFILE_LOCK FileLock,
556 IN PVOID Context OPTIONAL
560 FsRtlRegisterUncProvider(IN OUT PHANDLE Handle,
561 IN PUNICODE_STRING RedirectorDeviceName,
562 IN BOOLEAN MailslotsSupported);
565 FsRtlRemoveLargeMcbEntry(IN PLARGE_MCB Mcb,
567 IN LONGLONG SectorCount);
570 FsRtlRemoveMcbEntry (IN PMCB Mcb,
572 IN ULONG SectorCount);
575 FsRtlSplitLargeMcb(IN PLARGE_MCB Mcb,
588 FsRtlTruncateLargeMcb(IN PLARGE_MCB Mcb,
592 FsRtlTruncateMcb (IN PMCB Mcb,
596 FsRtlUninitializeFileLock (IN PFILE_LOCK FileLock);
599 FsRtlUninitializeLargeMcb(IN PLARGE_MCB Mcb);
602 FsRtlUninitializeMcb (IN PMCB Mcb);
605 FsRtlUninitializeOplock(IN POPLOCK Oplock);
607 #endif /* __INCLUDE_DDK_FSFUNCS_H */