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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspCleanup;
FSP_IOCOMPLETION_DISPATCH FspCleanupComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsctlCleanup)
#pragma alloc_text(PAGE, FspFsvrtCleanup)
#pragma alloc_text(PAGE, FspFsvolCleanup)
#pragma alloc_text(PAGE, FspCleanup)
#pragma alloc_text(PAGE, FspCleanupComplete)
#endif
static NTSTATUS FspFsctlCleanup(
@ -66,3 +68,10 @@ FspCleanup(
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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspClose;
FSP_IOCOMPLETION_DISPATCH FspCloseComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsctlClose)
#pragma alloc_text(PAGE, FspFsvrtClose)
#pragma alloc_text(PAGE, FspFsvolClose)
#pragma alloc_text(PAGE, FspClose)
#pragma alloc_text(PAGE, FspCloseComplete)
#endif
static NTSTATUS FspFsctlClose(
@ -66,3 +68,10 @@ FspClose(
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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspCreate;
FSP_IOCOMPLETION_DISPATCH FspCreateComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsctlCreate)
#pragma alloc_text(PAGE, FspFsvrtCreate)
#pragma alloc_text(PAGE, FspFsvolCreate)
#pragma alloc_text(PAGE, FspCreate)
#pragma alloc_text(PAGE, FspCreateComplete)
#endif
static NTSTATUS FspFsctlCreate(
@ -80,3 +82,10 @@ FspCreate(
Irp->Overlay.AllocationSize.HighPart, Irp->Overlay.AllocationSize.LowPart,
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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspDeviceControl;
FSP_IOCOMPLETION_DISPATCH FspDeviceControlComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolDeviceControl)
#pragma alloc_text(PAGE, FspDeviceControl)
#pragma alloc_text(PAGE, FspDeviceControlComplete)
#endif
static NTSTATUS FspFsvolDeviceControl(
@ -40,3 +42,10 @@ FspDeviceControl(
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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspDirectoryControl;
FSP_IOCOMPLETION_DISPATCH FspDirectoryControlComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolDirectoryControl)
#pragma alloc_text(PAGE, FspDirectoryControl)
#pragma alloc_text(PAGE, FspDirectoryControlComplete)
#endif
static NTSTATUS FspFsvolDirectoryControl(
@ -40,3 +42,10 @@ FspDirectoryControl(
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 */
DriverObject->DriverUnload = FspUnload;
DriverObject->MajorFunction[IRP_MJ_CREATE] = FspCreate;
//DriverObject->MajorFunction[IRP_MJ_CREATE_NAMED_PIPE] = IopInvalidDeviceRequest;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = FspClose;
DriverObject->MajorFunction[IRP_MJ_READ] = FspRead;
DriverObject->MajorFunction[IRP_MJ_WRITE] = FspWrite;
@ -61,19 +60,32 @@ DriverEntry(
DriverObject->MajorFunction[IRP_MJ_DIRECTORY_CONTROL] = FspDirectoryControl;
DriverObject->MajorFunction[IRP_MJ_FILE_SYSTEM_CONTROL] = FspFileSystemControl;
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_LOCK_CONTROL] = FspLockControl;
DriverObject->MajorFunction[IRP_MJ_CLEANUP] = FspCleanup;
//DriverObject->MajorFunction[IRP_MJ_CREATE_MAILSLOT] = IopInvalidDeviceRequest;
DriverObject->MajorFunction[IRP_MJ_QUERY_SECURITY] = FspQuerySecurity;
DriverObject->MajorFunction[IRP_MJ_SET_SECURITY] = FspSetSecurity;
//DriverObject->MajorFunction[IRP_MJ_POWER] = IopInvalidDeviceRequest;
//DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = IopInvalidDeviceRequest;
//DriverObject->MajorFunction[IRP_MJ_DEVICE_CHANGE] = IopInvalidDeviceRequest;
//DriverObject->MajorFunction[IRP_MJ_QUERY_QUOTA] = IopInvalidDeviceRequest;
//DriverObject->MajorFunction[IRP_MJ_SET_QUOTA] = IopInvalidDeviceRequest;
//DriverObject->MajorFunction[IRP_MJ_PNP] = IopInvalidDeviceRequest;
/* setup the I/O completion functions */
FspIoCompletionFunction[IRP_MJ_CREATE] = FspCreateComplete;
FspIoCompletionFunction[IRP_MJ_CLOSE] = FspCloseComplete;
FspIoCompletionFunction[IRP_MJ_READ] = FspReadComplete;
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 */
static FAST_IO_DISPATCH FspFastIoDispatch = { 0 };

View File

@ -145,6 +145,28 @@ DRIVER_DISPATCH FspSetVolumeInformation;
DRIVER_DISPATCH FspShutdown;
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_IO_CHECK_IF_POSSIBLE FspFastIoCheckIfPossible;
@ -242,5 +264,6 @@ const char *IoctlCodeSym(ULONG ControlCode);
/* extern */
extern PDEVICE_OBJECT FspFsctlDiskDeviceObject;
extern PDEVICE_OBJECT FspFsctlNetDeviceObject;
extern FSP_IOCOMPLETION_DISPATCH *FspIoCompletionFunction[];
#endif

View File

@ -12,12 +12,16 @@ static NTSTATUS FspFsvolSetEa(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspQueryEa;
DRIVER_DISPATCH FspSetEa;
FSP_IOCOMPLETION_DISPATCH FspQueryEaComplete;
FSP_IOCOMPLETION_DISPATCH FspSetEaComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolQueryEa)
#pragma alloc_text(PAGE, FspFsvolSetEa)
#pragma alloc_text(PAGE, FspQueryEa)
#pragma alloc_text(PAGE, FspSetEa)
#pragma alloc_text(PAGE, FspQueryEaComplete)
#pragma alloc_text(PAGE, FspSetEaComplete)
#endif
static NTSTATUS FspFsvolQueryEa(
@ -71,3 +75,17 @@ FspSetEa(
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);
DRIVER_DISPATCH FspQueryInformation;
DRIVER_DISPATCH FspSetInformation;
FSP_IOCOMPLETION_DISPATCH FspQueryInformationComplete;
FSP_IOCOMPLETION_DISPATCH FspSetInformationComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolQueryInformation)
#pragma alloc_text(PAGE, FspFsvolSetInformation)
#pragma alloc_text(PAGE, FspQueryInformation)
#pragma alloc_text(PAGE, FspSetInformation)
#pragma alloc_text(PAGE, FspQueryInformationComplete)
#pragma alloc_text(PAGE, FspSetInformationComplete)
#endif
static NTSTATUS FspFsvolQueryInformation(
@ -71,3 +75,17 @@ FspSetInformation(
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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspFlushBuffers;
FSP_IOCOMPLETION_DISPATCH FspFlushBuffersComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolFlushBuffers)
#pragma alloc_text(PAGE, FspFlushBuffers)
#pragma alloc_text(PAGE, FspFlushBuffersComplete)
#endif
static NTSTATUS FspFsvolFlushBuffers(
@ -40,3 +42,10 @@ FspFlushBuffers(
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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspFileSystemControl;
FSP_IOCOMPLETION_DISPATCH FspFileSystemControlComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsctlCreateVolume)
@ -28,6 +29,7 @@ DRIVER_DISPATCH FspFileSystemControl;
#pragma alloc_text(PAGE, FspFsvrtFileSystemControl)
#pragma alloc_text(PAGE, FspFsvolFileSystemControl)
#pragma alloc_text(PAGE, FspFileSystemControl)
#pragma alloc_text(PAGE, FspFileSystemControlComplete)
#endif
static NTSTATUS FspFsctlCreateVolume(
@ -282,3 +284,10 @@ FspFileSystemControl(
IRP_MN_USER_FS_REQUEST == IrpSp->MinorFunction ?
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>
VOID FspDispatchProcessedIrp(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response);
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspDispatchProcessedIrp)
#endif
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)
{
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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspLockControl;
FSP_IOCOMPLETION_DISPATCH FspLockControlComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolLockControl)
#pragma alloc_text(PAGE, FspLockControl)
#pragma alloc_text(PAGE, FspLockControlComplete)
#endif
static NTSTATUS FspFsvolLockControl(
@ -40,3 +42,10 @@ FspLockControl(
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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspRead;
FSP_IOCOMPLETION_DISPATCH FspReadComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolRead)
#pragma alloc_text(PAGE, FspRead)
#pragma alloc_text(PAGE, FspReadComplete)
#endif
static NTSTATUS FspFsvolRead(
@ -40,3 +42,10 @@ FspRead(
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);
DRIVER_DISPATCH FspQuerySecurity;
DRIVER_DISPATCH FspSetSecurity;
FSP_IOCOMPLETION_DISPATCH FspQuerySecurityComplete;
FSP_IOCOMPLETION_DISPATCH FspSetSecurityComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolQuerySecurity)
#pragma alloc_text(PAGE, FspFsvolSetSecurity)
#pragma alloc_text(PAGE, FspQuerySecurity)
#pragma alloc_text(PAGE, FspSetSecurity)
#pragma alloc_text(PAGE, FspQuerySecurityComplete)
#pragma alloc_text(PAGE, FspSetSecurityComplete)
#endif
static NTSTATUS FspFsvolQuerySecurity(
@ -71,3 +75,17 @@ FspSetSecurity(
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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspShutdown;
FSP_IOCOMPLETION_DISPATCH FspShutdownComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolShutdown)
#pragma alloc_text(PAGE, FspShutdown)
#pragma alloc_text(PAGE, FspShutdownComplete)
#endif
static NTSTATUS FspFsvolShutdown(
@ -40,3 +42,10 @@ FspShutdown(
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);
DRIVER_DISPATCH FspQueryVolumeInformation;
DRIVER_DISPATCH FspSetVolumeInformation;
FSP_IOCOMPLETION_DISPATCH FspQueryVolumeInformationComplete;
FSP_IOCOMPLETION_DISPATCH FspSetVolumeInformationComplete;
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolQueryVolumeInformation)
#pragma alloc_text(PAGE, FspFsvolSetVolumeInformation)
#pragma alloc_text(PAGE, FspQueryVolumeInformation)
#pragma alloc_text(PAGE, FspSetVolumeInformation)
#pragma alloc_text(PAGE, FspQueryVolumeInformationComplete)
#pragma alloc_text(PAGE, FspSetVolumeInformationComplete)
#endif
static NTSTATUS FspFsvolQueryVolumeInformation(
@ -71,3 +75,17 @@ FspSetVolumeInformation(
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(
PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
DRIVER_DISPATCH FspWrite;
VOID FspWriteComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response);
#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, FspFsvolWrite)
#pragma alloc_text(PAGE, FspWrite)
#pragma alloc_text(PAGE, FspWriteComplete)
#endif
static NTSTATUS FspFsvolWrite(
@ -40,3 +42,10 @@ FspWrite(
FSP_LEAVE_MJ("", 0);
}
VOID FspWriteComplete(PIRP Irp, FSP_FSCTL_TRANSACT_RSP *Response)
{
PAGED_CODE();
FspCompleteRequest(Irp, STATUS_SUCCESS);
}