diff --git a/src/sys/driver.c b/src/sys/driver.c index 59d969eb..1dbba6b6 100644 --- a/src/sys/driver.c +++ b/src/sys/driver.c @@ -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); diff --git a/src/sys/driver.h b/src/sys/driver.h index 84d67c4b..e07c1d4c 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -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; diff --git a/src/sys/resource.c b/src/sys/resource.c index cf85be6d..6f5a10d7 100644 --- a/src/sys/resource.c +++ b/src/sys/resource.c @@ -6,22 +6,92 @@ #include -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();