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;
+}