mirror of
https://github.com/reactos/reactos.git
synced 2024-10-01 23:14:53 +00:00
688875e411
The main motivation to switch to that newer driver is, that our old one simply can not read all isos. Especially complex ones made trouble and were only shown as empty in explorer. It is still possible to build and use the old driver when needed, only thing that needs to be done for that is to revert 0.4.8-dev-164-gec6b3ecbe4
Porting back the state up to 0.4.8-release-100-g8f947b5 implies: Fixing the following JIRA-IDs (or avoid introducing them): CORE-18029 "Mute noisy DPRINT 'SectionObject has ImageSection'" CORE-17405 "Fix a macro-copy-paste and shrink the binary size" CORE-15659 "Unable to build the gcc Release version in Windows using RosBE 2.1.6 (module cdfs fails)" CORE-14315 "CDFS_NEW assertion during first stage setup due to new CcPerformReadAhead" CORE-14128 "Avast! Free Antivirus 7.0 hangs the system when trying to detect a newly created virus" CORE-14067 "CDFS_NEW assertions and exceptions" CORE-14003 "Shutting down LiveCD asserts since introduction of MS PL CDFS_NEW" CORE-13184 "Restore ability to install from disk-image" by picking the following commits: 0.4.8-release-100-g8f947b5322
[NTOSKRNL] Mute noisy DPRINT 'SectionObject has ImageSection' CORE-18029 0.4.8-release-80-geb1ea19588
[CDFS_NEW] == 0.4.15-dev-1456-g889eab7
CORE-17405 0.4.8-release-62-g8c07aad4a8
[CDFS_NEW/XDK] == 0.4.11-dev-39-ga2f9762
+ 0.4.11-dev-40-g6d7ec8c
CORE-14067 0.4.8-release-3-g5d976d04e8
[CDFS_NEW] == 0.4.12-dev-431-gbccad87f3c
+ 0.4.12-dev-432-g3463b2db9f
CORE-15659 0.4.8-RC-3-g51f9494d48
[CDFS_NEW] superseded later by the proper fix 0.4.8-release-62-g8c07aad4a8
CORE-14067 0.4.8-dev-1069-ga5e89014dc
[CDFS_NEW] CORE-14315 0.4.8-dev-475-ga59d4674de
[NTOSKRNL] io/iomgr/device.c (forgotten assert) CORE-14128 0.4.8-dev-221-g9d67a24799
[CDFS_NEW] 0.4.8-dev-220-g67a7e45e35
[CDFS_NEW/DOC] 0.4.8-dev-219-g6a3bbf24e0
[CDFS_NEW] 0.4.8-dev-218-gec26cde4a1
[CDFS_NEW] 0.4.8-dev-217-gbc2378a356
[CDFS_NEW] 0.4.8-dev-216-g5429771b99
[CDFS_NEW] 0.4.8-dev-215-gfd34548263
[CDFS_NEW] Sync with MS-PL driver 0.4.8-dev-164-gec6b3ecbe4
[FILESYSTEMS] switch from CDFS to CDFS_NEW in CMakeLists.txt 0.4.8-dev-160-g2b217e4ecf
[NTOSKRNL] Mute spam CcSetReadAheadGranularity() 0.4.8-dev-159-g64cb138a67
[NTOSKRNL] Mute spam CcPurgeCacheSection() 0.4.8-dev-150-gf723d230a0
[CDFS_NEW] 0.4.8-dev-133-gfaee3753ea
[CDFS_NEW] CORE-14003 0.4.8-dev-132-g1d777ffab5
[NTOSKRNL] iofunc.c CORE-14003 0.4.8-dev-131-gc3d5a3f2bd
[NTOSKRNL] iofunc.c CORE-14003 0.4.8-dev-130-g3b64f7f8fb
[NTOSKRNL] ob/obref.c & co CORE-14003 0.4.8-dev-129-g7eefe70294
[NTOSKRNL] io/iomgr.c & co CORE-14003 0.4.8-dev-127-g5f255827d3
[CDFS_NEW] 0.4.8-dev-126-g1bef48796e
[NTOSKRNL] just a comment, superseded later 0.4.8-dev-125-gcbf0430b56
[CDFS_NEW] 0.4.8-dev-123-gf88fe43abd
[NTOSKRNL] io/iomgr/device.c (forbidden DPRINT) 0.4.8-dev-122-g6c73385625
[CDFS_NEW] CORE-13184 0.4.8-dev-97-g94298313c0
[CDFS_NEW] 0.4.8-dev-95-ge88eeb21af
[CDFS_NEW/NTOSKRNL] CcWaitForCurrentLazyWriterActivity() stub return Success 0.4.8-dev-94-g03d5be6437
[CDFS_NEW] 0.4.8-dev-93-gfa1c60db50
[CDFS_NEW] 0.4.8-dev-92-g8b2fd60829
[CDFS_NEW] 0.4.8-dev-91-ge4da7ecc50
[CDFS_NEW] 0.4.8-dev-90-g7b19676e2b
[CDFS_NEW] 0.4.8-dev-89-g3d4b8783fd
[CDFS_NEW] 0.4.8-dev-88-g818025ecc8
[CDFS_NEW] 0.4.8-dev-87-g2639dd6736
[CDFS_NEW] 0.4.8-dev-86-g755bdb5d0b
[CDFS_NEW] 0.4.8-dev-85-g3cbcb1bade
[CDFS_NEW] and mute spam in opcode INSTEAD of picking: 0.4.8-dev-165-g2284a457a3
[NTOSKRNL] oplock.c Fixup 0.4.8-dev-163-gd3d5853956
[NTOSKRNL] oplock.c Implement oplock-support 0.4.12-dev-232-gf488102c86
[CDFS] was also left out for now I am aware, that the backport introduces white-space-glitches within CDFS_NEW. I decided to live with them in favor of better sync to master and newer releases.
1716 lines
39 KiB
C
1716 lines
39 KiB
C
$if (_NTIFS_)
|
|
/* FSRTL Functions */
|
|
|
|
#define FsRtlEnterFileSystem KeEnterCriticalRegion
|
|
#define FsRtlExitFileSystem KeLeaveCriticalRegion
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_WIN2K)
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlCopyRead(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ ULONG Length,
|
|
_In_ BOOLEAN Wait,
|
|
_In_ ULONG LockKey,
|
|
_Out_writes_bytes_(Length) PVOID Buffer,
|
|
_Out_ PIO_STATUS_BLOCK IoStatus,
|
|
_In_ PDEVICE_OBJECT DeviceObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlCopyWrite(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ ULONG Length,
|
|
_In_ BOOLEAN Wait,
|
|
_In_ ULONG LockKey,
|
|
_In_reads_bytes_(Length) PVOID Buffer,
|
|
_Out_ PIO_STATUS_BLOCK IoStatus,
|
|
_In_ PDEVICE_OBJECT DeviceObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlMdlReadDev(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ ULONG Length,
|
|
_In_ ULONG LockKey,
|
|
_Outptr_ PMDL *MdlChain,
|
|
_Out_ PIO_STATUS_BLOCK IoStatus,
|
|
_In_opt_ PDEVICE_OBJECT DeviceObject);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlMdlReadCompleteDev(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PMDL MdlChain,
|
|
_In_opt_ PDEVICE_OBJECT DeviceObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlPrepareMdlWriteDev(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ ULONG Length,
|
|
_In_ ULONG LockKey,
|
|
_Outptr_ PMDL *MdlChain,
|
|
_Out_ PIO_STATUS_BLOCK IoStatus,
|
|
_In_ PDEVICE_OBJECT DeviceObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlMdlWriteCompleteDev(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ PMDL MdlChain,
|
|
_In_opt_ PDEVICE_OBJECT DeviceObject);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlAcquireFileExclusive(
|
|
_In_ PFILE_OBJECT FileObject);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlReleaseFile(
|
|
_In_ PFILE_OBJECT FileObject);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlGetFileSize(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_Out_ PLARGE_INTEGER FileSize);
|
|
|
|
_Must_inspect_result_
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlIsTotalDeviceFailure(
|
|
_In_ NTSTATUS Status);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
PFILE_LOCK
|
|
NTAPI
|
|
FsRtlAllocateFileLock(
|
|
_In_opt_ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine,
|
|
_In_opt_ PUNLOCK_ROUTINE UnlockRoutine);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlFreeFileLock(
|
|
_In_ PFILE_LOCK FileLock);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlInitializeFileLock(
|
|
_Out_ PFILE_LOCK FileLock,
|
|
_In_opt_ PCOMPLETE_LOCK_IRP_ROUTINE CompleteLockIrpRoutine,
|
|
_In_opt_ PUNLOCK_ROUTINE UnlockRoutine);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlUninitializeFileLock(
|
|
_Inout_ PFILE_LOCK FileLock);
|
|
|
|
/*
|
|
FsRtlProcessFileLock:
|
|
|
|
ret:
|
|
-STATUS_INVALID_DEVICE_REQUEST
|
|
-STATUS_RANGE_NOT_LOCKED from unlock routines.
|
|
-STATUS_PENDING, STATUS_LOCK_NOT_GRANTED from FsRtlPrivateLock
|
|
(redirected IoStatus->Status).
|
|
|
|
Internals:
|
|
-switch ( Irp->CurrentStackLocation->MinorFunction )
|
|
lock: return FsRtlPrivateLock;
|
|
unlocksingle: return FsRtlFastUnlockSingle;
|
|
unlockall: return FsRtlFastUnlockAll;
|
|
unlockallbykey: return FsRtlFastUnlockAllByKey;
|
|
default: IofCompleteRequest with STATUS_INVALID_DEVICE_REQUEST;
|
|
return STATUS_INVALID_DEVICE_REQUEST;
|
|
|
|
-'AllwaysZero' is passed thru as 'AllwaysZero' to lock / unlock routines.
|
|
-'Irp' is passet thru as 'Irp' to FsRtlPrivateLock.
|
|
*/
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlProcessFileLock(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PIRP Irp,
|
|
_In_opt_ PVOID Context);
|
|
|
|
/*
|
|
FsRtlCheckLockForReadAccess:
|
|
|
|
All this really does is pick out the lock parameters from the irp (io stack
|
|
location?), get IoGetRequestorProcess, and pass values on to
|
|
FsRtlFastCheckLockForRead.
|
|
*/
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlCheckLockForReadAccess(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PIRP Irp);
|
|
|
|
/*
|
|
FsRtlCheckLockForWriteAccess:
|
|
|
|
All this really does is pick out the lock parameters from the irp (io stack
|
|
location?), get IoGetRequestorProcess, and pass values on to
|
|
FsRtlFastCheckLockForWrite.
|
|
*/
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlCheckLockForWriteAccess(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PIRP Irp);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlFastCheckLockForRead(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ PLARGE_INTEGER Length,
|
|
_In_ ULONG Key,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PVOID Process);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlFastCheckLockForWrite(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ PLARGE_INTEGER Length,
|
|
_In_ ULONG Key,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PVOID Process);
|
|
|
|
/*
|
|
FsRtlGetNextFileLock:
|
|
|
|
ret: NULL if no more locks
|
|
|
|
Internals:
|
|
FsRtlGetNextFileLock uses FileLock->LastReturnedLockInfo and
|
|
FileLock->LastReturnedLock as storage.
|
|
LastReturnedLock is a pointer to the 'raw' lock inkl. double linked
|
|
list, and FsRtlGetNextFileLock needs this to get next lock on subsequent
|
|
calls with Restart = FALSE.
|
|
*/
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
PFILE_LOCK_INFO
|
|
NTAPI
|
|
FsRtlGetNextFileLock(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ BOOLEAN Restart);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlFastUnlockSingle(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ PLARGE_INTEGER Length,
|
|
_In_ PEPROCESS Process,
|
|
_In_ ULONG Key,
|
|
_In_opt_ PVOID Context,
|
|
_In_ BOOLEAN AlreadySynchronized);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlFastUnlockAll(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PEPROCESS Process,
|
|
_In_opt_ PVOID Context);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlFastUnlockAllByKey(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PEPROCESS Process,
|
|
_In_ ULONG Key,
|
|
_In_opt_ PVOID Context);
|
|
|
|
/*
|
|
FsRtlPrivateLock:
|
|
|
|
ret: IoStatus->Status: STATUS_PENDING, STATUS_LOCK_NOT_GRANTED
|
|
|
|
Internals:
|
|
-Calls IoCompleteRequest if Irp
|
|
-Uses exception handling / ExRaiseStatus with STATUS_INSUFFICIENT_RESOURCES
|
|
*/
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
__drv_preferredFunction(FsRtlFastLock, "Obsolete")
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlPrivateLock(
|
|
_In_ PFILE_LOCK FileLock,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PLARGE_INTEGER FileOffset,
|
|
_In_ PLARGE_INTEGER Length,
|
|
_In_ PEPROCESS Process,
|
|
_In_ ULONG Key,
|
|
_In_ BOOLEAN FailImmediately,
|
|
_In_ BOOLEAN ExclusiveLock,
|
|
_Out_ PIO_STATUS_BLOCK IoStatus,
|
|
_In_opt_ PIRP Irp,
|
|
_In_opt_ __drv_aliasesMem PVOID Context,
|
|
_In_ BOOLEAN AlreadySynchronized);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlInitializeTunnelCache(
|
|
_In_ PTUNNEL Cache);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlAddToTunnelCache(
|
|
_In_ PTUNNEL Cache,
|
|
_In_ ULONGLONG DirectoryKey,
|
|
_In_ PUNICODE_STRING ShortName,
|
|
_In_ PUNICODE_STRING LongName,
|
|
_In_ BOOLEAN KeyByShortName,
|
|
_In_ ULONG DataLength,
|
|
_In_reads_bytes_(DataLength) PVOID Data);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlFindInTunnelCache(
|
|
_In_ PTUNNEL Cache,
|
|
_In_ ULONGLONG DirectoryKey,
|
|
_In_ PUNICODE_STRING Name,
|
|
_Out_ PUNICODE_STRING ShortName,
|
|
_Out_ PUNICODE_STRING LongName,
|
|
_Inout_ PULONG DataLength,
|
|
_Out_writes_bytes_to_(*DataLength, *DataLength) PVOID Data);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlDeleteKeyFromTunnelCache(
|
|
_In_ PTUNNEL Cache,
|
|
_In_ ULONGLONG DirectoryKey);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlDeleteTunnelCache(
|
|
_In_ PTUNNEL Cache);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlDissectDbcs(
|
|
_In_ ANSI_STRING Name,
|
|
_Out_ PANSI_STRING FirstPart,
|
|
_Out_ PANSI_STRING RemainingPart);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlDoesDbcsContainWildCards(
|
|
_In_ PANSI_STRING Name);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlIsDbcsInExpression(
|
|
_In_ PANSI_STRING Expression,
|
|
_In_ PANSI_STRING Name);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlIsFatDbcsLegal(
|
|
_In_ ANSI_STRING DbcsName,
|
|
_In_ BOOLEAN WildCardsPermissible,
|
|
_In_ BOOLEAN PathNamePermissible,
|
|
_In_ BOOLEAN LeadingBackslashPermissible);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlIsHpfsDbcsLegal(
|
|
_In_ ANSI_STRING DbcsName,
|
|
_In_ BOOLEAN WildCardsPermissible,
|
|
_In_ BOOLEAN PathNamePermissible,
|
|
_In_ BOOLEAN LeadingBackslashPermissible);
|
|
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlNormalizeNtstatus(
|
|
_In_ NTSTATUS Exception,
|
|
_In_ NTSTATUS GenericException);
|
|
|
|
_Must_inspect_result_
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlIsNtstatusExpected(
|
|
_In_ NTSTATUS Ntstatus);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
__drv_preferredFunction(ExAllocateFromNPagedLookasideList, "The FsRtlAllocateResource routine is obsolete, but is exported to support existing driver binaries. Use ExAllocateFromNPagedLookasideList and ExInitializeResourceLite instead.")
|
|
NTKERNELAPI
|
|
PERESOURCE
|
|
NTAPI
|
|
FsRtlAllocateResource(VOID);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlInitializeLargeMcb(
|
|
_Out_ PLARGE_MCB Mcb,
|
|
_In_ POOL_TYPE PoolType);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlUninitializeLargeMcb(
|
|
_Inout_ PLARGE_MCB Mcb);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlResetLargeMcb(
|
|
_Inout_ PLARGE_MCB Mcb,
|
|
_In_ BOOLEAN SelfSynchronized);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlTruncateLargeMcb(
|
|
_Inout_ PLARGE_MCB Mcb,
|
|
_In_ LONGLONG Vbn);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlAddLargeMcbEntry(
|
|
_Inout_ PLARGE_MCB Mcb,
|
|
_In_ LONGLONG Vbn,
|
|
_In_ LONGLONG Lbn,
|
|
_In_ LONGLONG SectorCount);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlRemoveLargeMcbEntry(
|
|
_Inout_ PLARGE_MCB Mcb,
|
|
_In_ LONGLONG Vbn,
|
|
_In_ LONGLONG SectorCount);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlLookupLargeMcbEntry(
|
|
_In_ PLARGE_MCB Mcb,
|
|
_In_ LONGLONG Vbn,
|
|
_Out_opt_ PLONGLONG Lbn,
|
|
_Out_opt_ PLONGLONG SectorCountFromLbn,
|
|
_Out_opt_ PLONGLONG StartingLbn,
|
|
_Out_opt_ PLONGLONG SectorCountFromStartingLbn,
|
|
_Out_opt_ PULONG Index);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlLookupLastLargeMcbEntry(
|
|
_In_ PLARGE_MCB Mcb,
|
|
_Out_ PLONGLONG Vbn,
|
|
_Out_ PLONGLONG Lbn);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlLookupLastLargeMcbEntryAndIndex(
|
|
_In_ PLARGE_MCB OpaqueMcb,
|
|
_Out_ PLONGLONG LargeVbn,
|
|
_Out_ PLONGLONG LargeLbn,
|
|
_Out_ PULONG Index);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
ULONG
|
|
NTAPI
|
|
FsRtlNumberOfRunsInLargeMcb(
|
|
_In_ PLARGE_MCB Mcb);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlGetNextLargeMcbEntry(
|
|
_In_ PLARGE_MCB Mcb,
|
|
_In_ ULONG RunIndex,
|
|
_Out_ PLONGLONG Vbn,
|
|
_Out_ PLONGLONG Lbn,
|
|
_Out_ PLONGLONG SectorCount);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlSplitLargeMcb(
|
|
_Inout_ PLARGE_MCB Mcb,
|
|
_In_ LONGLONG Vbn,
|
|
_In_ LONGLONG Amount);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
__drv_preferredFunction(FsRtlInitializeLargeMcb, "Obsolete")
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlInitializeMcb(
|
|
_Out_ PMCB Mcb,
|
|
_In_ POOL_TYPE PoolType);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlUninitializeMcb(
|
|
_Inout_ PMCB Mcb);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlTruncateMcb(
|
|
_Inout_ PMCB Mcb,
|
|
_In_ VBN Vbn);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlAddMcbEntry(
|
|
_Inout_ PMCB Mcb,
|
|
_In_ VBN Vbn,
|
|
_In_ LBN Lbn,
|
|
_In_ ULONG SectorCount);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlRemoveMcbEntry(
|
|
_Inout_ PMCB Mcb,
|
|
_In_ VBN Vbn,
|
|
_In_ ULONG SectorCount);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlLookupMcbEntry(
|
|
_In_ PMCB Mcb,
|
|
_In_ VBN Vbn,
|
|
_Out_ PLBN Lbn,
|
|
_Out_opt_ PULONG SectorCount,
|
|
_Out_ PULONG Index);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlLookupLastMcbEntry(
|
|
_In_ PMCB Mcb,
|
|
_Out_ PVBN Vbn,
|
|
_Out_ PLBN Lbn);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
ULONG
|
|
NTAPI
|
|
FsRtlNumberOfRunsInMcb(
|
|
_In_ PMCB Mcb);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlGetNextMcbEntry(
|
|
_In_ PMCB Mcb,
|
|
_In_ ULONG RunIndex,
|
|
_Out_ PVBN Vbn,
|
|
_Out_ PLBN Lbn,
|
|
_Out_ PULONG SectorCount);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlBalanceReads(
|
|
_In_ PDEVICE_OBJECT TargetDevice);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlInitializeOplock(
|
|
_Inout_ POPLOCK Oplock);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlUninitializeOplock(
|
|
_Inout_ POPLOCK Oplock);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlOplockFsctrl(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PIRP Irp,
|
|
_In_ ULONG OpenCount);
|
|
|
|
_When_(CompletionRoutine != NULL, _Must_inspect_result_)
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlCheckOplock(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PIRP Irp,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
|
|
_In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlOplockIsFastIoPossible(
|
|
_In_ POPLOCK Oplock);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlCurrentBatchOplock(
|
|
_In_ POPLOCK Oplock);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlNotifyVolumeEvent(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ ULONG EventCode);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlNotifyInitializeSync(
|
|
_In_ PNOTIFY_SYNC *NotifySync);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlNotifyUninitializeSync(
|
|
_In_ PNOTIFY_SYNC *NotifySync);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlNotifyFullChangeDirectory(
|
|
_In_ PNOTIFY_SYNC NotifySync,
|
|
_In_ PLIST_ENTRY NotifyList,
|
|
_In_ PVOID FsContext,
|
|
_In_ PSTRING FullDirectoryName,
|
|
_In_ BOOLEAN WatchTree,
|
|
_In_ BOOLEAN IgnoreBuffer,
|
|
_In_ ULONG CompletionFilter,
|
|
_In_opt_ PIRP NotifyIrp,
|
|
_In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
|
|
_In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlNotifyFilterReportChange(
|
|
_In_ PNOTIFY_SYNC NotifySync,
|
|
_In_ PLIST_ENTRY NotifyList,
|
|
_In_ PSTRING FullTargetName,
|
|
_In_ USHORT TargetNameOffset,
|
|
_In_opt_ PSTRING StreamName,
|
|
_In_opt_ PSTRING NormalizedParentName,
|
|
_In_ ULONG FilterMatch,
|
|
_In_ ULONG Action,
|
|
_In_opt_ PVOID TargetContext,
|
|
_In_opt_ PVOID FilterContext);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlNotifyFullReportChange(
|
|
_In_ PNOTIFY_SYNC NotifySync,
|
|
_In_ PLIST_ENTRY NotifyList,
|
|
_In_ PSTRING FullTargetName,
|
|
_In_ USHORT TargetNameOffset,
|
|
_In_opt_ PSTRING StreamName,
|
|
_In_opt_ PSTRING NormalizedParentName,
|
|
_In_ ULONG FilterMatch,
|
|
_In_ ULONG Action,
|
|
_In_opt_ PVOID TargetContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlNotifyCleanup(
|
|
_In_ PNOTIFY_SYNC NotifySync,
|
|
_In_ PLIST_ENTRY NotifyList,
|
|
_In_ PVOID FsContext);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlDissectName(
|
|
_In_ UNICODE_STRING Name,
|
|
_Out_ PUNICODE_STRING FirstPart,
|
|
_Out_ PUNICODE_STRING RemainingPart);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlDoesNameContainWildCards(
|
|
_In_ PUNICODE_STRING Name);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlAreNamesEqual(
|
|
_In_ PCUNICODE_STRING Name1,
|
|
_In_ PCUNICODE_STRING Name2,
|
|
_In_ BOOLEAN IgnoreCase,
|
|
_In_reads_opt_(0x10000) PCWCH UpcaseTable);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlIsNameInExpression(
|
|
_In_ PUNICODE_STRING Expression,
|
|
_In_ PUNICODE_STRING Name,
|
|
_In_ BOOLEAN IgnoreCase,
|
|
_In_opt_ PWCHAR UpcaseTable);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlPostPagingFileStackOverflow(
|
|
_In_ PVOID Context,
|
|
_In_ PKEVENT Event,
|
|
_In_ PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlPostStackOverflow (
|
|
_In_ PVOID Context,
|
|
_In_ PKEVENT Event,
|
|
_In_ PFSRTL_STACK_OVERFLOW_ROUTINE StackOverflowRoutine);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlRegisterUncProvider(
|
|
_Out_ PHANDLE MupHandle,
|
|
_In_ PCUNICODE_STRING RedirectorDeviceName,
|
|
_In_ BOOLEAN MailslotsSupported);
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlDeregisterUncProvider(
|
|
_In_ HANDLE Handle);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlTeardownPerStreamContexts(
|
|
_In_ PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlCreateSectionForDataScan(
|
|
_Out_ PHANDLE SectionHandle,
|
|
_Outptr_ PVOID *SectionObject,
|
|
_Out_opt_ PLARGE_INTEGER SectionFileSize,
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ ACCESS_MASK DesiredAccess,
|
|
_In_opt_ POBJECT_ATTRIBUTES ObjectAttributes,
|
|
_In_opt_ PLARGE_INTEGER MaximumSize,
|
|
_In_ ULONG SectionPageProtection,
|
|
_In_ ULONG AllocationAttributes,
|
|
_In_ ULONG Flags);
|
|
|
|
#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_WINXP)
|
|
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlNotifyFilterChangeDirectory(
|
|
_In_ PNOTIFY_SYNC NotifySync,
|
|
_In_ PLIST_ENTRY NotifyList,
|
|
_In_ PVOID FsContext,
|
|
_In_ PSTRING FullDirectoryName,
|
|
_In_ BOOLEAN WatchTree,
|
|
_In_ BOOLEAN IgnoreBuffer,
|
|
_In_ ULONG CompletionFilter,
|
|
_In_opt_ PIRP NotifyIrp,
|
|
_In_opt_ PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
|
|
_In_opt_ PSECURITY_SUBJECT_CONTEXT SubjectContext,
|
|
_In_opt_ PFILTER_REPORT_CHANGE FilterCallback);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlInsertPerStreamContext(
|
|
_In_ PFSRTL_ADVANCED_FCB_HEADER PerStreamContext,
|
|
_In_ PFSRTL_PER_STREAM_CONTEXT Ptr);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
PFSRTL_PER_STREAM_CONTEXT
|
|
NTAPI
|
|
FsRtlLookupPerStreamContextInternal(
|
|
_In_ PFSRTL_ADVANCED_FCB_HEADER StreamContext,
|
|
_In_opt_ PVOID OwnerId,
|
|
_In_opt_ PVOID InstanceId);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
PFSRTL_PER_STREAM_CONTEXT
|
|
NTAPI
|
|
FsRtlRemovePerStreamContext(
|
|
_In_ PFSRTL_ADVANCED_FCB_HEADER StreamContext,
|
|
_In_opt_ PVOID OwnerId,
|
|
_In_opt_ PVOID InstanceId);
|
|
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlIncrementCcFastReadNotPossible(
|
|
VOID);
|
|
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlIncrementCcFastReadWait(VOID);
|
|
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlIncrementCcFastReadNoWait(VOID);
|
|
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlIncrementCcFastReadResourceMiss(VOID);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
LOGICAL
|
|
NTAPI
|
|
FsRtlIsPagingFile(
|
|
_In_ PFILE_OBJECT FileObject);
|
|
|
|
#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_WS03)
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlInitializeBaseMcb(
|
|
_Out_ PBASE_MCB Mcb,
|
|
_In_ POOL_TYPE PoolType);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlUninitializeBaseMcb(
|
|
_In_ PBASE_MCB Mcb);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlResetBaseMcb(
|
|
_Out_ PBASE_MCB Mcb);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlTruncateBaseMcb(
|
|
_Inout_ PBASE_MCB Mcb,
|
|
_In_ LONGLONG Vbn);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlAddBaseMcbEntry(
|
|
_Inout_ PBASE_MCB Mcb,
|
|
_In_ LONGLONG Vbn,
|
|
_In_ LONGLONG Lbn,
|
|
_In_ LONGLONG SectorCount);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlRemoveBaseMcbEntry(
|
|
_Inout_ PBASE_MCB Mcb,
|
|
_In_ LONGLONG Vbn,
|
|
_In_ LONGLONG SectorCount);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlLookupBaseMcbEntry(
|
|
_In_ PBASE_MCB Mcb,
|
|
_In_ LONGLONG Vbn,
|
|
_Out_opt_ PLONGLONG Lbn,
|
|
_Out_opt_ PLONGLONG SectorCountFromLbn,
|
|
_Out_opt_ PLONGLONG StartingLbn,
|
|
_Out_opt_ PLONGLONG SectorCountFromStartingLbn,
|
|
_Out_opt_ PULONG Index);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlLookupLastBaseMcbEntry(
|
|
_In_ PBASE_MCB Mcb,
|
|
_Out_ PLONGLONG Vbn,
|
|
_Out_ PLONGLONG Lbn);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlLookupLastBaseMcbEntryAndIndex(
|
|
_In_ PBASE_MCB OpaqueMcb,
|
|
_Inout_ PLONGLONG LargeVbn,
|
|
_Inout_ PLONGLONG LargeLbn,
|
|
_Inout_ PULONG Index);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
ULONG
|
|
NTAPI
|
|
FsRtlNumberOfRunsInBaseMcb(
|
|
_In_ PBASE_MCB Mcb);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlGetNextBaseMcbEntry(
|
|
_In_ PBASE_MCB Mcb,
|
|
_In_ ULONG RunIndex,
|
|
_Out_ PLONGLONG Vbn,
|
|
_Out_ PLONGLONG Lbn,
|
|
_Out_ PLONGLONG SectorCount);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlSplitBaseMcb(
|
|
_Inout_ PBASE_MCB Mcb,
|
|
_In_ LONGLONG Vbn,
|
|
_In_ LONGLONG Amount);
|
|
|
|
#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_VISTA)
|
|
|
|
_When_(!Flags & MCB_FLAG_RAISE_ON_ALLOCATION_FAILURE, _Must_inspect_result_)
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlInitializeBaseMcbEx(
|
|
_Out_ PBASE_MCB Mcb,
|
|
_In_ POOL_TYPE PoolType,
|
|
_In_ USHORT Flags);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlAddBaseMcbEntryEx(
|
|
_Inout_ PBASE_MCB Mcb,
|
|
_In_ LONGLONG Vbn,
|
|
_In_ LONGLONG Lbn,
|
|
_In_ LONGLONG SectorCount);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlCurrentOplock(
|
|
_In_ POPLOCK Oplock);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlOplockBreakToNone(
|
|
_Inout_ POPLOCK Oplock,
|
|
_In_opt_ PIO_STACK_LOCATION IrpSp,
|
|
_In_ PIRP Irp,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
|
|
_In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
|
|
|
|
_IRQL_requires_max_(DISPATCH_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlNotifyVolumeEventEx(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ ULONG EventCode,
|
|
_In_ PTARGET_DEVICE_CUSTOM_NOTIFICATION Event);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlNotifyCleanupAll(
|
|
_In_ PNOTIFY_SYNC NotifySync,
|
|
_In_ PLIST_ENTRY NotifyList);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlRegisterUncProviderEx(
|
|
_Out_ PHANDLE MupHandle,
|
|
_In_ PUNICODE_STRING RedirDevName,
|
|
_In_ PDEVICE_OBJECT DeviceObject,
|
|
_In_ ULONG Flags);
|
|
|
|
_Must_inspect_result_
|
|
_When_(Irp!=NULL, _IRQL_requires_max_(PASSIVE_LEVEL))
|
|
_When_(Irp==NULL, _IRQL_requires_max_(APC_LEVEL))
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlCancellableWaitForSingleObject(
|
|
_In_ PVOID Object,
|
|
_In_opt_ PLARGE_INTEGER Timeout,
|
|
_In_opt_ PIRP Irp);
|
|
|
|
_Must_inspect_result_
|
|
_When_(Irp != NULL, _IRQL_requires_max_(PASSIVE_LEVEL))
|
|
_When_(Irp == NULL, _IRQL_requires_max_(APC_LEVEL))
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlCancellableWaitForMultipleObjects(
|
|
_In_ ULONG Count,
|
|
_In_reads_(Count) PVOID ObjectArray[],
|
|
_In_ WAIT_TYPE WaitType,
|
|
_In_opt_ PLARGE_INTEGER Timeout,
|
|
_In_opt_ PKWAIT_BLOCK WaitBlockArray,
|
|
_In_opt_ PIRP Irp);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlMupGetProviderInfoFromFileObject(
|
|
_In_ PFILE_OBJECT pFileObject,
|
|
_In_ ULONG Level,
|
|
_Out_writes_bytes_(*pBufferSize) PVOID pBuffer,
|
|
_Inout_ PULONG pBufferSize);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlMupGetProviderIdFromName(
|
|
_In_ PUNICODE_STRING pProviderName,
|
|
_Out_ PULONG32 pProviderId);
|
|
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlIncrementCcFastMdlReadWait(VOID);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlValidateReparsePointBuffer(
|
|
_In_ ULONG BufferLength,
|
|
_In_reads_bytes_(BufferLength) PREPARSE_DATA_BUFFER ReparseBuffer);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlRemoveDotsFromPath(
|
|
_Inout_updates_bytes_(PathLength) PWSTR OriginalString,
|
|
_In_ USHORT PathLength,
|
|
_Out_ USHORT *NewLength);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlAllocateExtraCreateParameterList(
|
|
_In_ FSRTL_ALLOCATE_ECPLIST_FLAGS Flags,
|
|
_Outptr_ PECP_LIST *EcpList);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlFreeExtraCreateParameterList(
|
|
_In_ PECP_LIST EcpList);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlAllocateExtraCreateParameter(
|
|
_In_ LPCGUID EcpType,
|
|
_In_ ULONG SizeOfContext,
|
|
_In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
|
|
_In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
|
|
_In_ ULONG PoolTag,
|
|
_Outptr_result_bytebuffer_(SizeOfContext) PVOID *EcpContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlFreeExtraCreateParameter(
|
|
_In_ PVOID EcpContext);
|
|
|
|
_When_(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL, _IRQL_requires_max_(DISPATCH_LEVEL))
|
|
_When_(!(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL), _IRQL_requires_max_(APC_LEVEL))
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlInitExtraCreateParameterLookasideList(
|
|
_Inout_ PVOID Lookaside,
|
|
_In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags,
|
|
_In_ SIZE_T Size,
|
|
_In_ ULONG Tag);
|
|
|
|
_When_(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL, _IRQL_requires_max_(DISPATCH_LEVEL))
|
|
_When_(!(Flags|FSRTL_ECP_LOOKASIDE_FLAG_NONPAGED_POOL), _IRQL_requires_max_(APC_LEVEL))
|
|
VOID
|
|
NTAPI
|
|
FsRtlDeleteExtraCreateParameterLookasideList(
|
|
_Inout_ PVOID Lookaside,
|
|
_In_ FSRTL_ECP_LOOKASIDE_FLAGS Flags);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlAllocateExtraCreateParameterFromLookasideList(
|
|
_In_ LPCGUID EcpType,
|
|
ULONG SizeOfContext,
|
|
_In_ FSRTL_ALLOCATE_ECP_FLAGS Flags,
|
|
_In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
|
|
_Inout_ PVOID LookasideList,
|
|
_Outptr_ PVOID *EcpContext);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlInsertExtraCreateParameter(
|
|
_Inout_ PECP_LIST EcpList,
|
|
_Inout_ PVOID EcpContext);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlFindExtraCreateParameter(
|
|
_In_ PECP_LIST EcpList,
|
|
_In_ LPCGUID EcpType,
|
|
_Outptr_opt_ PVOID *EcpContext,
|
|
_Out_opt_ ULONG *EcpContextSize);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlRemoveExtraCreateParameter(
|
|
_Inout_ PECP_LIST EcpList,
|
|
_In_ LPCGUID EcpType,
|
|
_Outptr_ PVOID *EcpContext,
|
|
_Out_opt_ ULONG *EcpContextSize);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlGetEcpListFromIrp(
|
|
_In_ PIRP Irp,
|
|
_Outptr_result_maybenull_ PECP_LIST *EcpList);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlSetEcpListIntoIrp(
|
|
_Inout_ PIRP Irp,
|
|
_In_ PECP_LIST EcpList);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlGetNextExtraCreateParameter(
|
|
_In_ PECP_LIST EcpList,
|
|
_In_opt_ PVOID CurrentEcpContext,
|
|
_Out_opt_ LPGUID NextEcpType,
|
|
_Outptr_opt_ PVOID *NextEcpContext,
|
|
_Out_opt_ ULONG *NextEcpContextSize);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlAcknowledgeEcp(
|
|
_In_ PVOID EcpContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlIsEcpAcknowledged(
|
|
_In_ PVOID EcpContext);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlIsEcpFromUserMode(
|
|
_In_ PVOID EcpContext);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(PASSIVE_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlChangeBackingFileObject(
|
|
_In_opt_ PFILE_OBJECT CurrentFileObject,
|
|
_In_ PFILE_OBJECT NewFileObject,
|
|
_In_ FSRTL_CHANGE_BACKING_TYPE ChangeBackingType,
|
|
_In_ ULONG Flags);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlLogCcFlushError(
|
|
_In_ PUNICODE_STRING FileName,
|
|
_In_ PDEVICE_OBJECT DeviceObject,
|
|
_In_ PSECTION_OBJECT_POINTERS SectionObjectPointer,
|
|
_In_ NTSTATUS FlushError,
|
|
_In_ ULONG Flags);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlAreVolumeStartupApplicationsComplete(VOID);
|
|
|
|
NTKERNELAPI
|
|
ULONG
|
|
NTAPI
|
|
FsRtlQueryMaximumVirtualDiskNestingLevel(VOID);
|
|
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlGetVirtualDiskNestingLevel(
|
|
_In_ PDEVICE_OBJECT DeviceObject,
|
|
_Out_ PULONG NestingLevel,
|
|
_Out_opt_ PULONG NestingFlags);
|
|
|
|
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_VISTASP1)
|
|
_When_(Flags | OPLOCK_FLAG_BACK_OUT_ATOMIC_OPLOCK, _Must_inspect_result_)
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlCheckOplockEx(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PIRP Irp,
|
|
_In_ ULONG Flags,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
|
|
_In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
|
|
|
|
#endif
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_WIN7)
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlAreThereCurrentOrInProgressFileLocks(
|
|
_In_ PFILE_LOCK FileLock);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlOplockIsSharedRequest(
|
|
_In_ PIRP Irp);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlOplockBreakH(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PIRP Irp,
|
|
_In_ ULONG Flags,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
|
|
_In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlCurrentOplockH(
|
|
_In_ POPLOCK Oplock);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlOplockBreakToNoneEx(
|
|
_Inout_ POPLOCK Oplock,
|
|
_In_ PIRP Irp,
|
|
_In_ ULONG Flags,
|
|
_In_opt_ PVOID Context,
|
|
_In_opt_ POPLOCK_WAIT_COMPLETE_ROUTINE CompletionRoutine,
|
|
_In_opt_ POPLOCK_FS_PREPOST_IRP PostIrpRoutine);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlOplockFsctrlEx(
|
|
_In_ POPLOCK Oplock,
|
|
_In_ PIRP Irp,
|
|
_In_ ULONG OpenCount,
|
|
_In_ ULONG Flags);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
FsRtlOplockKeysEqual(
|
|
_In_opt_ PFILE_OBJECT Fo1,
|
|
_In_opt_ PFILE_OBJECT Fo2);
|
|
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlInitializeExtraCreateParameterList(
|
|
_Inout_ PECP_LIST EcpList);
|
|
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlInitializeExtraCreateParameter(
|
|
_Out_ PECP_HEADER Ecp,
|
|
_In_ ULONG EcpFlags,
|
|
_In_opt_ PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
|
|
_In_ ULONG TotalSize,
|
|
_In_ LPCGUID EcpType,
|
|
_In_opt_ PVOID ListAllocatedFrom);
|
|
|
|
#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlInsertPerFileContext(
|
|
_In_ PVOID* PerFileContextPointer,
|
|
_In_ PFSRTL_PER_FILE_CONTEXT Ptr);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
PFSRTL_PER_FILE_CONTEXT
|
|
NTAPI
|
|
FsRtlLookupPerFileContext(
|
|
_In_ PVOID* PerFileContextPointer,
|
|
_In_opt_ PVOID OwnerId,
|
|
_In_opt_ PVOID InstanceId);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
PFSRTL_PER_FILE_CONTEXT
|
|
NTAPI
|
|
FsRtlRemovePerFileContext(
|
|
_In_ PVOID* PerFileContextPointer,
|
|
_In_opt_ PVOID OwnerId,
|
|
_In_opt_ PVOID InstanceId);
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
VOID
|
|
NTAPI
|
|
FsRtlTeardownPerFileContexts(
|
|
_In_ PVOID* PerFileContextPointer);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlInsertPerFileObjectContext(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_ PFSRTL_PER_FILEOBJECT_CONTEXT Ptr);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
PFSRTL_PER_FILEOBJECT_CONTEXT
|
|
NTAPI
|
|
FsRtlLookupPerFileObjectContext(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_opt_ PVOID OwnerId,
|
|
_In_opt_ PVOID InstanceId);
|
|
|
|
_Must_inspect_result_
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
NTKERNELAPI
|
|
PFSRTL_PER_FILEOBJECT_CONTEXT
|
|
NTAPI
|
|
FsRtlRemovePerFileObjectContext(
|
|
_In_ PFILE_OBJECT FileObject,
|
|
_In_opt_ PVOID OwnerId,
|
|
_In_opt_ PVOID InstanceId);
|
|
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlRegisterFileSystemFilterCallbacks(
|
|
_In_ struct _DRIVER_OBJECT *FilterDriverObject,
|
|
_In_ PFS_FILTER_CALLBACKS Callbacks);
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_VISTA)
|
|
NTKERNELAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
FsRtlNotifyStreamFileObject(
|
|
_In_ struct _FILE_OBJECT * StreamFileObject,
|
|
_In_opt_ struct _DEVICE_OBJECT *DeviceObjectHint,
|
|
_In_ FS_FILTER_STREAM_FO_NOTIFICATION_TYPE NotificationType,
|
|
_In_ BOOLEAN SafeToRecurse);
|
|
#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
|
|
|
|
#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) \
|
|
FsRtlPrivateLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, NULL, A10, A11)
|
|
|
|
#define FsRtlAreThereCurrentFileLocks(FL) \
|
|
((FL)->FastIoIsQuestionable)
|
|
|
|
#define FsRtlIncrementLockRequestsInProgress(FL) { \
|
|
ASSERT((FL)->LockRequestsInProgress >= 0); \
|
|
(void) \
|
|
(InterlockedIncrement((LONG volatile *)&((FL)->LockRequestsInProgress))); \
|
|
}
|
|
|
|
#define FsRtlDecrementLockRequestsInProgress(FL) { \
|
|
ASSERT((FL)->LockRequestsInProgress > 0); \
|
|
(void) \
|
|
(InterlockedDecrement((LONG volatile *)&((FL)->LockRequestsInProgress))); \
|
|
}
|
|
|
|
#ifdef _NTSYSTEM_
|
|
extern const UCHAR * const FsRtlLegalAnsiCharacterArray;
|
|
#define LEGAL_ANSI_CHARACTER_ARRAY FsRtlLegalAnsiCharacterArray
|
|
#else
|
|
__CREATE_NTOS_DATA_IMPORT_ALIAS(FsRtlLegalAnsiCharacterArray)
|
|
extern const UCHAR * const *FsRtlLegalAnsiCharacterArray;
|
|
#define LEGAL_ANSI_CHARACTER_ARRAY (*FsRtlLegalAnsiCharacterArray)
|
|
#endif
|
|
|
|
#define FsRtlIsAnsiCharacterWild(C) \
|
|
FsRtlTestAnsiCharacter((C), FALSE, FALSE, FSRTL_WILD_CHARACTER)
|
|
|
|
#define FsRtlIsAnsiCharacterLegalFat(C, WILD) \
|
|
FsRtlTestAnsiCharacter((C), TRUE, (WILD), FSRTL_FAT_LEGAL)
|
|
|
|
#define FsRtlIsAnsiCharacterLegalHpfs(C, WILD) \
|
|
FsRtlTestAnsiCharacter((C), TRUE, (WILD), FSRTL_HPFS_LEGAL)
|
|
|
|
#define FsRtlIsAnsiCharacterLegalNtfs(C, WILD) \
|
|
FsRtlTestAnsiCharacter((C), TRUE, (WILD), FSRTL_NTFS_LEGAL)
|
|
|
|
#define FsRtlIsAnsiCharacterLegalNtfsStream(C,WILD_OK) \
|
|
FsRtlTestAnsiCharacter((C), TRUE, (WILD_OK), FSRTL_NTFS_STREAM_LEGAL)
|
|
|
|
#define FsRtlIsAnsiCharacterLegal(C,FLAGS) \
|
|
FsRtlTestAnsiCharacter((C), TRUE, FALSE, (FLAGS))
|
|
|
|
#define FsRtlTestAnsiCharacter(C, DEFAULT_RET, WILD_OK, FLAGS) \
|
|
(((SCHAR)(C) < 0) ? DEFAULT_RET : \
|
|
FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(C)], \
|
|
(FLAGS) | ((WILD_OK) ? FSRTL_WILD_CHARACTER : 0)))
|
|
|
|
#define FsRtlIsLeadDbcsCharacter(DBCS_CHAR) \
|
|
((BOOLEAN)((UCHAR)(DBCS_CHAR) < 0x80 ? FALSE : \
|
|
(NLS_MB_CODE_PAGE_TAG && \
|
|
(NLS_OEM_LEAD_BYTE_INFO[(UCHAR)(DBCS_CHAR)] != 0))))
|
|
|
|
#define FsRtlIsUnicodeCharacterWild(C) \
|
|
((((C) >= 0x40) ? FALSE : \
|
|
FlagOn(LEGAL_ANSI_CHARACTER_ARRAY[(C)], FSRTL_WILD_CHARACTER )))
|
|
|
|
#define FsRtlInitPerFileContext(_fc, _owner, _inst, _cb) \
|
|
((_fc)->OwnerId = (_owner), \
|
|
(_fc)->InstanceId = (_inst), \
|
|
(_fc)->FreeCallback = (_cb))
|
|
|
|
#define FsRtlGetPerFileContextPointer(_fo) \
|
|
(FsRtlSupportsPerFileContexts(_fo) ? \
|
|
FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer : NULL)
|
|
|
|
#define FsRtlSupportsPerFileContexts(_fo) \
|
|
((FsRtlGetPerStreamContextPointer(_fo) != NULL) && \
|
|
(FsRtlGetPerStreamContextPointer(_fo)->Version >= FSRTL_FCB_HEADER_V1) && \
|
|
(FsRtlGetPerStreamContextPointer(_fo)->FileContextSupportPointer != NULL))
|
|
|
|
#define FsRtlSetupAdvancedHeaderEx(_advhdr, _fmutx, _fctxptr) \
|
|
{ \
|
|
FsRtlSetupAdvancedHeader( _advhdr, _fmutx ); \
|
|
if ((_fctxptr) != NULL) { \
|
|
(_advhdr)->FileContextSupportPointer = (_fctxptr); \
|
|
} \
|
|
}
|
|
|
|
#define FsRtlGetPerStreamContextPointer(FO) \
|
|
((PFSRTL_ADVANCED_FCB_HEADER)(FO)->FsContext)
|
|
|
|
#define FsRtlInitPerStreamContext(PSC, O, I, FC) \
|
|
((PSC)->OwnerId = (O), \
|
|
(PSC)->InstanceId = (I), \
|
|
(PSC)->FreeCallback = (FC))
|
|
|
|
#define FsRtlSupportsPerStreamContexts(FO) \
|
|
((BOOLEAN)((NULL != FsRtlGetPerStreamContextPointer(FO) && \
|
|
FlagOn(FsRtlGetPerStreamContextPointer(FO)->Flags2, \
|
|
FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS)))
|
|
|
|
#define FsRtlLookupPerStreamContext(_sc, _oid, _iid) \
|
|
(((NULL != (_sc)) && \
|
|
FlagOn((_sc)->Flags2,FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS) && \
|
|
!IsListEmpty(&(_sc)->FilterContexts)) ? \
|
|
FsRtlLookupPerStreamContextInternal((_sc), (_oid), (_iid)) : NULL)
|
|
|
|
_IRQL_requires_max_(APC_LEVEL)
|
|
FORCEINLINE
|
|
VOID
|
|
NTAPI
|
|
FsRtlSetupAdvancedHeader(
|
|
_In_ PVOID AdvHdr,
|
|
_In_ PFAST_MUTEX FMutex )
|
|
{
|
|
PFSRTL_ADVANCED_FCB_HEADER localAdvHdr = (PFSRTL_ADVANCED_FCB_HEADER)AdvHdr;
|
|
|
|
localAdvHdr->Flags |= FSRTL_FLAG_ADVANCED_HEADER;
|
|
localAdvHdr->Flags2 |= FSRTL_FLAG2_SUPPORTS_FILTER_CONTEXTS;
|
|
#if (NTDDI_VERSION >= NTDDI_VISTA)
|
|
localAdvHdr->Version = FSRTL_FCB_HEADER_V1;
|
|
#else
|
|
localAdvHdr->Version = FSRTL_FCB_HEADER_V0;
|
|
#endif
|
|
InitializeListHead( &localAdvHdr->FilterContexts );
|
|
if (FMutex != NULL) {
|
|
localAdvHdr->FastMutex = FMutex;
|
|
}
|
|
#if (NTDDI_VERSION >= NTDDI_VISTA)
|
|
*((PULONG_PTR)(&localAdvHdr->PushLock)) = 0;
|
|
localAdvHdr->FileContextSupportPointer = NULL;
|
|
#endif
|
|
}
|
|
|
|
#define FsRtlInitPerFileObjectContext(_fc, _owner, _inst) \
|
|
((_fc)->OwnerId = (_owner), (_fc)->InstanceId = (_inst))
|
|
|
|
#define FsRtlCompleteRequest(IRP, STATUS) { \
|
|
(IRP)->IoStatus.Status = (STATUS); \
|
|
IoCompleteRequest( (IRP), IO_DISK_INCREMENT ); \
|
|
}
|
|
$endif (_NTIFS_)
|