This commit is contained in:
Bill Zissimopoulos 2015-11-16 22:29:15 -08:00
parent 552def98aa
commit d7c43c2f30
3 changed files with 93 additions and 32 deletions

View File

@ -75,11 +75,11 @@ DriverEntry(
FspFastIoDispatch.FastIoUnlockAll = 0;
FspFastIoDispatch.FastIoUnlockAllByKey = 0;
FspFastIoDispatch.FastIoDeviceControl = 0;
FspFastIoDispatch.AcquireFileForNtCreateSection = 0;
FspFastIoDispatch.ReleaseFileForNtCreateSection = 0;
FspFastIoDispatch.AcquireFileForNtCreateSection = FspAcquireFileForNtCreateSection;
FspFastIoDispatch.ReleaseFileForNtCreateSection = FspReleaseFileForNtCreateSection;
FspFastIoDispatch.FastIoDetachDevice = 0;
FspFastIoDispatch.FastIoQueryNetworkOpenInfo = 0;
FspFastIoDispatch.AcquireForModWrite = 0;
FspFastIoDispatch.AcquireForModWrite = FspAcquireForModWrite;
FspFastIoDispatch.MdlRead = FsRtlMdlReadDev;
FspFastIoDispatch.MdlReadComplete = FsRtlMdlReadCompleteDev;
FspFastIoDispatch.PrepareMdlWrite = FsRtlPrepareMdlWriteDev;
@ -89,22 +89,11 @@ DriverEntry(
FspFastIoDispatch.MdlReadCompleteCompressed = 0;
FspFastIoDispatch.MdlWriteCompleteCompressed = 0;
FspFastIoDispatch.FastIoQueryOpen = 0;
FspFastIoDispatch.ReleaseForModWrite = 0;
FspFastIoDispatch.AcquireForCcFlush = 0;
FspFastIoDispatch.ReleaseForCcFlush = 0;
FspFastIoDispatch.ReleaseForModWrite = FspReleaseForModWrite;
FspFastIoDispatch.AcquireForCcFlush = FspAcquireForCcFlush;
FspFastIoDispatch.ReleaseForCcFlush = FspReleaseForCcFlush;
DriverObject->FastIoDispatch = &FspFastIoDispatch;
/* setup filter callbacks */
FS_FILTER_CALLBACKS FspFilterCallbacks = { 0 };
FspFilterCallbacks.SizeOfFsFilterCallbacks = sizeof FspFilterCallbacks;
FspFilterCallbacks.PreAcquireForSectionSynchronization = FspAcquireForSectionSynchronization;
Status = FsRtlRegisterFileSystemFilterCallbacks(DriverObject, &FspFilterCallbacks);
if (!NT_SUCCESS(Status))
{
IoDeleteDevice(FspDeviceObject);
return Status;
}
/* register as a file system; this informs all filter drivers */
IoRegisterFileSystem(FspDeviceObject);

View File

@ -43,10 +43,12 @@ DRIVER_DISPATCH FspWrite;
FAST_IO_CHECK_IF_POSSIBLE FspFastIoCheckIfPossible;
/* filter callbacks */
NTSTATUS
FspAcquireForSectionSynchronization(
_In_ PFS_FILTER_CALLBACK_DATA Data,
_Out_ PVOID *CompletionContext);
FAST_IO_ACQUIRE_FILE FspAcquireFileForNtCreateSection;
FAST_IO_RELEASE_FILE FspReleaseFileForNtCreateSection;
FAST_IO_ACQUIRE_FOR_MOD_WRITE FspAcquireForModWrite;
FAST_IO_RELEASE_FOR_MOD_WRITE FspReleaseForModWrite;
FAST_IO_ACQUIRE_FOR_CCFLUSH FspAcquireForCcFlush;
FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush;
/* extern */
PDEVICE_OBJECT FspDeviceObject;

View File

@ -6,22 +6,92 @@
#include <sys/driver.h>
NTSTATUS
FspAcquireForSectionSynchronization(
_In_ PFS_FILTER_CALLBACK_DATA Data,
_Out_ PVOID *CompletionContext);
FAST_IO_ACQUIRE_FILE FspAcquireFileForNtCreateSection;
FAST_IO_RELEASE_FILE FspReleaseFileForNtCreateSection;
FAST_IO_ACQUIRE_FOR_MOD_WRITE FspAcquireForModWrite;
FAST_IO_RELEASE_FOR_MOD_WRITE FspReleaseForModWrite;
FAST_IO_ACQUIRE_FOR_CCFLUSH FspAcquireForCcFlush;
FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspCreate)
#pragma alloc_text(PAGE, FspAcquireFileForNtCreateSection)
#pragma alloc_text(PAGE, FspReleaseFileForNtCreateSection)
#pragma alloc_text(PAGE, FspAcquireForModWrite)
#pragma alloc_text(PAGE, FspReleaseForModWrite)
#pragma alloc_text(PAGE, FspAcquireForCcFlush)
#pragma alloc_text(PAGE, FspReleaseForCcFlush)
#endif
NTSTATUS
FspAcquireForSectionSynchronization(
_In_ PFS_FILTER_CALLBACK_DATA Data,
_Out_ PVOID *CompletionContext)
VOID
FspAcquireFileForNtCreateSection(
_In_ PFILE_OBJECT FileObject)
{
UNREFERENCED_PARAMETER(Data);
UNREFERENCED_PARAMETER(CompletionContext);
UNREFERENCED_PARAMETER(FileObject);
PAGED_CODE();
}
VOID
FspReleaseFileForNtCreateSection(
_In_ PFILE_OBJECT FileObject)
{
UNREFERENCED_PARAMETER(FileObject);
PAGED_CODE();
}
NTSTATUS
FspAcquireForModWrite(
_In_ PFILE_OBJECT FileObject,
_In_ PLARGE_INTEGER EndingOffset,
_Out_ PERESOURCE *ResourceToRelease,
_In_ PDEVICE_OBJECT DeviceObject)
{
UNREFERENCED_PARAMETER(FileObject);
UNREFERENCED_PARAMETER(EndingOffset);
UNREFERENCED_PARAMETER(ResourceToRelease);
UNREFERENCED_PARAMETER(DeviceObject);
PAGED_CODE();
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
FspReleaseForModWrite(
_In_ PFILE_OBJECT FileObject,
_In_ PERESOURCE ResourceToRelease,
_In_ PDEVICE_OBJECT DeviceObject)
{
UNREFERENCED_PARAMETER(FileObject);
UNREFERENCED_PARAMETER(ResourceToRelease);
UNREFERENCED_PARAMETER(DeviceObject);
PAGED_CODE();
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
FspAcquireForCcFlush(
_In_ PFILE_OBJECT FileObject,
_In_ PDEVICE_OBJECT DeviceObject)
{
UNREFERENCED_PARAMETER(FileObject);
UNREFERENCED_PARAMETER(DeviceObject);
PAGED_CODE();
return STATUS_NOT_IMPLEMENTED;
}
NTSTATUS
FspReleaseForCcFlush(
_In_ PFILE_OBJECT FileObject,
_In_ PDEVICE_OBJECT DeviceObject)
{
UNREFERENCED_PARAMETER(FileObject);
UNREFERENCED_PARAMETER(DeviceObject);
PAGED_CODE();