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());
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;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,17 @@ FspClose(
{
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;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST;

View File

@ -19,6 +19,17 @@ FspCreate(
{
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;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
Result = STATUS_INVALID_DEVICE_REQUEST;

View File

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

View File

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

View File

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

View File

@ -73,6 +73,40 @@ const char *NtStatusSym(NTSTATUS Status);
goto fsp_leave_label; \
} 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_DISPATCH FspCleanup;
DRIVER_DISPATCH FspClose;
@ -106,7 +140,10 @@ FAST_IO_ACQUIRE_FOR_CCFLUSH FspAcquireForCcFlush;
FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush;
/* extern */
extern PDEVICE_OBJECT FspDeviceObject;
extern PDEVICE_OBJECT FspFileSystemDeviceObject;
/* I/O increment */
#define FSP_IO_INCREMENT IO_NETWORK_INCREMENT
/* disable warnings */
#pragma warning(disable:4100) /* unreferenced formal parameter */

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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