_In_ BOOLEAN FsActive
);
+NTSTATUS
+NTAPI
+FltpDispatch(
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _Inout_ PIRP Irp
+);
+
+NTSTATUS
+NTAPI
+FltpCreate(
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _Inout_ PIRP Irp
+);
+
+NTSTATUS
+NTAPI
+FltpFsControl(
+ _In_ PDEVICE_OBJECT DeviceObject,
+ _Inout_ PIRP Irp
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoCheckIfPossible(
+ _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
+);
+
+
+BOOLEAN
+NTAPI
+FltpFastIoRead(
+ _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
+FltpFastIoWrite(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ BOOLEAN Wait,
+ _In_ ULONG LockKey,
+ _In_ PVOID Buffer,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoQueryBasicInfo(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ BOOLEAN Wait,
+ _Out_ PFILE_BASIC_INFORMATION Buffer,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoQueryStandardInfo(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ BOOLEAN Wait,
+ _Out_ PFILE_STANDARD_INFORMATION Buffer,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoLock(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ PLARGE_INTEGER Length,
+ _In_ PEPROCESS ProcessId,
+ _In_ ULONG Key,
+ _In_ BOOLEAN FailImmediately,
+ _In_ BOOLEAN ExclusiveLock,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoUnlockSingle(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ PLARGE_INTEGER Length,
+ _In_ PEPROCESS ProcessId,
+ _In_ ULONG Key,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoUnlockAll(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PEPROCESS ProcessId,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoUnlockAllByKey(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PVOID ProcessId,
+ _In_ ULONG Key,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoDeviceControl(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ BOOLEAN Wait,
+ _In_opt_ PVOID InputBuffer,
+ _In_ ULONG InputBufferLength,
+ _Out_opt_ PVOID OutputBuffer,
+ _In_ ULONG OutputBufferLength,
+ _In_ ULONG IoControlCode,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+VOID
+NTAPI
+FltpFastIoDetachDevice(
+ _In_ PDEVICE_OBJECT SourceDevice,
+ _In_ PDEVICE_OBJECT TargetDevice
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoQueryNetworkOpenInfo(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ BOOLEAN Wait,
+ _Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoMdlRead(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ ULONG LockKey,
+ _Out_ PMDL *MdlChain,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoMdlReadComplete(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PMDL MdlChain,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoPrepareMdlWrite(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ ULONG LockKey,
+ _Out_ PMDL *MdlChain,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoMdlWriteComplete(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ PMDL MdlChain,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoReadCompressed(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ ULONG LockKey,
+ _Out_ PVOID Buffer,
+ _Out_ PMDL *MdlChain,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _Out_ PCOMPRESSED_DATA_INFO CompressedDataInfo,
+ _In_ ULONG CompressedDataInfoLength,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoWriteCompressed(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ ULONG Length,
+ _In_ ULONG LockKey,
+ _In_ PVOID Buffer,
+ _Out_ PMDL *MdlChain,
+ _Out_ PIO_STATUS_BLOCK IoStatus,
+ _In_ PCOMPRESSED_DATA_INFO CompressedDataInfo,
+ _In_ ULONG CompressedDataInfoLength,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoMdlReadCompleteCompressed(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PMDL MdlChain,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoMdlWriteCompleteCompressed(
+ _In_ PFILE_OBJECT FileObject,
+ _In_ PLARGE_INTEGER FileOffset,
+ _In_ PMDL MdlChain,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+BOOLEAN
+NTAPI
+FltpFastIoQueryOpen(
+ _Inout_ PIRP Irp,
+ _Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
+ _In_ PDEVICE_OBJECT DeviceObject
+);
+
+
#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry)
#pragma alloc_text(PAGE, FltpAttachToFileSystemDevice)
#pragma alloc_text(PAGE, FltpDetachFromFileSystemDevice)
#pragma alloc_text(PAGE, FltpFsNotification)
-//#pragma alloc_text(PAGE, )
+#pragma alloc_text(PAGE, FltpDispatch)
+#pragma alloc_text(PAGE, FltpCreate)
+#pragma alloc_text(PAGE, FltpFsControl)
+#pragma alloc_text(PAGE, FltpFastIoRead)
+#pragma alloc_text(PAGE, FltpFastIoWrite)
+#pragma alloc_text(PAGE, FltpFastIoQueryBasicInfo)
+#pragma alloc_text(PAGE, FltpFastIoQueryStandardInfo)
+#pragma alloc_text(PAGE, FltpFastIoLock)
+#pragma alloc_text(PAGE, FltpFastIoUnlockSingle)
+#pragma alloc_text(PAGE, FltpFastIoUnlockAll)
+#pragma alloc_text(PAGE, FltpFastIoUnlockAllByKey)
+#pragma alloc_text(PAGE, FltpFastIoDeviceControl)
+#pragma alloc_text(PAGE, FltpFastIoDetachDevice)
+#pragma alloc_text(PAGE, FltpFastIoQueryNetworkOpenInfo)
+#pragma alloc_text(PAGE, FltpFastIoMdlRead)
+#pragma alloc_text(PAGE, FltpFastIoMdlReadComplete)
+#pragma alloc_text(PAGE, FltpFastIoPrepareMdlWrite)
+#pragma alloc_text(PAGE, FltpFastIoMdlWriteComplete)
+#pragma alloc_text(PAGE, FltpFastIoReadCompressed)
+#pragma alloc_text(PAGE, FltpFastIoWriteCompressed)
+#pragma alloc_text(PAGE, FltpFastIoMdlReadCompleteCompressed)
+#pragma alloc_text(PAGE, FltpFastIoMdlWriteCompleteCompressed)
+#pragma alloc_text(PAGE, FltpFastIoQueryOpen)
#endif
#define MAX_DEVNAME_LENGTH 64
_Inout_ PIRP Irp)
{
PFLTMGR_DEVICE_EXTENSION DeviceExtension;
+
+ PAGED_CODE();
+
DeviceExtension = DeviceObject->DeviceExtension;
__debugbreak();
FLT_ASSERT(DeviceExtension &&
_Inout_ PIRP Irp)
{
PFLTMGR_DEVICE_EXTENSION DeviceExtension;
+
+ PAGED_CODE();
+
DeviceExtension = DeviceObject->DeviceExtension;
__debugbreak();
FLT_ASSERT(DeviceExtension &&
_Inout_ PIRP Irp)
{
PFLTMGR_DEVICE_EXTENSION DeviceExtension;
+
+ PAGED_CODE();
+
DeviceExtension = DeviceObject->DeviceExtension;
__debugbreak();
FLT_ASSERT(DeviceExtension &&
/* FASTIO ROUTINES ************************************************/
BOOLEAN
+NTAPI
FltpFastIoCheckIfPossible(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ ULONG Length,
}
BOOLEAN
+NTAPI
FltpFastIoRead(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ ULONG Length,
}
BOOLEAN
+NTAPI
FltpFastIoWrite(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ ULONG Length,
}
BOOLEAN
+NTAPI
FltpFastIoQueryBasicInfo(_In_ PFILE_OBJECT FileObject,
_In_ BOOLEAN Wait,
_Out_ PFILE_BASIC_INFORMATION Buffer,
}
BOOLEAN
+NTAPI
FltpFastIoQueryStandardInfo(_In_ PFILE_OBJECT FileObject,
_In_ BOOLEAN Wait,
_Out_ PFILE_STANDARD_INFORMATION Buffer,
}
BOOLEAN
+NTAPI
FltpFastIoLock(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ PLARGE_INTEGER Length,
}
BOOLEAN
+NTAPI
FltpFastIoUnlockSingle(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ PLARGE_INTEGER Length,
}
BOOLEAN
+NTAPI
FltpFastIoUnlockAll(_In_ PFILE_OBJECT FileObject,
_In_ PEPROCESS ProcessId,
_Out_ PIO_STATUS_BLOCK IoStatus,
}
BOOLEAN
+NTAPI
FltpFastIoUnlockAllByKey(_In_ PFILE_OBJECT FileObject,
_In_ PVOID ProcessId,
_In_ ULONG Key,
}
BOOLEAN
+NTAPI
FltpFastIoDeviceControl(_In_ PFILE_OBJECT FileObject,
_In_ BOOLEAN Wait,
_In_opt_ PVOID InputBuffer,
}
VOID
+NTAPI
FltpFastIoDetachDevice(_In_ PDEVICE_OBJECT SourceDevice,
_In_ PDEVICE_OBJECT TargetDevice)
{
}
BOOLEAN
+NTAPI
FltpFastIoQueryNetworkOpenInfo(_In_ PFILE_OBJECT FileObject,
_In_ BOOLEAN Wait,
_Out_ PFILE_NETWORK_OPEN_INFORMATION Buffer,
}
BOOLEAN
+NTAPI
FltpFastIoMdlRead(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ ULONG Length,
}
BOOLEAN
+NTAPI
FltpFastIoMdlReadComplete(_In_ PFILE_OBJECT FileObject,
_In_ PMDL MdlChain,
_In_ PDEVICE_OBJECT DeviceObject)
}
BOOLEAN
+NTAPI
FltpFastIoPrepareMdlWrite(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ ULONG Length,
}
BOOLEAN
+NTAPI
FltpFastIoMdlWriteComplete(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ PMDL MdlChain,
}
BOOLEAN
+NTAPI
FltpFastIoReadCompressed(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ ULONG Length,
}
BOOLEAN
+NTAPI
FltpFastIoWriteCompressed(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ ULONG Length,
}
BOOLEAN
+NTAPI
FltpFastIoMdlReadCompleteCompressed(_In_ PFILE_OBJECT FileObject,
_In_ PMDL MdlChain,
_In_ PDEVICE_OBJECT DeviceObject)
}
BOOLEAN
+NTAPI
FltpFastIoMdlWriteCompleteCompressed(_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER FileOffset,
_In_ PMDL MdlChain,
}
BOOLEAN
+NTAPI
FltpFastIoQueryOpen(_Inout_ PIRP Irp,
_Out_ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
_In_ PDEVICE_OBJECT DeviceObject)
/* Fill out the FastIo table */
RtlZeroMemory(FastIoDispatch, sizeof(FAST_IO_DISPATCH));
FastIoDispatch->SizeOfFastIoDispatch = sizeof(FAST_IO_DISPATCH);
- FastIoDispatch->FastIoCheckIfPossible = (PFAST_IO_CHECK_IF_POSSIBLE)FltpFastIoCheckIfPossible;
- FastIoDispatch->FastIoRead = (PFAST_IO_READ)FltpFastIoRead;
- FastIoDispatch->FastIoWrite = (PFAST_IO_WRITE)FltpFastIoWrite;
- FastIoDispatch->FastIoQueryBasicInfo = (PFAST_IO_QUERY_BASIC_INFO)FltpFastIoQueryBasicInfo;
- FastIoDispatch->FastIoQueryStandardInfo = (PFAST_IO_QUERY_STANDARD_INFO)FltpFastIoQueryStandardInfo;
- FastIoDispatch->FastIoLock = (PFAST_IO_LOCK)FltpFastIoLock;
- FastIoDispatch->FastIoUnlockSingle = (PFAST_IO_UNLOCK_SINGLE)FltpFastIoUnlockSingle;
- FastIoDispatch->FastIoUnlockAll = (PFAST_IO_UNLOCK_ALL)FltpFastIoUnlockAll;
- FastIoDispatch->FastIoUnlockAllByKey = (PFAST_IO_UNLOCK_ALL_BY_KEY)FltpFastIoUnlockAllByKey;
- FastIoDispatch->FastIoDeviceControl = (PFAST_IO_DEVICE_CONTROL)FltpFastIoDeviceControl;
- FastIoDispatch->FastIoDetachDevice = (PFAST_IO_DETACH_DEVICE)FltpFastIoDetachDevice;
- FastIoDispatch->FastIoQueryNetworkOpenInfo = (PFAST_IO_QUERY_NETWORK_OPEN_INFO)FltpFastIoQueryNetworkOpenInfo;
- FastIoDispatch->MdlRead = (PFAST_IO_MDL_READ)FltpFastIoMdlRead;
- FastIoDispatch->MdlReadComplete = (PFAST_IO_MDL_READ_COMPLETE)FltpFastIoMdlReadComplete;
- FastIoDispatch->PrepareMdlWrite = (PFAST_IO_PREPARE_MDL_WRITE)FltpFastIoPrepareMdlWrite;
- FastIoDispatch->MdlWriteComplete = (PFAST_IO_MDL_WRITE_COMPLETE)FltpFastIoMdlWriteComplete;
- FastIoDispatch->FastIoReadCompressed = (PFAST_IO_READ_COMPRESSED)FltpFastIoReadCompressed;
- FastIoDispatch->FastIoWriteCompressed = (PFAST_IO_WRITE_COMPRESSED)FltpFastIoWriteCompressed;
- FastIoDispatch->MdlReadCompleteCompressed = (PFAST_IO_MDL_READ_COMPLETE_COMPRESSED)FltpFastIoMdlReadCompleteCompressed;
- FastIoDispatch->MdlWriteCompleteCompressed = (PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)FltpFastIoMdlWriteCompleteCompressed;
- FastIoDispatch->FastIoQueryOpen = (PFAST_IO_QUERY_OPEN)FltpFastIoQueryOpen;
+ FastIoDispatch->FastIoCheckIfPossible = FltpFastIoCheckIfPossible;
+ FastIoDispatch->FastIoRead = FltpFastIoRead;
+ FastIoDispatch->FastIoWrite = FltpFastIoWrite;
+ FastIoDispatch->FastIoQueryBasicInfo = FltpFastIoQueryBasicInfo;
+ FastIoDispatch->FastIoQueryStandardInfo = FltpFastIoQueryStandardInfo;
+ FastIoDispatch->FastIoLock = FltpFastIoLock;
+ FastIoDispatch->FastIoUnlockSingle = FltpFastIoUnlockSingle;
+ FastIoDispatch->FastIoUnlockAll = FltpFastIoUnlockAll;
+ FastIoDispatch->FastIoUnlockAllByKey = FltpFastIoUnlockAllByKey;
+ FastIoDispatch->FastIoDeviceControl = FltpFastIoDeviceControl;
+ FastIoDispatch->FastIoDetachDevice = FltpFastIoDetachDevice;
+ FastIoDispatch->FastIoQueryNetworkOpenInfo = FltpFastIoQueryNetworkOpenInfo;
+ FastIoDispatch->MdlRead = FltpFastIoMdlRead;
+ FastIoDispatch->MdlReadComplete = FltpFastIoMdlReadComplete;
+ FastIoDispatch->PrepareMdlWrite = FltpFastIoPrepareMdlWrite;
+ FastIoDispatch->MdlWriteComplete = FltpFastIoMdlWriteComplete;
+ FastIoDispatch->FastIoReadCompressed = FltpFastIoReadCompressed;
+ FastIoDispatch->FastIoWriteCompressed = FltpFastIoWriteCompressed;
+ FastIoDispatch->MdlReadCompleteCompressed = FltpFastIoMdlReadCompleteCompressed;
+ FastIoDispatch->MdlWriteCompleteCompressed = FltpFastIoMdlWriteCompleteCompressed;
+ FastIoDispatch->FastIoQueryOpen = FltpFastIoQueryOpen;
/* Store the FastIo table for internal and our access */
DriverObject->FastIoDispatch = FastIoDispatch;