X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=drivers%2Fnetwork%2Fndis%2Fndis%2Fminiport.c;h=bfe41237f4d96ca8fb3af4b9f9e03032a14452e5;hp=05c750d8ebe4e6b41dc92d3ced8b62c680e630ed;hb=82822656c3b240860ac8d5db139c56285634e8a5;hpb=c16ad873a687c7fc3ec343b972e038e153a75e8b diff --git a/drivers/network/ndis/ndis/miniport.c b/drivers/network/ndis/ndis/miniport.c index 05c750d8ebe..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; } @@ -2109,6 +2161,7 @@ NdisIDeviceIoControl( PLOGICAL_ADAPTER Adapter = (PLOGICAL_ADAPTER)DeviceObject->DeviceExtension; PIO_STACK_LOCATION Stack = IoGetCurrentIrpStackLocation(Irp); NDIS_STATUS Status = STATUS_NOT_SUPPORTED; + ULONG Written; Irp->IoStatus.Information = 0; @@ -2121,7 +2174,8 @@ NdisIDeviceIoControl( *(PNDIS_OID)Irp->AssociatedIrp.SystemBuffer, Stack->Parameters.DeviceIoControl.OutputBufferLength, MmGetSystemAddressForMdl(Irp->MdlAddress), - &Irp->IoStatus.Information); + &Written); + Irp->IoStatus.Information = Written; break; default: @@ -2497,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; @@ -2958,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;