From 11c7d87101109dd411706bdd539e2a46832a43d6 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sat, 21 Nov 2015 22:07:18 -0800 Subject: [PATCH] sys: fsctl.c --- src/sys/fsctl.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/sys/fsctl.c b/src/sys/fsctl.c index 66c11eaa..86820dbe 100644 --- a/src/sys/fsctl.c +++ b/src/sys/fsctl.c @@ -6,25 +6,70 @@ #include +static +NTSTATUS +FspFsctlCreateVolume(PDEVICE_OBJECT DeviceObject, PIO_STACK_LOCATION IrpSp); +static +NTSTATUS +FspFsctlDeleteVolume(PDEVICE_OBJECT DeviceObject, PIO_STACK_LOCATION IrpSp); +static +NTSTATUS +FspFsvolTransact(PDEVICE_OBJECT DeviceObject, PIO_STACK_LOCATION IrpSp); static DRIVER_DISPATCH FspFsctlFileSystemControl; static DRIVER_DISPATCH FspFsvrtFileSystemControl; static DRIVER_DISPATCH FspFsvolFileSystemControl; DRIVER_DISPATCH FspFileSystemControl; #ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, FspFsctlCreateVolume) +#pragma alloc_text(PAGE, FspFsctlDeleteVolume) +#pragma alloc_text(PAGE, FspFsvolTransact) #pragma alloc_text(PAGE, FspFsctlFileSystemControl) #pragma alloc_text(PAGE, FspFsvrtFileSystemControl) #pragma alloc_text(PAGE, FspFsvolFileSystemControl) #pragma alloc_text(PAGE, FspFileSystemControl) #endif +static +NTSTATUS +FspFsctlCreateVolume(PDEVICE_OBJECT DeviceObject, PIO_STACK_LOCATION IrpSp) +{ + return STATUS_INVALID_DEVICE_REQUEST; +} + +static +NTSTATUS +FspFsctlDeleteVolume(PDEVICE_OBJECT DeviceObject, PIO_STACK_LOCATION IrpSp) +{ + return STATUS_INVALID_DEVICE_REQUEST; +} + +static +NTSTATUS +FspFsvolTransact(PDEVICE_OBJECT DeviceObject, PIO_STACK_LOCATION IrpSp) +{ + return STATUS_INVALID_DEVICE_REQUEST; +} + static NTSTATUS FspFsctlFileSystemControl( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp) { - return STATUS_INVALID_DEVICE_REQUEST; + NTSTATUS Result = STATUS_INVALID_DEVICE_REQUEST; + PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); + if (IRP_MN_USER_FS_REQUEST == IrpSp->MinorFunction) + switch (IrpSp->Parameters.FileSystemControl.FsControlCode) + { + case FSP_FSCTL_CREATE: + Result = FspFsctlCreateVolume(DeviceObject, IrpSp); + break; + case FSP_FSCTL_DELETE: + Result = FspFsctlDeleteVolume(DeviceObject, IrpSp); + break; + } + return Result; } static @@ -33,7 +78,16 @@ FspFsvrtFileSystemControl( _In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp) { - return STATUS_INVALID_DEVICE_REQUEST; + NTSTATUS Result = STATUS_INVALID_DEVICE_REQUEST; + PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp); + if (IRP_MN_USER_FS_REQUEST == IrpSp->MinorFunction) + switch (IrpSp->Parameters.FileSystemControl.FsControlCode) + { + case FSP_FSCTL_TRANSACT: + Result = FspFsvolTransact(DeviceObject, IrpSp); + break; + } + return Result; } static