From 99c2a6a5e5393d4acf4f1aed32b3deedaaab870c Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Mon, 16 Nov 2015 15:40:31 -0800 Subject: [PATCH] sys: create basic driver structure --- build/VStudio/winfsp.vcxproj | 15 ++++++++ build/VStudio/winfsp.vcxproj.filters | 45 ++++++++++++++++++++++ src/sys/cleanup.c | 24 ++++++++++++ src/sys/close.c | 24 ++++++++++++ src/sys/create.c | 24 ++++++++++++ src/sys/devctrl.c | 24 ++++++++++++ src/sys/dirctrl.c | 24 ++++++++++++ src/sys/driver.c | 57 ++++++++++++++++++++++++++-- src/sys/driver.h | 26 ++++++++++++- src/sys/ea.c | 37 ++++++++++++++++++ src/sys/fileinfo.c | 37 ++++++++++++++++++ src/sys/flush.c | 24 ++++++++++++ src/sys/fsctrl.c | 24 ++++++++++++ src/sys/lockctrl.c | 24 ++++++++++++ src/sys/read.c | 24 ++++++++++++ src/sys/seinfo.c | 37 ++++++++++++++++++ src/sys/shutdown.c | 24 ++++++++++++ src/sys/volinfo.c | 37 ++++++++++++++++++ src/sys/write.c | 24 ++++++++++++ 19 files changed, 551 insertions(+), 4 deletions(-) create mode 100644 src/sys/cleanup.c create mode 100644 src/sys/close.c create mode 100644 src/sys/create.c create mode 100644 src/sys/devctrl.c create mode 100644 src/sys/dirctrl.c create mode 100644 src/sys/ea.c create mode 100644 src/sys/fileinfo.c create mode 100644 src/sys/flush.c create mode 100644 src/sys/fsctrl.c create mode 100644 src/sys/lockctrl.c create mode 100644 src/sys/read.c create mode 100644 src/sys/seinfo.c create mode 100644 src/sys/shutdown.c create mode 100644 src/sys/volinfo.c create mode 100644 src/sys/write.c diff --git a/build/VStudio/winfsp.vcxproj b/build/VStudio/winfsp.vcxproj index 7687bfee..93eb362f 100644 --- a/build/VStudio/winfsp.vcxproj +++ b/build/VStudio/winfsp.vcxproj @@ -118,7 +118,22 @@ + + + + + + + + + + + + + + + diff --git a/build/VStudio/winfsp.vcxproj.filters b/build/VStudio/winfsp.vcxproj.filters index 3a644b05..589196c9 100644 --- a/build/VStudio/winfsp.vcxproj.filters +++ b/build/VStudio/winfsp.vcxproj.filters @@ -18,6 +18,51 @@ Source Files + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + diff --git a/src/sys/cleanup.c b/src/sys/cleanup.c new file mode 100644 index 00000000..66b6e96d --- /dev/null +++ b/src/sys/cleanup.c @@ -0,0 +1,24 @@ +/** + * @file sys/cleanup.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspCleanup; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspCleanup) +#endif + +NTSTATUS +FspCleanup( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/close.c b/src/sys/close.c new file mode 100644 index 00000000..aa6d7b98 --- /dev/null +++ b/src/sys/close.c @@ -0,0 +1,24 @@ +/** + * @file sys/close.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspClose; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspClose) +#endif + +NTSTATUS +FspClose( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/create.c b/src/sys/create.c new file mode 100644 index 00000000..cbb62e50 --- /dev/null +++ b/src/sys/create.c @@ -0,0 +1,24 @@ +/** + * @file sys/create.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspCreate; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspCreate) +#endif + +NTSTATUS +FspCreate( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/devctrl.c b/src/sys/devctrl.c new file mode 100644 index 00000000..23be0f14 --- /dev/null +++ b/src/sys/devctrl.c @@ -0,0 +1,24 @@ +/** + * @file sys/devctrl.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspDeviceControl; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspDeviceControl) +#endif + +NTSTATUS +FspDeviceControl( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/dirctrl.c b/src/sys/dirctrl.c new file mode 100644 index 00000000..61f4805b --- /dev/null +++ b/src/sys/dirctrl.c @@ -0,0 +1,24 @@ +/** + * @file sys/dirctrl.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspDirectoryControl; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspDirectoryControl) +#endif + +NTSTATUS +FspDirectoryControl( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/driver.c b/src/sys/driver.c index 30578be9..1d55c2d3 100644 --- a/src/sys/driver.c +++ b/src/sys/driver.c @@ -6,10 +6,14 @@ #include +PDEVICE_OBJECT FspDeviceObject; + DRIVER_INITIALIZE DriverEntry; +DRIVER_UNLOAD FspUnload; #ifdef ALLOC_PRAGMA #pragma alloc_text(INIT, DriverEntry) +#pragma alloc_text(PAGE, FspUnload) #endif NTSTATUS @@ -17,8 +21,55 @@ DriverEntry( _In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath) { - UNREFERENCED_PARAMETER(DriverObject); UNREFERENCED_PARAMETER(RegistryPath); - DEBUGLOG(""); - return STATUS_NOT_IMPLEMENTED; + + NTSTATUS Status; + UNICODE_STRING DeviceName; + + /* create the file system device object */ + RtlInitUnicodeString(&DeviceName, L"" DRIVER_NAME); + Status = IoCreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_FILE_SYSTEM, 0, FALSE, + &FspDeviceObject); + if (!NT_SUCCESS(Status)) + return Status; + + /* setup the driver object */ + DriverObject->DriverUnload = FspUnload; + DriverObject->MajorFunction[IRP_MJ_CREATE] = FspCreate; + DriverObject->MajorFunction[IRP_MJ_CREATE_NAMED_PIPE] = 0; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = FspClose; + DriverObject->MajorFunction[IRP_MJ_READ] = FspRead; + DriverObject->MajorFunction[IRP_MJ_WRITE] = FspWrite; + DriverObject->MajorFunction[IRP_MJ_QUERY_INFORMATION] = FspQueryInformation; + DriverObject->MajorFunction[IRP_MJ_SET_INFORMATION] = FspSetInformation; + DriverObject->MajorFunction[IRP_MJ_QUERY_EA] = FspQueryEa; + DriverObject->MajorFunction[IRP_MJ_SET_EA] = FspSetEa; + DriverObject->MajorFunction[IRP_MJ_FLUSH_BUFFERS] = FspFlushBuffers; + DriverObject->MajorFunction[IRP_MJ_QUERY_VOLUME_INFORMATION] = FspQueryVolumeInformation; + DriverObject->MajorFunction[IRP_MJ_SET_VOLUME_INFORMATION] = FspSetVolumeInformation; + DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = FspDirectoryControl; + DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = FspFileSystemControl; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = FspDeviceControl; + DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = 0; + DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = FspShutdown; + DriverObject->MajorFunction[IRP_MJ_LOCK_CONTROL] = FspLockControl; + DriverObject->MajorFunction[IRP_MJ_CLEANUP] = FspCleanup; + DriverObject->MajorFunction[IRP_MJ_CREATE_MAILSLOT] = 0; + DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] = FspQuerySecurity; + DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] = FspSetSecurity; + DriverObject->MajorFunction[IRP_MJ_POWER] = 0; + DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = 0; + DriverObject->MajorFunction[IRP_MJ_DEVICE_CHANGE] = 0; + DriverObject->MajorFunction[IRP_MJ_QUERY_QUOTA] = 0; + DriverObject->MajorFunction[IRP_MJ_SET_QUOTA] = 0; + DriverObject->MajorFunction[IRP_MJ_PNP] = 0; + + return STATUS_SUCCESS; +} + +VOID +FspUnload( + _In_ PDRIVER_OBJECT DriverObject) +{ + UNREFERENCED_PARAMETER(DriverObject); } diff --git a/src/sys/driver.h b/src/sys/driver.h index 4aa6e213..655f0f0c 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -9,10 +9,34 @@ #include +#define DRIVER_NAME "winfsp" + #if DBG -#define DEBUGLOG(fmt, ...) DbgPrint(__FUNCTION__ ": " fmt "\n", __VA_ARGS__) +#define DEBUGLOG(fmt, ...) \ + DbgPrint(DRIVER_NAME ": " __FUNCTION__ ": " fmt "\n", __VA_ARGS__) #else #define DEBUGLOG(fmt, ...) ((void)0) #endif +/* driver major functions */ +DRIVER_DISPATCH FspCleanup; +DRIVER_DISPATCH FspClose; +DRIVER_DISPATCH FspCreate; +DRIVER_DISPATCH FspDeviceControl; +DRIVER_DISPATCH FspDirectoryControl; +DRIVER_DISPATCH FspFileSystemControl; +DRIVER_DISPATCH FspFlushBuffers; +DRIVER_DISPATCH FspLockControl; +DRIVER_DISPATCH FspQueryEa; +DRIVER_DISPATCH FspQueryInformation; +DRIVER_DISPATCH FspQuerySecurity; +DRIVER_DISPATCH FspQueryVolumeInformation; +DRIVER_DISPATCH FspRead; +DRIVER_DISPATCH FspSetEa; +DRIVER_DISPATCH FspSetInformation; +DRIVER_DISPATCH FspSetSecurity; +DRIVER_DISPATCH FspSetVolumeInformation; +DRIVER_DISPATCH FspShutdown; +DRIVER_DISPATCH FspWrite; + #endif diff --git a/src/sys/ea.c b/src/sys/ea.c new file mode 100644 index 00000000..c81f841f --- /dev/null +++ b/src/sys/ea.c @@ -0,0 +1,37 @@ +/** + * @file sys/ea.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspQueryEa; +DRIVER_DISPATCH FspSetEa; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspQueryEa) +#pragma alloc_text(PAGE, FspSetEa) +#endif + +NTSTATUS +FspQueryEa( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +FspSetEa( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/fileinfo.c b/src/sys/fileinfo.c new file mode 100644 index 00000000..41e56db7 --- /dev/null +++ b/src/sys/fileinfo.c @@ -0,0 +1,37 @@ +/** + * @file sys/fileinfo.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspQueryInformation; +DRIVER_DISPATCH FspSetInformation; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspQueryInformation) +#pragma alloc_text(PAGE, FspSetInformation) +#endif + +NTSTATUS +FspQueryInformation( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +FspSetInformation( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/flush.c b/src/sys/flush.c new file mode 100644 index 00000000..436fa75d --- /dev/null +++ b/src/sys/flush.c @@ -0,0 +1,24 @@ +/** + * @file sys/flush.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspFlushBuffers; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspFlushBuffers) +#endif + +NTSTATUS +FspFlushBuffers( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/fsctrl.c b/src/sys/fsctrl.c new file mode 100644 index 00000000..803b2fb5 --- /dev/null +++ b/src/sys/fsctrl.c @@ -0,0 +1,24 @@ +/** + * @file sys/fsctrl.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspFileSystemControl; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspFileSystemControl) +#endif + +NTSTATUS +FspFileSystemControl( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/lockctrl.c b/src/sys/lockctrl.c new file mode 100644 index 00000000..a1d580a4 --- /dev/null +++ b/src/sys/lockctrl.c @@ -0,0 +1,24 @@ +/** + * @file sys/lockctrl.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspLockControl; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspLockControl) +#endif + +NTSTATUS +FspLockControl( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/read.c b/src/sys/read.c new file mode 100644 index 00000000..5b8949f4 --- /dev/null +++ b/src/sys/read.c @@ -0,0 +1,24 @@ +/** + * @file sys/read.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspRead; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspRead) +#endif + +NTSTATUS +FspRead( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/seinfo.c b/src/sys/seinfo.c new file mode 100644 index 00000000..06b62364 --- /dev/null +++ b/src/sys/seinfo.c @@ -0,0 +1,37 @@ +/** + * @file sys/seinfo.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspQuerySecurity; +DRIVER_DISPATCH FspSetSecurity; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspQuerySecurity) +#pragma alloc_text(PAGE, FspSetSecurity) +#endif + +NTSTATUS +FspQuerySecurity( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +FspSetSecurity( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/shutdown.c b/src/sys/shutdown.c new file mode 100644 index 00000000..49a7629e --- /dev/null +++ b/src/sys/shutdown.c @@ -0,0 +1,24 @@ +/** + * @file sys/shutdown.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspShutdown; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspShutdown) +#endif + +NTSTATUS +FspShutdown( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/volinfo.c b/src/sys/volinfo.c new file mode 100644 index 00000000..eb1dbbfe --- /dev/null +++ b/src/sys/volinfo.c @@ -0,0 +1,37 @@ +/** + * @file sys/volinfo.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspQueryVolumeInformation; +DRIVER_DISPATCH FspSetVolumeInformation; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspQueryVolumeInformation) +#pragma alloc_text(PAGE, FspSetVolumeInformation) +#endif + +NTSTATUS +FspQueryVolumeInformation( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +FspSetVolumeInformation( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +} diff --git a/src/sys/write.c b/src/sys/write.c new file mode 100644 index 00000000..b699b2a1 --- /dev/null +++ b/src/sys/write.c @@ -0,0 +1,24 @@ +/** + * @file sys/write.c + * + * @copyright 2015 Bill Zissimopoulos + */ + +#include + +DRIVER_DISPATCH FspWrite; + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspWrite) +#endif + +NTSTATUS +FspWrite( + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp) +{ + UNREFERENCED_PARAMETER(DeviceObject); + UNREFERENCED_PARAMETER(Irp); + + return STATUS_NOT_IMPLEMENTED; +}