23 #pragma alloc_text(PAGE, RfsdFastIoRead) 25 #pragma alloc_text(PAGE, RfsdFastIoWrite) 26 #endif // !RFSD_READ_ONLY 28 #pragma alloc_text(PAGE, RfsdFastIoCheckIfPossible) 29 #pragma alloc_text(PAGE, RfsdFastIoQueryBasicInfo) 30 #pragma alloc_text(PAGE, RfsdFastIoQueryStandardInfo) 31 #pragma alloc_text(PAGE, RfsdFastIoQueryNetworkOpenInfo) 32 #pragma alloc_text(PAGE, RfsdFastIoLock) 33 #pragma alloc_text(PAGE, RfsdFastIoUnlockSingle) 34 #pragma alloc_text(PAGE, RfsdFastIoUnlockAll) 35 #pragma alloc_text(PAGE, RfsdFastIoUnlockAllByKey) 100 &
Fcb->FileLockAnchor,
111 "FASTIO_CHECK_IF_POSSIBLE",
112 Fcb->AnsiFileName.Buffer
116 "RfsdFastIoCheckIfPossible: Offset: %I64xg Length: %xh Key: %u %s %s\n",
121 "CheckForWriteOperation:"),
122 (bPossible ?
"Succeeded" :
"Failed")));
162 Fcb->AnsiFileName.Buffer ));
202 "RfsdFastIoWrite: %s %s %s\n",
205 Fcb->AnsiFileName.Buffer ));
208 "RfsdFastIoWrite: Offset: %I64xh Length: %xh Key: %xh\n",
225 #endif // !RFSD_READ_ONLY 268 "RfsdFastIoQueryBasicInfo: %s %s %s\n",
270 "FASTIO_QUERY_BASIC_INFO",
271 Fcb->AnsiFileName.Buffer
281 FcbMainResourceAcquired =
TRUE;
301 Buffer->FileAttributes =
Fcb->RfsdMcb->FileAttr;
316 if (FcbMainResourceAcquired)
331 "RfsdFastIoQueryBasicInfo: %s %s *** Status: FALSE ***\n",
333 "FASTIO_QUERY_BASIC_INFO" 338 "RfsdFastIoQueryBasicInfo: %s %s *** Status: %s (%#x) ***\n",
340 "FASTIO_QUERY_BASIC_INFO",
394 "RfsdFastIoQueryStandardInfo: %s %s %s\n",
396 "FASTIO_QUERY_STANDARD_INFO",
397 Fcb->AnsiFileName.Buffer ));
408 FcbMainResourceAcquired =
TRUE;
433 Buffer->NumberOfLinks =
Fcb->Inode->i_links_count;
460 if (FcbMainResourceAcquired) {
473 "RfsdFastIoQueryStandardInfo: %s %s *** Status: FALSE ***\n",
475 "FASTIO_QUERY_STANDARD_INFO" ));
478 "RfsdFastIoQueryStandardInfo: %s %s *** Status: %s (%#x) ***\n",
480 "FASTIO_QUERY_STANDARD_INFO",
541 "RfsdFastIoLock: %s %s %s\n",
544 Fcb->AnsiFileName.Buffer ));
547 "RfsdFastIoLock: Offset: %I64xh Length: %I64xh Key: %u %s%s\n",
556 "RfsdFastIoLock: %s %s %s\n",
558 "FastIoIsQuestionable",
559 Fcb->AnsiFileName.Buffer ));
565 #pragma prefast( suppress: 28159, "bug in prefast" ) 568 &
Fcb->FileLockAnchor,
591 "RfsdFastIoLock: %s %s *** Status: FALSE ***\n",
597 "RfsdFastIoLock: %s %s *** Status: %s (%#x) ***\n",
660 "RfsdFastIoUnlockSingle: %s %s %s\n",
662 "FASTIO_UNLOCK_SINGLE",
663 Fcb->AnsiFileName.Buffer ));
666 "RfsdFastIoUnlockSingle: Offset: %I64xh Length: %I64xh Key: %u\n",
672 &
Fcb->FileLockAnchor,
698 "RfsdFastIoUnlockSingle: %s %s *** Status: FALSE ***\n",
700 "FASTIO_UNLOCK_SINGLE" ));
703 "RfsdFastIoUnlockSingle: %s %s *** Status: %s (%#x) ***\n",
705 "FASTIO_UNLOCK_SINGLE",
760 "RfsdFastIoUnlockAll: %s %s %s\n",
763 Fcb->AnsiFileName.Buffer
767 &
Fcb->FileLockAnchor,
789 "RfsdFastIoUnlockAll: %s %s *** Status: FALSE ***\n",
795 "RfsdFastIoUnlockAll: %s %s *** Status: %s (%#x) ***\n",
860 "RfsdFastIoUnlockAllByKey: %s %s %s\n",
862 "FASTIO_UNLOCK_ALL_BY_KEY",
863 Fcb->AnsiFileName.Buffer
867 "RfsdFastIoUnlockAllByKey: Key: %u\n",
872 &
Fcb->FileLockAnchor,
897 "RfsdFastIoUnlockAllByKey: %s %s *** Status: FALSE ***\n",
899 "FASTIO_UNLOCK_ALL_BY_KEY" 904 "RfsdFastIoUnlockAllByKey: %s %s *** Status: %s (%#x) ***\n",
906 "FASTIO_UNLOCK_ALL_BY_KEY",
954 "%-16.16s %-31s %s\n",
956 "FASTIO_QUERY_NETWORK_OPEN_INFO",
957 Fcb->AnsiFileName.Buffer
973 FcbResourceAcquired =
TRUE;
977 PFNOI->AllocationSize.QuadPart = 0;
978 PFNOI->EndOfFile.QuadPart = 0;
980 PFNOI->AllocationSize =
Fcb->
Header.AllocationSize;
984 PFNOI->FileAttributes =
Fcb->RfsdMcb->FileAttr;
985 if (PFNOI->FileAttributes == 0) {
1001 if (FcbResourceAcquired) {
#define ExGetCurrentResourceThread()
BOOLEAN NTAPI RfsdFastIoRead(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 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
#define FsRtlExitFileSystem
FSRTL_ADVANCED_FCB_HEADER Header
#define CEILING_ALIGNED(T, A, B)
#define STATUS_INVALID_PARAMETER
_In_ WDFDPC _In_ BOOLEAN Wait
#define STATUS_INVALID_DEVICE_REQUEST
BOOLEAN NTAPI RfsdFastIoUnlockAllByKey(IN PFILE_OBJECT FileObject, IN PEPROCESS Process, IN ULONG Key, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
IN PLARGE_INTEGER IN ULONG IN BOOLEAN IN ULONG IN BOOLEAN CheckForReadOperation
#define FCB_DELETE_PENDING
struct _FILE_NETWORK_OPEN_INFORMATION FILE_NETWORK_OPEN_INFORMATION
PDEVICE_OBJECT DeviceObject
PUCHAR RfsdNtStatusToString(IN NTSTATUS Status)
NTSTATUS NTAPI FsRtlFastUnlockAllByKey(IN PFILE_LOCK FileLock, IN PFILE_OBJECT FileObject, IN PEPROCESS Process, IN ULONG Key, IN PVOID Context OPTIONAL)
LARGE_INTEGER RfsdSysTime(IN ULONG i_time)
_In_ PDEVICE_OBJECT DeviceObject
struct _RFSD_FCB * PRFSD_FCB
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 PLARGE_INTEGER IN PLARGE_INTEGER PEPROCESS ULONG BOOLEAN FailImmediately
BOOLEAN NTAPI RfsdFastIoCheckIfPossible(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 PsGetCurrentProcess
BOOLEAN NTAPI RfsdFastIoUnlockAll(IN PFILE_OBJECT FileObject, IN PEPROCESS Process, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
#define EXCEPTION_EXECUTE_HANDLER
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
#define FILE_ATTRIBUTE_DIRECTORY
BOOLEAN NTAPI RfsdFastIoQueryStandardInfo(IN PFILE_OBJECT FileObject, IN BOOLEAN Wait, OUT PFILE_STANDARD_INFORMATION Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
IN PLARGE_INTEGER IN ULONG IN BOOLEAN IN ULONG LockKey
#define RfsdGetCurrentProcessName()
BOOLEAN NTAPI RfsdFastIoQueryBasicInfo(IN PFILE_OBJECT FileObject, IN BOOLEAN Wait, OUT PFILE_BASIC_INFORMATION Buffer, OUT PIO_STATUS_BLOCK IoStatus, IN PDEVICE_OBJECT DeviceObject)
VOID FASTCALL ExReleaseResourceLite(IN PERESOURCE Resource)
#define VCB_WRITE_PROTECTED
#define FILE_ATTRIBUTE_NORMAL
_Must_inspect_result_ _In_ PFLT_INSTANCE _Out_ PBOOLEAN IsDirectory
#define FILE_STANDARD_INFORMATION
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
NTSTATUS NTAPI FsRtlFastUnlockAll(IN PFILE_LOCK FileLock, IN PFILE_OBJECT FileObject, IN PEPROCESS Process, IN PVOID Context OPTIONAL)
BOOLEAN NTAPI RfsdFastIoLock(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)
IN PFCB IN PFILE_OBJECT FileObject IN ULONG AllocationSize
BOOLEAN NTAPI RfsdFastIoUnlockSingle(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)
_In_ PFCB _In_ LONGLONG FileOffset
IN PLARGE_INTEGER IN PLARGE_INTEGER PEPROCESS ULONG BOOLEAN BOOLEAN ExclusiveLock
BOOLEAN NTAPI ExAcquireResourceSharedLite(IN PERESOURCE Resource, IN BOOLEAN Wait)
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)
BOOLEAN NTAPI RfsdFastIoQueryNetworkOpenInfo(IN PFILE_OBJECT FileObject, IN BOOLEAN Wait, IN OUT PFILE_NETWORK_OPEN_INFORMATION PFNOI, 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
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
#define RtlZeroMemory(Destination, Length)
VOID NTAPI ExReleaseResourceForThreadLite(IN PERESOURCE Resource, IN ERESOURCE_THREAD Thread)
#define _SEH2_EXCEPT(...)
#define _SEH2_GetExceptionCode()
#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 RfsdFastIoWrite(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 FILE_BASIC_INFORMATION