|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 1/2] Signal surprise removal support during registration
NDIS already provides NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK for
this purpose. Stop intercepting NdisDispatchPnp and use the provided
registration flag instead.
Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
---
src/xennet/adapter.c | 1 +
src/xennet/driver.c | 128 -------------------------------------------
2 files changed, 1 insertion(+), 128 deletions(-)
diff --git a/src/xennet/adapter.c b/src/xennet/adapter.c
index cbca7f0..f79c0c8 100644
--- a/src/xennet/adapter.c
+++ b/src/xennet/adapter.c
@@ -2967,6 +2967,7 @@ AdapterSetRegistrationAttributes(
Attribs.MiniportAdapterContext = (NDIS_HANDLE)Adapter;
Attribs.AttributeFlags = NDIS_MINIPORT_ATTRIBUTES_BUS_MASTER |
NDIS_MINIPORT_ATTRIBUTES_NO_HALT_ON_SUSPEND |
+ NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK |
NDIS_MINIPORT_ATTRIBUTES_NDIS_WDM;
Attribs.CheckForHangTimeInSeconds = 0;
Attribs.InterfaceType = XENNET_INTERFACE_TYPE;
diff --git a/src/xennet/driver.c b/src/xennet/driver.c
index 96adde7..5f31ac2 100644
--- a/src/xennet/driver.c
+++ b/src/xennet/driver.c
@@ -46,118 +46,6 @@ typedef struct _XENNET_DRIVER {
static XENNET_DRIVER Driver;
-typedef struct _XENNET_CONTEXT {
- PDEVICE_CAPABILITIES Capabilities;
- PIO_COMPLETION_ROUTINE CompletionRoutine;
- PVOID CompletionContext;
- UCHAR CompletionControl;
-} XENNET_CONTEXT, *PXENNET_CONTEXT;
-
-static NTSTATUS (*NdisDispatchPnp)(PDEVICE_OBJECT, PIRP);
-
-__drv_functionClass(IO_COMPLETION_ROUTINE)
-static NTSTATUS
-__QueryCapabilities(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp,
- IN PVOID _Context
- )
-{
- PXENNET_CONTEXT Context = _Context;
- NTSTATUS status;
-
- Context->Capabilities->SurpriseRemovalOK = 1;
-
- if (Context->CompletionRoutine != NULL &&
- (Context->CompletionControl & SL_INVOKE_ON_SUCCESS))
- status = Context->CompletionRoutine(DeviceObject, Irp,
Context->CompletionContext);
- else
- status = STATUS_SUCCESS;
-
- ExFreePool(Context);
-
- return status;
-}
-
-NTSTATUS
-QueryCapabilities(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp
- )
-{
- PIO_STACK_LOCATION StackLocation;
- PXENNET_CONTEXT Context;
- NTSTATUS status;
-
- Trace("====>\n");
-
- Trace("%p\n", DeviceObject);
-
- StackLocation = IoGetCurrentIrpStackLocation(Irp);
-
- Context = __AllocatePoolWithTag(NonPagedPool, sizeof (XENNET_CONTEXT), '
TEN');
- if (Context != NULL) {
- Context->Capabilities =
StackLocation->Parameters.DeviceCapabilities.Capabilities;
- Context->CompletionRoutine = StackLocation->CompletionRoutine;
- Context->CompletionContext = StackLocation->Context;
- Context->CompletionControl = StackLocation->Control;
-
- StackLocation->CompletionRoutine = __QueryCapabilities;
- StackLocation->Context = Context;
- StackLocation->Control = SL_INVOKE_ON_SUCCESS;
- }
-
- status = NdisDispatchPnp(DeviceObject, Irp);
-
- Trace("<====\n");
-
- return status;
-}
-
-DRIVER_DISPATCH DispatchPnp;
-
-NTSTATUS
-DispatchPnp(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp
- )
-{
- PIO_STACK_LOCATION StackLocation;
- UCHAR MinorFunction;
- NTSTATUS status;
-
- StackLocation = IoGetCurrentIrpStackLocation(Irp);
- MinorFunction = StackLocation->MinorFunction;
-
- switch (StackLocation->MinorFunction) {
- case IRP_MN_QUERY_CAPABILITIES:
- status = QueryCapabilities(DeviceObject, Irp);
- break;
-
- default:
- status = NdisDispatchPnp(DeviceObject, Irp);
- break;
- }
-
- return status;
-}
-
-DRIVER_DISPATCH DispatchFail;
-
-NTSTATUS
-DispatchFail(
- IN PDEVICE_OBJECT DeviceObject,
- IN PIRP Irp
- )
-{
- UNREFERENCED_PARAMETER(DeviceObject);
-
- Irp->IoStatus.Status = STATUS_UNSUCCESSFUL;
- IoCompleteRequest(Irp, IO_NO_INCREMENT);
-
- return STATUS_UNSUCCESSFUL;
-}
-
VOID
DriverUnload(
IN PDRIVER_OBJECT DriverObject
@@ -265,22 +153,6 @@ DriverEntry (
NdisCloseConfiguration(ConfigurationHandle);
ndisStatus = NDIS_STATUS_SUCCESS;
- NdisDispatchPnp = DriverObject->MajorFunction[IRP_MJ_PNP];
-#pragma prefast(suppress:28168) // No matching __drv_dispatchType annotation
- DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnp;
-
- if (FailCreateClose != 0) {
-#pragma prefast(suppress:28168) // No matching__drv_dispatchType annotation
- DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchFail;
-#pragma prefast(suppress:28168) // No matching __drv_dispatchType annotation
- DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchFail;
- }
-
- if (FailDeviceControl != 0) {
-#pragma prefast(suppress:28168) // No matching __drv_dispatchType annotation
- DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchFail;
- }
-
Trace("<====\n");
return ndisStatus;
--
2.53.0.windows.2
--
Ngoc Tu Dinh | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |