This commit is contained in:
Bill Zissimopoulos 2015-11-19 13:13:29 -08:00
parent 1a07196686
commit 7c372f9eab
17 changed files with 112 additions and 8 deletions

View File

@ -19,6 +19,17 @@ FspCleanup(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_CLEANUP == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
if (FspFileSystemDeviceExtensionKind == FspDeviceExtension(DeviceObject)->Kind)
{
Result = STATUS_SUCCESS;
Irp->IoStatus.Status = Result;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, FSP_IO_INCREMENT);
FSP_RETURN();
}
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,17 @@ FspClose(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_CLOSE == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
if (FspFileSystemDeviceExtensionKind == FspDeviceExtension(DeviceObject)->Kind)
{
Result = STATUS_SUCCESS;
Irp->IoStatus.Status = Result;
Irp->IoStatus.Information = 0;
IoCompleteRequest(Irp, FSP_IO_INCREMENT);
FSP_RETURN();
}
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,17 @@ FspCreate(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_CREATE == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
if (FspFileSystemDeviceExtensionKind == FspDeviceExtension(DeviceObject)->Kind)
{
Result = STATUS_SUCCESS;
Irp->IoStatus.Status = Result;
Irp->IoStatus.Information = FILE_OPENED;
IoCompleteRequest(Irp, FSP_IO_INCREMENT);
FSP_RETURN();
}
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,8 @@ FspDeviceControl(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_DEVICE_CONTROL == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,8 @@ FspDirectoryControl(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_DIRECTORY_CONTROL == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -24,10 +24,12 @@ DriverEntry(
/* create the file system device object */ /* create the file system device object */
UNICODE_STRING DeviceName; UNICODE_STRING DeviceName;
RtlInitUnicodeString(&DeviceName, L"\\Device\\" DEVICE_NAME); RtlInitUnicodeString(&DeviceName, L"\\Device\\" DEVICE_NAME);
Result = IoCreateDevice(DriverObject, 0, &DeviceName, FILE_DEVICE_FILE_SYSTEM, 0, FALSE, Result = IoCreateDevice(DriverObject,
&FspDeviceObject); sizeof(FSP_FILE_SYSTEM_DEVICE_EXTENSION), &DeviceName, FILE_DEVICE_FILE_SYSTEM, 0, FALSE,
&FspFileSystemDeviceObject);
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
FSP_RETURN(); FSP_RETURN();
FspDeviceExtension(FspFileSystemDeviceObject)->Kind = FspFileSystemDeviceExtensionKind;
/* setup the driver object */ /* setup the driver object */
DriverObject->DriverUnload = FspUnload; DriverObject->DriverUnload = FspUnload;
@ -96,7 +98,7 @@ DriverEntry(
* Register as a file system; this informs all filter drivers. * Register as a file system; this informs all filter drivers.
* Future drivers will *not* be informed because we are a FILE_DEVICE_FILE_SYSTEM! * Future drivers will *not* be informed because we are a FILE_DEVICE_FILE_SYSTEM!
*/ */
IoRegisterFileSystem(FspDeviceObject); IoRegisterFileSystem(FspFileSystemDeviceObject);
FSP_LEAVE("DriverObject->DriverName=\"%wZ\", RegistryPath=\"%wZ\"", FSP_LEAVE("DriverObject->DriverName=\"%wZ\", RegistryPath=\"%wZ\"",
&DriverObject->DriverName, RegistryPath); &DriverObject->DriverName, RegistryPath);
@ -108,14 +110,14 @@ FspUnload(
{ {
FSP_ENTER_VOID(PAGED_CODE()); FSP_ENTER_VOID(PAGED_CODE());
if (0 != FspDeviceObject) if (0 != FspFileSystemDeviceObject)
{ {
IoDeleteDevice(FspDeviceObject); IoDeleteDevice(FspFileSystemDeviceObject);
FspDeviceObject = 0; FspFileSystemDeviceObject = 0;
} }
FSP_LEAVE_VOID("DriverObject->DriverName=\"%wZ\"", FSP_LEAVE_VOID("DriverObject->DriverName=\"%wZ\"",
&DriverObject->DriverName); &DriverObject->DriverName);
} }
PDEVICE_OBJECT FspDeviceObject; PDEVICE_OBJECT FspFileSystemDeviceObject;

View File

@ -73,6 +73,40 @@ const char *NtStatusSym(NTSTATUS Status);
goto fsp_leave_label; \ goto fsp_leave_label; \
} while (0,0) } while (0,0)
/* types */
enum
{
FspFileSystemDeviceExtensionKind = 0,
FspVolumeDeviceExtensionKind,
};
typedef struct
{
UINT8 Kind;
} FSP_DEVICE_EXTENSION;
typedef struct
{
FSP_DEVICE_EXTENSION Base;
} FSP_FILE_SYSTEM_DEVICE_EXTENSION;
typedef struct
{
FSP_DEVICE_EXTENSION Base;
} FSP_VOLUME_DEVICE_EXTENSION;
static inline
FSP_DEVICE_EXTENSION *FspDeviceExtension(PDEVICE_OBJECT DeviceObject)
{
return DeviceObject->DeviceExtension;
}
static inline
FSP_FILE_SYSTEM_DEVICE_EXTENSION *FspFileSystemDeviceExtension(PDEVICE_OBJECT DeviceObject)
{
return DeviceObject->DeviceExtension;
}
static inline
FSP_VOLUME_DEVICE_EXTENSION *FspVolumeDeviceExtension(PDEVICE_OBJECT DeviceObject)
{
return DeviceObject->DeviceExtension;
}
/* driver major functions */ /* driver major functions */
DRIVER_DISPATCH FspCleanup; DRIVER_DISPATCH FspCleanup;
DRIVER_DISPATCH FspClose; DRIVER_DISPATCH FspClose;
@ -106,7 +140,10 @@ FAST_IO_ACQUIRE_FOR_CCFLUSH FspAcquireForCcFlush;
FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush; FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush;
/* extern */ /* extern */
extern PDEVICE_OBJECT FspDeviceObject; extern PDEVICE_OBJECT FspFileSystemDeviceObject;
/* I/O increment */
#define FSP_IO_INCREMENT IO_NETWORK_INCREMENT
/* disable warnings */ /* disable warnings */
#pragma warning(disable:4100) /* unreferenced formal parameter */ #pragma warning(disable:4100) /* unreferenced formal parameter */

View File

@ -21,6 +21,8 @@ FspQueryEa(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_QUERY_EA == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;
@ -35,6 +37,8 @@ FspSetEa(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_SET_EA == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -21,6 +21,8 @@ FspQueryInformation(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_QUERY_INFORMATION == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;
@ -35,6 +37,8 @@ FspSetInformation(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_SET_INFORMATION == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,8 @@ FspFlushBuffers(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_FLUSH_BUFFERS == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,8 @@ FspFileSystemControl(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_FILE_SYSTEM_CONTROL == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,8 @@ FspLockControl(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_LOCK_CONTROL == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,8 @@ FspRead(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_READ == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -21,6 +21,8 @@ FspQuerySecurity(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_QUERY_SECURITY == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;
@ -35,6 +37,8 @@ FspSetSecurity(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_SET_SECURITY == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,8 @@ FspShutdown(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_SHUTDOWN == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -21,6 +21,8 @@ FspQueryVolumeInformation(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_QUERY_VOLUME_INFORMATION == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;
@ -35,6 +37,8 @@ FspSetVolumeInformation(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_SET_VOLUME_INFORMATION == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,8 @@ FspWrite(
{ {
FSP_ENTER(PAGED_CODE()); FSP_ENTER(PAGED_CODE());
ASSERT(IRP_MJ_WRITE == IoGetCurrentIrpStackLocation(Irp)->MajorFunction);
Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST; Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
IoCompleteRequest(Irp, IO_NO_INCREMENT); IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST; Result = STATUS_INVALID_DEVICE_REQUEST;