X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=drivers%2Fnetwork%2Fndis%2Fndis%2Fminiport.c;h=bfe41237f4d96ca8fb3af4b9f9e03032a14452e5;hp=2a9934c355e19d44dfcdf3e277d72824090e4e86;hb=82822656c3b240860ac8d5db139c56285634e8a5;hpb=b6edb50eb1a2311af040aadeec7791efa270a72e diff --git a/drivers/network/ndis/ndis/miniport.c b/drivers/network/ndis/ndis/miniport.c index 2a9934c355e..bfe41237f4d 100644 --- a/drivers/network/ndis/ndis/miniport.c +++ b/drivers/network/ndis/ndis/miniport.c @@ -365,6 +365,15 @@ MiniResetComplete( KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql); + if (Adapter->NdisMiniportBlock.ResetStatus != NDIS_STATUS_PENDING) + { + KeBugCheckEx(BUGCODE_ID_DRIVER, + (ULONG_PTR)MiniportAdapterHandle, + (ULONG_PTR)Status, + (ULONG_PTR)AddressingReset, + 0); + } + Adapter->NdisMiniportBlock.ResetStatus = Status; CurrentEntry = Adapter->ProtocolListHead.Flink; @@ -1722,6 +1731,20 @@ NdisIForwardIrpAndWait(PLOGICAL_ADAPTER Adapter, PIRP Irp) return Status; } +NTSTATUS +NTAPI +NdisICreateClose( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) +{ + Irp->IoStatus.Status = STATUS_SUCCESS; + Irp->IoStatus.Information = 0; + + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return STATUS_SUCCESS; +} + NTSTATUS NTAPI @@ -1755,6 +1778,8 @@ NdisIPnPStartDevice( LARGE_INTEGER Timeout; UINT MaxMulticastAddresses; ULONG BytesWritten; + PLIST_ENTRY CurrentEntry; + PPROTOCOL_BINDING ProtocolBinding; /* * Prepare wrapper context used by HW and configuration routines. @@ -1945,6 +1970,22 @@ NdisIPnPStartDevice( { NDIS_DbgPrint(MIN_TRACE, ("MiniportInitialize() failed for an adapter.\n")); ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock ); + if (Adapter->NdisMiniportBlock.Interrupt) + { + KeBugCheckEx(BUGCODE_ID_DRIVER, + (ULONG_PTR)Adapter, + (ULONG_PTR)Adapter->NdisMiniportBlock.Interrupt, + (ULONG_PTR)Adapter->NdisMiniportBlock.TimerQueue, + 1); + } + if (Adapter->NdisMiniportBlock.TimerQueue) + { + KeBugCheckEx(BUGCODE_ID_DRIVER, + (ULONG_PTR)Adapter, + (ULONG_PTR)Adapter->NdisMiniportBlock.Interrupt, + (ULONG_PTR)Adapter->NdisMiniportBlock.TimerQueue, + 1); + } return NdisStatus; } @@ -2017,6 +2058,17 @@ NdisIPnPStartDevice( /* Put adapter in adapter list for this miniport */ ExInterlockedInsertTailList(&Adapter->NdisMiniportBlock.DriverHandle->DeviceList, &Adapter->MiniportListEntry, &Adapter->NdisMiniportBlock.DriverHandle->Lock); + /* Refresh bindings for all protocols */ + CurrentEntry = ProtocolListHead.Flink; + while (CurrentEntry != &ProtocolListHead) + { + ProtocolBinding = CONTAINING_RECORD(CurrentEntry, PROTOCOL_BINDING, ListEntry); + + ndisBindMiniportsToProtocol(&NdisStatus, ProtocolBinding); + + CurrentEntry = CurrentEntry->Flink; + } + return STATUS_SUCCESS; } @@ -2499,6 +2551,8 @@ NdisMRegisterMiniport( *MiniportPtr = Miniport; + Miniport->DriverObject->MajorFunction[IRP_MJ_CREATE] = NdisICreateClose; + Miniport->DriverObject->MajorFunction[IRP_MJ_CLOSE] = NdisICreateClose; Miniport->DriverObject->MajorFunction[IRP_MJ_PNP] = NdisIDispatchPnp; Miniport->DriverObject->MajorFunction[IRP_MJ_SHUTDOWN] = NdisIShutdown; Miniport->DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = NdisIDeviceIoControl; @@ -2960,6 +3014,12 @@ NdisMRegisterDevice( DriverBlock->DriverObject->MajorFunction[IRP_MJ_PNP] = NdisIDispatchPnp; + if (!DriverBlock->DriverObject->MajorFunction[IRP_MJ_CREATE]) + DriverBlock->DriverObject->MajorFunction[IRP_MJ_CREATE] = NdisICreateClose; + + if (!DriverBlock->DriverObject->MajorFunction[IRP_MJ_CLOSE]) + DriverBlock->DriverObject->MajorFunction[IRP_MJ_CLOSE] = NdisICreateClose; + DeviceBlock->DeviceObject = DeviceObject; DeviceBlock->SymbolicName = SymbolicName;