20 #define FASTIO_DEBUG_LEVEL DL_NVR 25 #pragma alloc_text(PAGE, Ext2FastIoRead) 26 #pragma alloc_text(PAGE, Ext2FastIoWrite) 27 #pragma alloc_text(PAGE, Ext2FastIoCheckIfPossible) 28 #pragma alloc_text(PAGE, Ext2FastIoQueryBasicInfo) 29 #pragma alloc_text(PAGE, Ext2FastIoQueryStandardInfo) 30 #pragma alloc_text(PAGE, Ext2FastIoQueryNetworkOpenInfo) 31 #pragma alloc_text(PAGE, Ext2FastIoLock) 32 #pragma alloc_text(PAGE, Ext2FastIoUnlockSingle) 33 #pragma alloc_text(PAGE, Ext2FastIoUnlockAll) 34 #pragma alloc_text(PAGE, Ext2FastIoUnlockAll) 113 &
Fcb->FileLockAnchor,
124 &
Fcb->FileLockAnchor,
134 DEBUG(
DL_INF, (
"Ext2FastIIOCheckPossible: %s %s %wZ\n",
136 "FASTIO_CHECK_IF_POSSIBLE",
141 "Ext2FastIIOCheckPossible: Offset: %I64xg Length: %xh Key: %u %s %s\n",
146 "CheckForWriteOperation:"),
147 (bPossible ?
"Succeeded" :
"Failed")));
188 DEBUG(
DL_IO, (
"Ext2FastIoRead: %wZ Offset: %I64xh Length: %xh Key: %u Status: %d\n",
257 DEBUG(
DL_IO, (
"Ext2FastIoWrite: %wZ Offset: %I64xh Length: %xh Key: %xh Status=%d\n",
299 "Ext2FastIoQueryBasicInfo: %s %s %wZ\n",
301 "FASTIO_QUERY_BASIC_INFO",
311 FcbMainResourceAcquired =
TRUE;
326 Buffer->CreationTime =
Mcb->CreationTime;
327 Buffer->LastAccessTime =
Mcb->LastAccessTime;
328 Buffer->LastWriteTime =
Mcb->LastWriteTime;
331 if (
Buffer->FileAttributes == 0) {
346 if (FcbMainResourceAcquired) {
357 DEBUG(
DL_ERR, (
"Ext2FastIoQueryBasicInfo: %s %s Status: FALSE ***\n",
359 "FASTIO_QUERY_BASIC_INFO"));
364 "Ext2FastIoQueryBasicInfo: %s %s Status: %#x ***\n",
366 "FASTIO_QUERY_BASIC_INFO",
412 "Ext2FastIoQueryStandardInfo: %s %s %wZ\n",
414 "FASTIO_QUERY_STANDARD_INFO",
425 FcbMainResourceAcquired =
TRUE;
440 Buffer->NumberOfLinks =
Fcb->Inode->i_nlink;
445 Buffer->AllocationSize.QuadPart = 0;
446 Buffer->EndOfFile.QuadPart = 0;
456 DEBUG(
DL_INF, (
"Ext2FastIoQueryStandInfo: AllocatieonSize = %I64xh FileSize = %I64xh\n",
457 Buffer->AllocationSize.QuadPart,
Buffer->EndOfFile.QuadPart));
467 if (FcbMainResourceAcquired) {
477 "Ext2FastIoQueryStandardInfo: %s %s Status: FALSE ***\n",
479 "FASTIO_QUERY_STANDARD_INFO" ));
482 "Ext2FastIoQueryStandardInfo: %s %s Status: %#x ***\n",
484 "FASTIO_QUERY_STANDARD_INFO",
535 "Ext2FastIoLock: %s %s %wZ\n",
541 "Ext2FastIoLock: Offset: %I64xh Length: %I64xh Key: %u %s%s\n",
554 &
Fcb->FileLockAnchor,
582 "Ext2FastIoLock: %s %s *** Status: FALSE ***\n",
588 "Ext2FastIoLock: %s %s *** Status: %s (%#x) ***\n",
643 "Ext2FastIoUnlockSingle: %s %s %wZ\n",
645 "FASTIO_UNLOCK_SINGLE",
649 "Ext2FastIoUnlockSingle: Offset: %I64xh Length: %I64xh Key: %u\n",
660 &
Fcb->FileLockAnchor,
687 "Ext2FastIoUnlockSingle: %s %s *** Status: FALSE ***\n",
689 "FASTIO_UNLOCK_SINGLE" ));
692 "Ext2FastIoUnlockSingle: %s %s *** Status: %s (%#x) ***\n",
694 "FASTIO_UNLOCK_SINGLE",
741 "Ext2FastIoUnlockSingle: %s %s %wZ\n",
753 &
Fcb->FileLockAnchor,
776 "Ext2FastIoUnlockSingle: %s %s *** Status: FALSE ***\n",
782 "Ext2FastIoUnlockSingle: %s %s *** Status: %s (%#x) ***\n",
839 "Ext2FastIoUnlockAllByKey: %s %s %wZ\n",
841 "FASTIO_UNLOCK_ALL_BY_KEY",
846 "Ext2FastIoUnlockAllByKey: Key: %u\n",
856 &
Fcb->FileLockAnchor,
881 "Ext2FastIoUnlockAllByKey: %s %s *** Status: FALSE ***\n",
883 "FASTIO_UNLOCK_ALL_BY_KEY" 888 "Ext2FastIoUnlockAllByKey: %s %s *** Status: %s (%#x) ***\n",
890 "FASTIO_UNLOCK_ALL_BY_KEY",
941 "FASTIO_QUERY_NETWORK_OPEN_INFO",
959 FcbResourceAcquired =
TRUE;
963 PFNOI->AllocationSize.QuadPart = 0;
964 PFNOI->EndOfFile.QuadPart = 0;
966 PFNOI->AllocationSize =
Fcb->
Header.AllocationSize;
970 PFNOI->FileAttributes =
Mcb->FileAttr;
971 if (PFNOI->FileAttributes == 0) {
975 PFNOI->CreationTime =
Mcb->CreationTime;
976 PFNOI->LastAccessTime =
Mcb->LastAccessTime;
977 PFNOI->LastWriteTime =
Mcb->LastWriteTime;
978 PFNOI->ChangeTime =
Mcb->ChangeTime;
987 if (FcbResourceAcquired) {
1043 if (!ResourceAcquired) {
1048 Fcb, ResourceAcquired));
VOID NTAPI Ext2AcquireForCreateSection(IN PFILE_OBJECT FileObject)
struct _EXT2_FCB * PEXT2_FCB
_In_ PLARGE_INTEGER EndingOffset
#define FS_FILTER_ACQUIRE_FOR_SECTION_SYNCHRONIZATION
BOOLEAN NTAPI Ext2FastIoLock(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 PDEVICE_OBJECT DeviceObject)
FAST_IO_POSSIBLE Ext2IsFastIoPossible(IN PEXT2_FCB Fcb)
NTSTATUS NTAPI Ext2PreAcquireForCreateSection(IN PFS_FILTER_CALLBACK_DATA cd, OUT PVOID *cc)
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)
_In_ ULONG _In_ ULONG _In_ ULONG Length
#define FsRtlEnterFileSystem
NTSTATUS NTAPI Ext2ReleaseFileForCcFlush(IN PFILE_OBJECT FileObject, IN PDEVICE_OBJECT DeviceObject)
#define FsRtlExitFileSystem
FSRTL_ADVANCED_FCB_HEADER Header
enum _FAST_IO_POSSIBLE FAST_IO_POSSIBLE
#define STATUS_INVALID_PARAMETER
_In_ PLARGE_INTEGER _Out_ struct _ERESOURCE ** ResourceToRelease
_In_ WDFDPC _In_ BOOLEAN Wait
NTSTATUS NTAPI Ext2AcquireFileForModWrite(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER EndingOffset, OUT PERESOURCE *ResourceToRelease, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI Ext2FastIoUnlockSingle(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN PLARGE_INTEGER Length, IN PEPROCESS Process, IN ULONG Key, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
#define STATUS_INVALID_DEVICE_REQUEST
VOID NTAPI Ext2ReleaseForCreateSection(IN PFILE_OBJECT FileObject)
BOOLEAN NTAPI Ext2FastIoCheckIfPossible(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, IN BOOLEAN CheckForReadOperation, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
#define Ext2GetCurrentProcessName()
IN PLARGE_INTEGER IN ULONG IN BOOLEAN IN ULONG IN BOOLEAN CheckForReadOperation
#define FCB_DELETE_PENDING
#define STATUS_FILE_LOCKED_WITH_ONLY_READERS
struct _FILE_NETWORK_OPEN_INFORMATION FILE_NETWORK_OPEN_INFORMATION
BOOLEAN NTAPI Ext2FastIoQueryBasicInfo(IN PFILE_OBJECT FileObject, IN BOOLEAN Wait, OUT PFILE_BASIC_INFORMATION Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI ExAcquireResourceExclusiveLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
NTSTATUS NTAPI FsRtlFastUnlockAllByKey(IN PFILE_LOCK FileLock, IN PFILE_OBJECT FileObject, IN PEPROCESS Process, IN ULONG Key, IN PVOID Context OPTIONAL)
_In_ PDEVICE_OBJECT DeviceObject
NTFSIDENTIFIER Identifier
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
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 PVOID Context OPTIONAL, IN BOOLEAN AlreadySynchronized)
_In_ PMEMORY_AREA _In_ PVOID _In_ BOOLEAN Locked
#define IsWritingToEof(Pos)
IN PLARGE_INTEGER IN PLARGE_INTEGER PEPROCESS ULONG BOOLEAN FailImmediately
#define PsGetCurrentProcess
#define FASTIO_DEBUG_LEVEL
#define FsRtlAreThereCurrentFileLocks(FL)
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
struct _EXT2_FCB EXT2_FCB
BOOLEAN NTAPI Ext2FastIoUnlockAll(IN PFILE_OBJECT FileObject, IN PEPROCESS Process, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
IN PLARGE_INTEGER IN ULONG IN BOOLEAN IN ULONG LockKey
#define EXCEPTION_EXECUTE_HANDLER
#define IsVcbReadOnly(Vcb)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
NTSTATUS NTAPI Ext2AcquireFileForCcFlush(IN PFILE_OBJECT FileObject, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI Ext2FastIoUnlockAllByKey(IN PFILE_OBJECT FileObject, IN PEPROCESS Process, IN ULONG Key, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
#define FILE_ATTRIBUTE_NORMAL
_Must_inspect_result_ _In_ PFLT_INSTANCE _Out_ PBOOLEAN IsDirectory
#define FILE_STANDARD_INFORMATION
_Inout_ PFILE_OBJECT _In_ TYPE_OF_OPEN PFCB _In_opt_ PCCB Ccb
NTSTATUS NTAPI FsRtlFastUnlockAll(IN PFILE_LOCK FileLock, IN PFILE_OBJECT FileObject, IN PEPROCESS Process, IN PVOID Context OPTIONAL)
NTSTATUS NTAPI Ext2ReleaseFileForModWrite(IN PFILE_OBJECT FileObject, IN PERESOURCE ResourceToRelease, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI Ext2FastIoQueryStandardInfo(IN PFILE_OBJECT FileObject, IN BOOLEAN Wait, OUT PFILE_STANDARD_INFORMATION Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI Ext2FastIoQueryNetworkOpenInfo(IN PFILE_OBJECT FileObject, IN BOOLEAN Wait, IN OUT PFILE_NETWORK_OPEN_INFORMATION PFNOI, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
_In_ PFCB _In_ LONGLONG FileOffset
IN PVCB IN ULONG IN OUT PULONG IN BOOLEAN OUT PLARGE_MCB Mcb
PUCHAR Ext2NtStatusToString(IN NTSTATUS Status)
BOOLEAN NTAPI Ext2FastIoWrite(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
IN PLARGE_INTEGER IN PLARGE_INTEGER PEPROCESS ULONG BOOLEAN BOOLEAN ExclusiveLock
BOOLEAN NTAPI ExAcquireResourceSharedLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
#define VCB_VOLUME_LOCKED
BOOLEAN NTAPI FsRtlCopyRead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI FsRtlCopyWrite(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
#define STATUS_FILE_LOCKED_WITH_WRITERS
#define IsExt2FsDevice(DO)
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
BOOLEAN NTAPI Ext2FastIoRead(IN PFILE_OBJECT FileObject, IN PLARGE_INTEGER FileOffset, IN ULONG Length, IN BOOLEAN Wait, IN ULONG LockKey, OUT PVOID Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
#define RtlZeroMemory(Destination, Length)
#define STATUS_FSFILTER_OP_COMPLETED_SUCCESSFULLY
#define _SEH2_EXCEPT(...)
#define _SEH2_GetExceptionCode()
struct _EXT2_CCB * PEXT2_CCB
static SERVICE_STATUS status
#define FsRtlFastLock(A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11)
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)
BOOLEAN NTAPI FsRtlOplockIsFastIoPossible(IN POPLOCK Oplock)
#define FILE_BASIC_INFORMATION