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