sys: I/O completion functions

This commit is contained in:
Bill Zissimopoulos 2015-11-27 12:14:06 -08:00
parent f9d300c738
commit ee1663100a
18 changed files with 228 additions and 9 deletions

View File

@ -13,12 +13,14 @@ static NTSTATUS FspFsvrtCleanup(
static NTSTATUS FspFsvolCleanup( static NTSTATUS FspFsvolCleanup(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspCleanup; DRIVER_DISPATCH FspCleanup;
FSP_IOCOMPLETION_DISPATCH FspCleanupComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsctlCleanup) #pragma alloc_text(PAGE, FspFsctlCleanup)
#pragma alloc_text(PAGE, FspFsvrtCleanup) #pragma alloc_text(PAGE, FspFsvrtCleanup)
#pragma alloc_text(PAGE, FspFsvolCleanup) #pragma alloc_text(PAGE, FspFsvolCleanup)
#pragma alloc_text(PAGE, FspCleanup) #pragma alloc_text(PAGE, FspCleanup)
#pragma alloc_text(PAGE, FspCleanupComplete)
#endif #endif
static NTSTATUS FspFsctlCleanup( static NTSTATUS FspFsctlCleanup(
@ -66,3 +68,10 @@ FspCleanup(
FSP_LEAVE_MJ("FileObject=%p", IrpSp->FileObject); FSP_LEAVE_MJ("FileObject=%p", IrpSp->FileObject);
} }
VOID FspCleanupComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -13,12 +13,14 @@ static NTSTATUS FspFsvrtClose(
static NTSTATUS FspFsvolClose( static NTSTATUS FspFsvolClose(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspClose; DRIVER_DISPATCH FspClose;
FSP_IOCOMPLETION_DISPATCH FspCloseComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsctlClose) #pragma alloc_text(PAGE, FspFsctlClose)
#pragma alloc_text(PAGE, FspFsvrtClose) #pragma alloc_text(PAGE, FspFsvrtClose)
#pragma alloc_text(PAGE, FspFsvolClose) #pragma alloc_text(PAGE, FspFsvolClose)
#pragma alloc_text(PAGE, FspClose) #pragma alloc_text(PAGE, FspClose)
#pragma alloc_text(PAGE, FspCloseComplete)
#endif #endif
static NTSTATUS FspFsctlClose( static NTSTATUS FspFsctlClose(
@ -66,3 +68,10 @@ FspClose(
FSP_LEAVE_MJ("FileObject=%p", IrpSp->FileObject); FSP_LEAVE_MJ("FileObject=%p", IrpSp->FileObject);
} }
VOID FspCloseComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -13,12 +13,14 @@ static NTSTATUS FspFsvrtCreate(
static NTSTATUS FspFsvolCreate( static NTSTATUS FspFsvolCreate(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspCreate; DRIVER_DISPATCH FspCreate;
FSP_IOCOMPLETION_DISPATCH FspCreateComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsctlCreate) #pragma alloc_text(PAGE, FspFsctlCreate)
#pragma alloc_text(PAGE, FspFsvrtCreate) #pragma alloc_text(PAGE, FspFsvrtCreate)
#pragma alloc_text(PAGE, FspFsvolCreate) #pragma alloc_text(PAGE, FspFsvolCreate)
#pragma alloc_text(PAGE, FspCreate) #pragma alloc_text(PAGE, FspCreate)
#pragma alloc_text(PAGE, FspCreateComplete)
#endif #endif
static NTSTATUS FspFsctlCreate( static NTSTATUS FspFsctlCreate(
@ -80,3 +82,10 @@ FspCreate(
Irp->Overlay.AllocationSize.HighPart, Irp->Overlay.AllocationSize.LowPart, Irp->Overlay.AllocationSize.HighPart, Irp->Overlay.AllocationSize.LowPart,
Irp->AssociatedIrp.SystemBuffer, IrpSp->Parameters.Create.EaLength); Irp->AssociatedIrp.SystemBuffer, IrpSp->Parameters.Create.EaLength);
} }
VOID FspCreateComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -9,10 +9,12 @@
static NTSTATUS FspFsvolDeviceControl( static NTSTATUS FspFsvolDeviceControl(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspDeviceControl; DRIVER_DISPATCH FspDeviceControl;
FSP_IOCOMPLETION_DISPATCH FspDeviceControlComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolDeviceControl) #pragma alloc_text(PAGE, FspFsvolDeviceControl)
#pragma alloc_text(PAGE, FspDeviceControl) #pragma alloc_text(PAGE, FspDeviceControl)
#pragma alloc_text(PAGE, FspDeviceControlComplete)
#endif #endif
static NTSTATUS FspFsvolDeviceControl( static NTSTATUS FspFsvolDeviceControl(
@ -40,3 +42,10 @@ FspDeviceControl(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspDeviceControlComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -9,10 +9,12 @@
static NTSTATUS FspFsvolDirectoryControl( static NTSTATUS FspFsvolDirectoryControl(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspDirectoryControl; DRIVER_DISPATCH FspDirectoryControl;
FSP_IOCOMPLETION_DISPATCH FspDirectoryControlComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolDirectoryControl) #pragma alloc_text(PAGE, FspFsvolDirectoryControl)
#pragma alloc_text(PAGE, FspDirectoryControl) #pragma alloc_text(PAGE, FspDirectoryControl)
#pragma alloc_text(PAGE, FspDirectoryControlComplete)
#endif #endif
static NTSTATUS FspFsvolDirectoryControl( static NTSTATUS FspFsvolDirectoryControl(
@ -40,3 +42,10 @@ FspDirectoryControl(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspDirectoryControlComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -47,7 +47,6 @@ DriverEntry(
/* setup the driver object */ /* setup the driver object */
DriverObject->DriverUnload = FspUnload; DriverObject->DriverUnload = FspUnload;
DriverObject->MajorFunction[IRP_MJ_CREATE] = FspCreate; DriverObject->MajorFunction[IRP_MJ_CREATE] = FspCreate;
//DriverObject->MajorFunction[IRP_MJ_CREATE_NAMED_PIPE] = IopInvalidDeviceRequest;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = FspClose; DriverObject->MajorFunction[IRP_MJ_CLOSE] = FspClose;
DriverObject->MajorFunction[IRP_MJ_READ] = FspRead; DriverObject->MajorFunction[IRP_MJ_READ] = FspRead;
DriverObject->MajorFunction[IRP_MJ_WRITE] = FspWrite; DriverObject->MajorFunction[IRP_MJ_WRITE] = FspWrite;
@ -61,19 +60,32 @@ DriverEntry(
DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = FspDirectoryControl; DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = FspDirectoryControl;
DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = FspFileSystemControl; DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = FspFileSystemControl;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = FspDeviceControl; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = FspDeviceControl;
//DriverObject->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = IopInvalidDeviceRequest;
DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = FspShutdown; DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = FspShutdown;
DriverObject->MajorFunction[IRP_MJ_LOCK_CONTROL] = FspLockControl; DriverObject->MajorFunction[IRP_MJ_LOCK_CONTROL] = FspLockControl;
DriverObject->MajorFunction[IRP_MJ_CLEANUP] = FspCleanup; DriverObject->MajorFunction[IRP_MJ_CLEANUP] = FspCleanup;
//DriverObject->MajorFunction[IRP_MJ_CREATE_MAILSLOT] = IopInvalidDeviceRequest;
DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] = FspQuerySecurity; DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] = FspQuerySecurity;
DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] = FspSetSecurity; DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] = FspSetSecurity;
//DriverObject->MajorFunction[IRP_MJ_POWER] = IopInvalidDeviceRequest;
//DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = IopInvalidDeviceRequest; /* setup the I/O completion functions */
//DriverObject->MajorFunction[IRP_MJ_DEVICE_CHANGE] = IopInvalidDeviceRequest; FspIoCompletionFunction[IRP_MJ_CREATE] = FspCreateComplete;
//DriverObject->MajorFunction[IRP_MJ_QUERY_QUOTA] = IopInvalidDeviceRequest; FspIoCompletionFunction[IRP_MJ_CLOSE] = FspCloseComplete;
//DriverObject->MajorFunction[IRP_MJ_SET_QUOTA] = IopInvalidDeviceRequest; FspIoCompletionFunction[IRP_MJ_READ] = FspReadComplete;
//DriverObject->MajorFunction[IRP_MJ_PNP] = IopInvalidDeviceRequest; FspIoCompletionFunction[IRP_MJ_WRITE] = FspWriteComplete;
FspIoCompletionFunction[IRP_MJ_QUERY_INFORMATION] = FspQueryInformationComplete;
FspIoCompletionFunction[IRP_MJ_SET_INFORMATION] = FspSetInformationComplete;
FspIoCompletionFunction[IRP_MJ_QUERY_EA] = FspQueryEaComplete;
FspIoCompletionFunction[IRP_MJ_SET_EA] = FspSetEaComplete;
FspIoCompletionFunction[IRP_MJ_FLUSH_BUFFERS] = FspFlushBuffersComplete;
FspIoCompletionFunction[IRP_MJ_QUERY_VOLUME_INFORMATION] = FspQueryVolumeInformationComplete;
FspIoCompletionFunction[IRP_MJ_SET_VOLUME_INFORMATION] = FspSetVolumeInformationComplete;
FspIoCompletionFunction[IRP_MJ_DIRECTORY_CONTROL] = FspDirectoryControlComplete;
FspIoCompletionFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = FspFileSystemControlComplete;
FspIoCompletionFunction[IRP_MJ_DEVICE_CONTROL] = FspDeviceControlComplete;
FspIoCompletionFunction[IRP_MJ_SHUTDOWN] = FspShutdownComplete;
FspIoCompletionFunction[IRP_MJ_LOCK_CONTROL] = FspLockControlComplete;
FspIoCompletionFunction[IRP_MJ_CLEANUP] = FspCleanupComplete;
FspIoCompletionFunction[IRP_MJ_QUERY_SECURITY] = FspQuerySecurityComplete;
FspIoCompletionFunction[IRP_MJ_SET_SECURITY] = FspSetSecurityComplete;
/* setup fast I/O and resource acquisition */ /* setup fast I/O and resource acquisition */
static FAST_IO_DISPATCH FspFastIoDispatch = { 0 }; static FAST_IO_DISPATCH FspFastIoDispatch = { 0 };

View File

@ -145,6 +145,28 @@ DRIVER_DISPATCH FspSetVolumeInformation;
DRIVER_DISPATCH FspShutdown; DRIVER_DISPATCH FspShutdown;
DRIVER_DISPATCH FspWrite; DRIVER_DISPATCH FspWrite;
/* I/O completion functions */
typedef VOID FSP_IOCOMPLETION_DISPATCH(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response);
FSP_IOCOMPLETION_DISPATCH FspCleanupComplete;
FSP_IOCOMPLETION_DISPATCH FspCloseComplete;
FSP_IOCOMPLETION_DISPATCH FspCreateComplete;
FSP_IOCOMPLETION_DISPATCH FspDeviceControlComplete;
FSP_IOCOMPLETION_DISPATCH FspDirectoryControlComplete;
FSP_IOCOMPLETION_DISPATCH FspFileSystemControlComplete;
FSP_IOCOMPLETION_DISPATCH FspFlushBuffersComplete;
FSP_IOCOMPLETION_DISPATCH FspLockControlComplete;
FSP_IOCOMPLETION_DISPATCH FspQueryEaComplete;
FSP_IOCOMPLETION_DISPATCH FspQueryInformationComplete;
FSP_IOCOMPLETION_DISPATCH FspQuerySecurityComplete;
FSP_IOCOMPLETION_DISPATCH FspQueryVolumeInformationComplete;
FSP_IOCOMPLETION_DISPATCH FspReadComplete;
FSP_IOCOMPLETION_DISPATCH FspSetEaComplete;
FSP_IOCOMPLETION_DISPATCH FspSetInformationComplete;
FSP_IOCOMPLETION_DISPATCH FspSetSecurityComplete;
FSP_IOCOMPLETION_DISPATCH FspSetVolumeInformationComplete;
FSP_IOCOMPLETION_DISPATCH FspShutdownComplete;
FSP_IOCOMPLETION_DISPATCH FspWriteComplete;
/* fast I/O */ /* fast I/O */
FAST_IO_CHECK_IF_POSSIBLE FspFastIoCheckIfPossible; FAST_IO_CHECK_IF_POSSIBLE FspFastIoCheckIfPossible;
@ -242,5 +264,6 @@ const char *IoctlCodeSym(ULONG ControlCode);
/* extern */ /* extern */
extern PDEVICE_OBJECT FspFsctlDiskDeviceObject; extern PDEVICE_OBJECT FspFsctlDiskDeviceObject;
extern PDEVICE_OBJECT FspFsctlNetDeviceObject; extern PDEVICE_OBJECT FspFsctlNetDeviceObject;
extern FSP_IOCOMPLETION_DISPATCH *FspIoCompletionFunction[];
#endif #endif

View File

@ -12,12 +12,16 @@ static NTSTATUS FspFsvolSetEa(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspQueryEa; DRIVER_DISPATCH FspQueryEa;
DRIVER_DISPATCH FspSetEa; DRIVER_DISPATCH FspSetEa;
FSP_IOCOMPLETION_DISPATCH FspQueryEaComplete;
FSP_IOCOMPLETION_DISPATCH FspSetEaComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolQueryEa) #pragma alloc_text(PAGE, FspFsvolQueryEa)
#pragma alloc_text(PAGE, FspFsvolSetEa) #pragma alloc_text(PAGE, FspFsvolSetEa)
#pragma alloc_text(PAGE, FspQueryEa) #pragma alloc_text(PAGE, FspQueryEa)
#pragma alloc_text(PAGE, FspSetEa) #pragma alloc_text(PAGE, FspSetEa)
#pragma alloc_text(PAGE, FspQueryEaComplete)
#pragma alloc_text(PAGE, FspSetEaComplete)
#endif #endif
static NTSTATUS FspFsvolQueryEa( static NTSTATUS FspFsvolQueryEa(
@ -71,3 +75,17 @@ FspSetEa(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspQueryEaComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}
VOID FspSetEaComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -12,12 +12,16 @@ static NTSTATUS FspFsvolSetInformation(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspQueryInformation; DRIVER_DISPATCH FspQueryInformation;
DRIVER_DISPATCH FspSetInformation; DRIVER_DISPATCH FspSetInformation;
FSP_IOCOMPLETION_DISPATCH FspQueryInformationComplete;
FSP_IOCOMPLETION_DISPATCH FspSetInformationComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolQueryInformation) #pragma alloc_text(PAGE, FspFsvolQueryInformation)
#pragma alloc_text(PAGE, FspFsvolSetInformation) #pragma alloc_text(PAGE, FspFsvolSetInformation)
#pragma alloc_text(PAGE, FspQueryInformation) #pragma alloc_text(PAGE, FspQueryInformation)
#pragma alloc_text(PAGE, FspSetInformation) #pragma alloc_text(PAGE, FspSetInformation)
#pragma alloc_text(PAGE, FspQueryInformationComplete)
#pragma alloc_text(PAGE, FspSetInformationComplete)
#endif #endif
static NTSTATUS FspFsvolQueryInformation( static NTSTATUS FspFsvolQueryInformation(
@ -71,3 +75,17 @@ FspSetInformation(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspQueryInformationComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}
VOID FspSetInformationComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -9,10 +9,12 @@
static NTSTATUS FspFsvolFlushBuffers( static NTSTATUS FspFsvolFlushBuffers(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspFlushBuffers; DRIVER_DISPATCH FspFlushBuffers;
FSP_IOCOMPLETION_DISPATCH FspFlushBuffersComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolFlushBuffers) #pragma alloc_text(PAGE, FspFsvolFlushBuffers)
#pragma alloc_text(PAGE, FspFlushBuffers) #pragma alloc_text(PAGE, FspFlushBuffers)
#pragma alloc_text(PAGE, FspFlushBuffersComplete)
#endif #endif
static NTSTATUS FspFsvolFlushBuffers( static NTSTATUS FspFsvolFlushBuffers(
@ -40,3 +42,10 @@ FspFlushBuffers(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspFlushBuffersComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -19,6 +19,7 @@ static NTSTATUS FspFsvrtFileSystemControl(
static NTSTATUS FspFsvolFileSystemControl( static NTSTATUS FspFsvolFileSystemControl(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspFileSystemControl; DRIVER_DISPATCH FspFileSystemControl;
FSP_IOCOMPLETION_DISPATCH FspFileSystemControlComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsctlCreateVolume) #pragma alloc_text(PAGE, FspFsctlCreateVolume)
@ -28,6 +29,7 @@ DRIVER_DISPATCH FspFileSystemControl;
#pragma alloc_text(PAGE, FspFsvrtFileSystemControl) #pragma alloc_text(PAGE, FspFsvrtFileSystemControl)
#pragma alloc_text(PAGE, FspFsvolFileSystemControl) #pragma alloc_text(PAGE, FspFsvolFileSystemControl)
#pragma alloc_text(PAGE, FspFileSystemControl) #pragma alloc_text(PAGE, FspFileSystemControl)
#pragma alloc_text(PAGE, FspFileSystemControlComplete)
#endif #endif
static NTSTATUS FspFsctlCreateVolume( static NTSTATUS FspFsctlCreateVolume(
@ -282,3 +284,10 @@ FspFileSystemControl(
IRP_MN_USER_FS_REQUEST == IrpSp->MinorFunction ? IRP_MN_USER_FS_REQUEST == IrpSp->MinorFunction ?
IoctlCodeSym(IrpSp->Parameters.FileSystemControl.FsControlCode) : ""); IoctlCodeSym(IrpSp->Parameters.FileSystemControl.FsControlCode) : "");
} }
VOID FspFileSystemControlComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -6,7 +6,10 @@
#include <sys/driver.h> #include <sys/driver.h>
VOID FspDispatchProcessedIrp(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response);
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspDispatchProcessedIrp)
#endif #endif
VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result) VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result)
@ -26,4 +29,14 @@ VOID FspCompleteRequest(PIRP Irp, NTSTATUS Result)
VOID FspDispatchProcessedIrp(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response) VOID FspDispatchProcessedIrp(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{ {
PAGED_CODE();
PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
ASSERT(IRP_MJ_MAXIMUM_FUNCTION >= IrpSp->MajorFunction);
ASSERT(0 != FspIoCompletionFunction[IrpSp->MajorFunction]);
FspIoCompletionFunction[IrpSp->MajorFunction](Irp, Response);
} }
FSP_IOCOMPLETION_DISPATCH *FspIoCompletionFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];

View File

@ -9,10 +9,12 @@
static NTSTATUS FspFsvolLockControl( static NTSTATUS FspFsvolLockControl(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspLockControl; DRIVER_DISPATCH FspLockControl;
FSP_IOCOMPLETION_DISPATCH FspLockControlComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolLockControl) #pragma alloc_text(PAGE, FspFsvolLockControl)
#pragma alloc_text(PAGE, FspLockControl) #pragma alloc_text(PAGE, FspLockControl)
#pragma alloc_text(PAGE, FspLockControlComplete)
#endif #endif
static NTSTATUS FspFsvolLockControl( static NTSTATUS FspFsvolLockControl(
@ -40,3 +42,10 @@ FspLockControl(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspLockControlComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -9,10 +9,12 @@
static NTSTATUS FspFsvolRead( static NTSTATUS FspFsvolRead(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspRead; DRIVER_DISPATCH FspRead;
FSP_IOCOMPLETION_DISPATCH FspReadComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolRead) #pragma alloc_text(PAGE, FspFsvolRead)
#pragma alloc_text(PAGE, FspRead) #pragma alloc_text(PAGE, FspRead)
#pragma alloc_text(PAGE, FspReadComplete)
#endif #endif
static NTSTATUS FspFsvolRead( static NTSTATUS FspFsvolRead(
@ -40,3 +42,10 @@ FspRead(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspReadComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -12,12 +12,16 @@ static NTSTATUS FspFsvolSetSecurity(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspQuerySecurity; DRIVER_DISPATCH FspQuerySecurity;
DRIVER_DISPATCH FspSetSecurity; DRIVER_DISPATCH FspSetSecurity;
FSP_IOCOMPLETION_DISPATCH FspQuerySecurityComplete;
FSP_IOCOMPLETION_DISPATCH FspSetSecurityComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolQuerySecurity) #pragma alloc_text(PAGE, FspFsvolQuerySecurity)
#pragma alloc_text(PAGE, FspFsvolSetSecurity) #pragma alloc_text(PAGE, FspFsvolSetSecurity)
#pragma alloc_text(PAGE, FspQuerySecurity) #pragma alloc_text(PAGE, FspQuerySecurity)
#pragma alloc_text(PAGE, FspSetSecurity) #pragma alloc_text(PAGE, FspSetSecurity)
#pragma alloc_text(PAGE, FspQuerySecurityComplete)
#pragma alloc_text(PAGE, FspSetSecurityComplete)
#endif #endif
static NTSTATUS FspFsvolQuerySecurity( static NTSTATUS FspFsvolQuerySecurity(
@ -71,3 +75,17 @@ FspSetSecurity(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspQuerySecurityComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}
VOID FspSetSecurityComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -9,10 +9,12 @@
static NTSTATUS FspFsvolShutdown( static NTSTATUS FspFsvolShutdown(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspShutdown; DRIVER_DISPATCH FspShutdown;
FSP_IOCOMPLETION_DISPATCH FspShutdownComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolShutdown) #pragma alloc_text(PAGE, FspFsvolShutdown)
#pragma alloc_text(PAGE, FspShutdown) #pragma alloc_text(PAGE, FspShutdown)
#pragma alloc_text(PAGE, FspShutdownComplete)
#endif #endif
static NTSTATUS FspFsvolShutdown( static NTSTATUS FspFsvolShutdown(
@ -40,3 +42,10 @@ FspShutdown(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspShutdownComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -12,12 +12,16 @@ static NTSTATUS FspFsvolSetVolumeInformation(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspQueryVolumeInformation; DRIVER_DISPATCH FspQueryVolumeInformation;
DRIVER_DISPATCH FspSetVolumeInformation; DRIVER_DISPATCH FspSetVolumeInformation;
FSP_IOCOMPLETION_DISPATCH FspQueryVolumeInformationComplete;
FSP_IOCOMPLETION_DISPATCH FspSetVolumeInformationComplete;
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolQueryVolumeInformation) #pragma alloc_text(PAGE, FspFsvolQueryVolumeInformation)
#pragma alloc_text(PAGE, FspFsvolSetVolumeInformation) #pragma alloc_text(PAGE, FspFsvolSetVolumeInformation)
#pragma alloc_text(PAGE, FspQueryVolumeInformation) #pragma alloc_text(PAGE, FspQueryVolumeInformation)
#pragma alloc_text(PAGE, FspSetVolumeInformation) #pragma alloc_text(PAGE, FspSetVolumeInformation)
#pragma alloc_text(PAGE, FspQueryVolumeInformationComplete)
#pragma alloc_text(PAGE, FspSetVolumeInformationComplete)
#endif #endif
static NTSTATUS FspFsvolQueryVolumeInformation( static NTSTATUS FspFsvolQueryVolumeInformation(
@ -71,3 +75,17 @@ FspSetVolumeInformation(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspQueryVolumeInformationComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}
VOID FspSetVolumeInformationComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}

View File

@ -9,10 +9,12 @@
static NTSTATUS FspFsvolWrite( static NTSTATUS FspFsvolWrite(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspWrite; DRIVER_DISPATCH FspWrite;
VOID FspWriteComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response);
#ifdef ALLOC_PRAGMA #ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolWrite) #pragma alloc_text(PAGE, FspFsvolWrite)
#pragma alloc_text(PAGE, FspWrite) #pragma alloc_text(PAGE, FspWrite)
#pragma alloc_text(PAGE, FspWriteComplete)
#endif #endif
static NTSTATUS FspFsvolWrite( static NTSTATUS FspFsvolWrite(
@ -40,3 +42,10 @@ FspWrite(
FSP_LEAVE_MJ("", 0); FSP_LEAVE_MJ("", 0);
} }
VOID FspWriteComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}