[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 1/6] Cleanup fdo dispatch entry points
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/xeniface/fdo.c | 98 ++++++++++++++++-------------------------------------- src/xeniface/wmi.c | 82 +++++++++++++++------------------------------ src/xeniface/wmi.h | 13 +++----- 3 files changed, 59 insertions(+), 134 deletions(-) diff --git a/src/xeniface/fdo.c b/src/xeniface/fdo.c index d6b006e..f7aa542 100644 --- a/src/xeniface/fdo.c +++ b/src/xeniface/fdo.c @@ -1234,7 +1234,7 @@ done: static DECLSPEC_NOINLINE NTSTATUS FdoDispatchPnp( - IN PXENIFACE_FDO Fdo, + IN PXENIFACE_FDO Fdo, IN PIRP Irp ) { @@ -1945,7 +1945,7 @@ FdoSystemPower( static DECLSPEC_NOINLINE NTSTATUS FdoDispatchPower( - IN PXENIFACE_FDO Fdo, + IN PXENIFACE_FDO Fdo, IN PIRP Irp ) { @@ -2013,7 +2013,7 @@ done: static DECLSPEC_NOINLINE NTSTATUS FdoDispatchDefault( - IN PXENIFACE_FDO Fdo, + IN PXENIFACE_FDO Fdo, IN PIRP Irp ) { @@ -2025,80 +2025,44 @@ FdoDispatchDefault( return status; } -NTSTATUS -FdoCreateFile ( - __in PXENIFACE_FDO Fdo, - __inout PIRP Irp +static DECLSPEC_NOINLINE NTSTATUS +FdoDispatchComplete( + IN PXENIFACE_FDO Fdo, + IN PIRP Irp ) { - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); - NTSTATUS status; - - XenIfaceDebugPrint(TRACE, "FO %p, Process %p\n", Stack->FileObject, PsGetCurrentProcess()); + UNREFERENCED_PARAMETER(Fdo); - if (Deleted == Fdo->Dx->DevicePnpState) { - Irp->IoStatus.Status = STATUS_NO_SUCH_DEVICE; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return STATUS_NO_SUCH_DEVICE; - } - - status = STATUS_SUCCESS; Irp->IoStatus.Information = 0; - Irp->IoStatus.Status = status; - IoCompleteRequest(Irp, IO_NO_INCREMENT); + Irp->IoStatus.Status = STATUS_SUCCESS; + IoCompleteRequest (Irp, IO_NO_INCREMENT); - return status; + return STATUS_SUCCESS; } - -NTSTATUS -FdoClose ( - __in PXENIFACE_FDO Fdo, - __inout PIRP Irp +static DECLSPEC_NOINLINE NTSTATUS +FdoDispatchSystemControl( + IN PXENIFACE_FDO Fdo, + IN PIRP Irp ) - { - PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); NTSTATUS status; - XenIfaceDebugPrint(TRACE, "FO %p, Process %p\n", Stack->FileObject, PsGetCurrentProcess()); - - XenIfaceCleanup(Fdo, Stack->FileObject); - - status = STATUS_SUCCESS; - Irp->IoStatus.Information = 0; - Irp->IoStatus.Status = status; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - - return status; -} - - -NTSTATUS -FdoReadWrite ( - __in PXENIFACE_FDO fdoData, - __inout PIRP Irp - ) - -{ - - NTSTATUS status; - - XenIfaceDebugPrint(TRACE, "ReadWrite called\n"); - - status = STATUS_SUCCESS; - Irp->IoStatus.Information = 0; - Irp->IoStatus.Status = status; - IoCompleteRequest (Irp, IO_NO_INCREMENT); + status = WmiProcessMinorFunction(Fdo, Irp); + if (status == STATUS_NOT_SUPPORTED) { + IoSkipCurrentIrpStackLocation(Irp); + status = IoCallDriver(Fdo->LowerDeviceObject, Irp); + } else { + Irp->IoStatus.Status = status; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + } return status; } - - NTSTATUS FdoDispatch( - IN PXENIFACE_FDO Fdo, + IN PXENIFACE_FDO Fdo, IN PIRP Irp ) { @@ -2121,20 +2085,14 @@ FdoDispatch( break; case IRP_MJ_SYSTEM_CONTROL: - status = XenIfaceSystemControl(Fdo, Irp); - break; - - case IRP_MJ_READ: - case IRP_MJ_WRITE: - status = FdoReadWrite(Fdo, Irp); + status = FdoDispatchSystemControl(Fdo, Irp); break; case IRP_MJ_CREATE: - status = FdoCreateFile(Fdo, Irp); - break; - case IRP_MJ_CLOSE: - status = FdoClose(Fdo, Irp); + case IRP_MJ_READ: + case IRP_MJ_WRITE: + status = FdoDispatchComplete(Fdo, Irp); break; default: diff --git a/src/xeniface/wmi.c b/src/xeniface/wmi.c index 82592e3..0b14e9b 100644 --- a/src/xeniface/wmi.c +++ b/src/xeniface/wmi.c @@ -2995,85 +2995,57 @@ WmiRegInfoEx( return WmiRegInfo(fdoData, stack, byteswritten); } - - NTSTATUS WmiProcessMinorFunction( - IN PXENIFACE_FDO fdoData, - IN PIRP Irp -) + IN PXENIFACE_FDO Fdo, + IN PIRP Irp + ) { - PIO_STACK_LOCATION stack; - UCHAR MinorFunction; - - + PIO_STACK_LOCATION Stack; - stack = IoGetCurrentIrpStackLocation(Irp); + Stack = IoGetCurrentIrpStackLocation(Irp); - if (stack->Parameters.WMI.ProviderId != (ULONG_PTR)fdoData->Dx->DeviceObject) { - XenIfaceDebugPrint(TRACE,"ProviderID %p %p", stack->Parameters.WMI.ProviderId, fdoData->PhysicalDeviceObject); + if (Stack->Parameters.WMI.ProviderId != (ULONG_PTR)Fdo->Dx->DeviceObject) { + XenIfaceDebugPrint(TRACE, + "ProviderID %p %p", + Stack->Parameters.WMI.ProviderId, + Fdo->PhysicalDeviceObject); return STATUS_NOT_SUPPORTED; + } else { + XenIfaceDebugPrint(TRACE, + "ProviderID Match %p %p", + Stack->Parameters.WMI.ProviderId, + Fdo->PhysicalDeviceObject); } - else { - XenIfaceDebugPrint(TRACE,"ProviderID Match %p %p", stack->Parameters.WMI.ProviderId, fdoData->PhysicalDeviceObject); - } - MinorFunction = stack->MinorFunction; - switch (MinorFunction) - { + switch (Stack->MinorFunction) { case IRP_MN_CHANGE_SINGLE_INSTANCE: - return WmiChangeSingleInstance(fdoData, stack); + return WmiChangeSingleInstance(Fdo, Stack); case IRP_MN_CHANGE_SINGLE_ITEM: - return WmiChangeSingleItem(fdoData, stack); + return WmiChangeSingleItem(Fdo, Stack); case IRP_MN_DISABLE_COLLECTION: - return WmiDisableCollection(fdoData, stack); + return WmiDisableCollection(Fdo, Stack); case IRP_MN_DISABLE_EVENTS: - return WmiDisableEvents(fdoData, stack); + return WmiDisableEvents(Fdo, Stack); case IRP_MN_ENABLE_COLLECTION: - return WmiEnableCollection(fdoData, stack); + return WmiEnableCollection(Fdo, Stack); case IRP_MN_ENABLE_EVENTS: - return WmiEnableEvents(fdoData, stack); + return WmiEnableEvents(Fdo, Stack); case IRP_MN_EXECUTE_METHOD: - return WmiExecuteMethod(fdoData, stack, &Irp->IoStatus.Information); + return WmiExecuteMethod(Fdo, Stack, &Irp->IoStatus.Information); case IRP_MN_QUERY_ALL_DATA: - return WmiQueryAllData(fdoData, stack, &Irp->IoStatus.Information); + return WmiQueryAllData(Fdo, Stack, &Irp->IoStatus.Information); case IRP_MN_QUERY_SINGLE_INSTANCE: - return WmiQuerySingleInstance(fdoData, stack, &Irp->IoStatus.Information); + return WmiQuerySingleInstance(Fdo, Stack, &Irp->IoStatus.Information); case IRP_MN_REGINFO: - return WmiRegInfo(fdoData, stack, &Irp->IoStatus.Information); + return WmiRegInfo(Fdo, Stack, &Irp->IoStatus.Information); case IRP_MN_REGINFO_EX: - return WmiRegInfoEx(fdoData, stack, &Irp->IoStatus.Information); + return WmiRegInfoEx(Fdo, Stack, &Irp->IoStatus.Information); default: return STATUS_NOT_SUPPORTED; } } -NTSTATUS XenIfaceSystemControl( - __in PXENIFACE_FDO fdoData, - __inout PIRP Irp - ) -{ - NTSTATUS status; - - - - status = WmiProcessMinorFunction(fdoData, Irp); - - if (status != STATUS_NOT_SUPPORTED) { - Irp->IoStatus.Status = status; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - - } - else { - IoSkipCurrentIrpStackLocation(Irp); - status = IoCallDriver(fdoData->LowerDeviceObject, Irp); - } - - return(status); - -} - - PCHAR WMIMinorFunctionString ( __in UCHAR MinorFunction diff --git a/src/xeniface/wmi.h b/src/xeniface/wmi.h index a49f1b3..f677ee3 100644 --- a/src/xeniface/wmi.h +++ b/src/xeniface/wmi.h @@ -37,11 +37,11 @@ #include "driver.h" #include "wmi_generated.h" -NTSTATUS +extern NTSTATUS WmiProcessMinorFunction( - IN PXENIFACE_FDO Fdo, - IN PIRP Irp -); + IN PXENIFACE_FDO Fdo, + IN PIRP Irp + ); NTSTATUS WmiInit( @@ -54,11 +54,6 @@ WmiFinalise( PXENIFACE_FDO FdoData ); -NTSTATUS XenIfaceSystemControl( - __in PXENIFACE_FDO fdoData, - __inout PIRP Irp - ); - void FireSuspendEvent( IN OUT PXENIFACE_FDO fdoData ); -- 1.9.4.msysgit.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |