diff --git a/build/VStudio/winfsp.vcxproj b/build/VStudio/winfsp.vcxproj index fa2356a8..69e19fb8 100644 --- a/build/VStudio/winfsp.vcxproj +++ b/build/VStudio/winfsp.vcxproj @@ -131,6 +131,7 @@ + diff --git a/build/VStudio/winfsp.vcxproj.filters b/build/VStudio/winfsp.vcxproj.filters index 8e67bd2f..2829d54f 100644 --- a/build/VStudio/winfsp.vcxproj.filters +++ b/build/VStudio/winfsp.vcxproj.filters @@ -54,6 +54,9 @@ Source Files + + Source Files + Source Files diff --git a/src/sys/close.c b/src/sys/close.c index aa6d7b98..a5d23c58 100644 --- a/src/sys/close.c +++ b/src/sys/close.c @@ -20,5 +20,7 @@ FspClose( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/create.c b/src/sys/create.c index cbb62e50..99aeb95f 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -20,5 +20,7 @@ FspCreate( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/devctrl.c b/src/sys/devctrl.c index 23be0f14..629838ea 100644 --- a/src/sys/devctrl.c +++ b/src/sys/devctrl.c @@ -20,5 +20,7 @@ FspDeviceControl( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/dirctrl.c b/src/sys/dirctrl.c index 61f4805b..2d5dbbc5 100644 --- a/src/sys/dirctrl.c +++ b/src/sys/dirctrl.c @@ -20,5 +20,7 @@ FspDirectoryControl( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/driver.c b/src/sys/driver.c index b63cbf69..f997d766 100644 --- a/src/sys/driver.c +++ b/src/sys/driver.c @@ -22,9 +22,9 @@ DriverEntry( UNREFERENCED_PARAMETER(RegistryPath); NTSTATUS Status; - UNICODE_STRING DeviceName; /* create the file system device object */ + UNICODE_STRING DeviceName; RtlInitUnicodeString(&DeviceName, L"" DRIVER_NAME); Status = IoCreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_FILE_SYSTEM, 0, FALSE, &FspDeviceObject); @@ -94,6 +94,17 @@ DriverEntry( FspFastIoDispatch.ReleaseForCcFlush = 0; 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; + } + return STATUS_SUCCESS; } @@ -102,6 +113,11 @@ FspUnload( _In_ PDRIVER_OBJECT DriverObject) { UNREFERENCED_PARAMETER(DriverObject); + + PAGED_CODE(); + + if (0 != FspDeviceObject) + IoDeleteDevice(FspDeviceObject); } PDEVICE_OBJECT FspDeviceObject; diff --git a/src/sys/driver.h b/src/sys/driver.h index b9d9d2c4..84d67c4b 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -42,6 +42,12 @@ DRIVER_DISPATCH FspWrite; /* fast I/O */ FAST_IO_CHECK_IF_POSSIBLE FspFastIoCheckIfPossible; +/* filter callbacks */ +NTSTATUS +FspAcquireForSectionSynchronization( + _In_ PFS_FILTER_CALLBACK_DATA Data, + _Out_ PVOID *CompletionContext); + /* extern */ PDEVICE_OBJECT FspDeviceObject; diff --git a/src/sys/ea.c b/src/sys/ea.c index c81f841f..64560029 100644 --- a/src/sys/ea.c +++ b/src/sys/ea.c @@ -22,6 +22,8 @@ FspQueryEa( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } @@ -33,5 +35,7 @@ FspSetEa( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/fastio.c b/src/sys/fastio.c index 09adfb2e..fc699c5a 100644 --- a/src/sys/fastio.c +++ b/src/sys/fastio.c @@ -33,5 +33,7 @@ FspFastIoCheckIfPossible( UNREFERENCED_PARAMETER(IoStatus); UNREFERENCED_PARAMETER(DeviceObject); + PAGED_CODE(); + return FALSE; } diff --git a/src/sys/fileinfo.c b/src/sys/fileinfo.c index 41e56db7..e04ff711 100644 --- a/src/sys/fileinfo.c +++ b/src/sys/fileinfo.c @@ -22,6 +22,8 @@ FspQueryInformation( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } @@ -33,5 +35,7 @@ FspSetInformation( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/flush.c b/src/sys/flush.c index 436fa75d..7b244730 100644 --- a/src/sys/flush.c +++ b/src/sys/flush.c @@ -20,5 +20,7 @@ FspFlushBuffers( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/fsctrl.c b/src/sys/fsctrl.c index 803b2fb5..d80a77ff 100644 --- a/src/sys/fsctrl.c +++ b/src/sys/fsctrl.c @@ -20,5 +20,7 @@ FspFileSystemControl( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/lockctrl.c b/src/sys/lockctrl.c index a1d580a4..844b2b08 100644 --- a/src/sys/lockctrl.c +++ b/src/sys/lockctrl.c @@ -20,5 +20,7 @@ FspLockControl( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/read.c b/src/sys/read.c index 5b8949f4..e7da7c78 100644 --- a/src/sys/read.c +++ b/src/sys/read.c @@ -20,5 +20,7 @@ FspRead( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/resource.c b/src/sys/resource.c new file mode 100644 index 00000000..cf85be6d --- /dev/null +++ b/src/sys/resource.c @@ -0,0 +1,29 @@ +/** + * @file sys/resource.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +NTSTATUS +FspAcquireForSectionSynchronization( + _In_ PFS_FILTER_CALLBACK_DATA Data, + _Out_ PVOID *CompletionContext); + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspCreate) +#endif + +NTSTATUS +FspAcquireForSectionSynchronization( + _In_ PFS_FILTER_CALLBACK_DATA Data, + _Out_ PVOID *CompletionContext) +{ + UNREFERENCED_PARAMETER(Data); + UNREFERENCED_PARAMETER(CompletionContext); + + PAGED_CODE(); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/security.c b/src/sys/security.c index d1807c8e..5cd0f19d 100644 --- a/src/sys/security.c +++ b/src/sys/security.c @@ -22,6 +22,8 @@ FspQuerySecurity( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } @@ -33,5 +35,7 @@ FspSetSecurity( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/shutdown.c b/src/sys/shutdown.c index 49a7629e..9d448b7b 100644 --- a/src/sys/shutdown.c +++ b/src/sys/shutdown.c @@ -20,5 +20,7 @@ FspShutdown( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/volinfo.c b/src/sys/volinfo.c index eb1dbbfe..37f87c59 100644 --- a/src/sys/volinfo.c +++ b/src/sys/volinfo.c @@ -22,6 +22,8 @@ FspQueryVolumeInformation( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } @@ -33,5 +35,7 @@ FspSetVolumeInformation( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; } diff --git a/src/sys/write.c b/src/sys/write.c index b699b2a1..046ab642 100644 --- a/src/sys/write.c +++ b/src/sys/write.c @@ -20,5 +20,7 @@ FspWrite( UNREFERENCED_PARAMETER(DeviceObject); UNREFERENCED_PARAMETER(Irp); + PAGED_CODE(); + return STATUS_NOT_IMPLEMENTED; }