mirror of
https://github.com/reactos/reactos.git
synced 2025-04-25 16:10:29 +00:00
- Handle IRP_MN_QUERY_REMOVE_DEVICE and IRP_MN_CANCEL_REMOVE_DEVICE
- Implement NdisCompletePnPEvent - Handle pending cases svn path=/trunk/; revision=40792
This commit is contained in:
parent
11d957b125
commit
3065a6b84c
3 changed files with 74 additions and 23 deletions
|
@ -165,26 +165,6 @@ NdisWriteEventLogEntry
|
|||
*/
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
VOID
|
||||
EXPORT
|
||||
NdisCompletePnPEvent(
|
||||
IN NDIS_STATUS Status,
|
||||
IN NDIS_HANDLE NdisBindingHandle,
|
||||
IN PNET_PNP_EVENT NetPnPEvent)
|
||||
/*
|
||||
* FUNCTION:
|
||||
* ARGUMENTS:
|
||||
* NOTES:
|
||||
* NDIS 5.0
|
||||
*/
|
||||
{
|
||||
UNIMPLEMENTED
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* @unimplemented
|
||||
*/
|
||||
|
|
|
@ -2044,12 +2044,14 @@ NdisIDispatchPnp(
|
|||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
break;
|
||||
|
||||
case IRP_MN_QUERY_REMOVE_DEVICE:
|
||||
case IRP_MN_QUERY_STOP_DEVICE:
|
||||
Status = NdisIPnPQueryStopDevice(DeviceObject, Irp);
|
||||
Irp->IoStatus.Status = Status;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
break;
|
||||
|
||||
case IRP_MN_CANCEL_REMOVE_DEVICE:
|
||||
case IRP_MN_CANCEL_STOP_DEVICE:
|
||||
Status = NdisIPnPCancelStopDevice(DeviceObject, Irp);
|
||||
Irp->IoStatus.Status = Status;
|
||||
|
@ -2812,5 +2814,65 @@ NdisQueryAdapterInstanceName(
|
|||
Adapter);
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
VOID
|
||||
EXPORT
|
||||
NdisCompletePnPEvent(
|
||||
IN NDIS_STATUS Status,
|
||||
IN NDIS_HANDLE NdisBindingHandle,
|
||||
IN PNET_PNP_EVENT NetPnPEvent)
|
||||
/*
|
||||
* FUNCTION:
|
||||
* ARGUMENTS:
|
||||
* NOTES:
|
||||
* NDIS 5.0
|
||||
*/
|
||||
{
|
||||
PIRP Irp = (PIRP)NetPnPEvent->NdisReserved[0];
|
||||
PLIST_ENTRY CurrentEntry = (PLIST_ENTRY)NetPnPEvent->NdisReserved[1];
|
||||
PADAPTER_BINDING AdapterBinding = NdisBindingHandle;
|
||||
PLOGICAL_ADAPTER Adapter = AdapterBinding->Adapter;
|
||||
NDIS_STATUS NdisStatus;
|
||||
|
||||
if (Status != NDIS_STATUS_SUCCESS)
|
||||
{
|
||||
ExFreePool(NetPnPEvent);
|
||||
Irp->IoStatus.Status = Status;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
return;
|
||||
}
|
||||
|
||||
while (CurrentEntry != &Adapter->ProtocolListHead)
|
||||
{
|
||||
AdapterBinding = CONTAINING_RECORD(CurrentEntry, ADAPTER_BINDING, AdapterListEntry);
|
||||
|
||||
NdisStatus = (*AdapterBinding->ProtocolBinding->Chars.PnPEventHandler)(
|
||||
AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
|
||||
NetPnPEvent);
|
||||
|
||||
if (NdisStatus == NDIS_STATUS_PENDING)
|
||||
{
|
||||
NetPnPEvent->NdisReserved[1] = (ULONG_PTR)CurrentEntry->Flink;
|
||||
return;
|
||||
}
|
||||
else if (NdisStatus != NDIS_STATUS_SUCCESS)
|
||||
{
|
||||
ExFreePool(NetPnPEvent);
|
||||
Irp->IoStatus.Status = NdisStatus;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
return;
|
||||
}
|
||||
|
||||
CurrentEntry = CurrentEntry->Flink;
|
||||
}
|
||||
|
||||
ExFreePool(NetPnPEvent);
|
||||
|
||||
Irp->IoStatus.Status = NDIS_STATUS_SUCCESS;
|
||||
IoCompleteRequest(Irp, IO_NO_INCREMENT);
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
||||
|
|
|
@ -71,8 +71,11 @@ NdisIPnPQueryStopDevice(
|
|||
|
||||
if (Status == NDIS_STATUS_PENDING)
|
||||
{
|
||||
/* We don't handle this yet */
|
||||
ASSERT(FALSE);
|
||||
IoMarkIrpPending(Irp);
|
||||
/* Yes, I know this is stupid */
|
||||
PnPEvent->NdisReserved[0] = (ULONG_PTR)Irp;
|
||||
PnPEvent->NdisReserved[1] = (ULONG_PTR)CurrentEntry->Flink;
|
||||
return NDIS_STATUS_PENDING;
|
||||
}
|
||||
else if (Status != NDIS_STATUS_SUCCESS)
|
||||
{
|
||||
|
@ -115,7 +118,13 @@ NdisIPnPCancelStopDevice(
|
|||
AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
|
||||
PnPEvent);
|
||||
|
||||
/* A protocol should always succeed NetEventCancelRemoveDevice */
|
||||
if (Status == NDIS_STATUS_PENDING)
|
||||
{
|
||||
IoMarkIrpPending(Irp);
|
||||
PnPEvent->NdisReserved[0] = (ULONG_PTR)Irp;
|
||||
PnPEvent->NdisReserved[1] = (ULONG_PTR)CurrentEntry->Flink;
|
||||
return NDIS_STATUS_PENDING;
|
||||
}
|
||||
|
||||
ASSERT(Status == NDIS_STATUS_SUCCESS);
|
||||
|
||||
|
|
Loading…
Reference in a new issue