mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
- Merge aicom-network-fixes up to r36151
svn path=/trunk/; revision=36152
This commit is contained in:
parent
4046b602f2
commit
5f008ce5b8
12 changed files with 90 additions and 32 deletions
|
@ -39,7 +39,6 @@ AfdGetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
NTSTATUS STDCALL
|
||||
AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
||||
PIO_STACK_LOCATION IrpSp ) {
|
||||
NTSTATUS Status = STATUS_BUFFER_TOO_SMALL;
|
||||
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
||||
PAFD_FCB FCB = FileObject->FsContext;
|
||||
|
||||
|
@ -47,25 +46,19 @@ AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
|
||||
if( FCB->Context ) {
|
||||
ExFreePool( FCB->Context );
|
||||
FCB->Context = NULL;
|
||||
FCB->ContextSize = 0;
|
||||
}
|
||||
|
||||
if( FCB->ContextSize <
|
||||
IrpSp->Parameters.DeviceIoControl.InputBufferLength ) {
|
||||
FCB->Context =
|
||||
ExAllocatePool
|
||||
( PagedPool,
|
||||
IrpSp->Parameters.DeviceIoControl.InputBufferLength );
|
||||
FCB->Context = ExAllocatePool( PagedPool,
|
||||
IrpSp->Parameters.DeviceIoControl.InputBufferLength );
|
||||
|
||||
if( !FCB->Context ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0, NULL );
|
||||
if( !FCB->Context ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0, NULL );
|
||||
|
||||
RtlCopyMemory( FCB->Context,
|
||||
IrpSp->Parameters.DeviceIoControl.Type3InputBuffer,
|
||||
IrpSp->Parameters.DeviceIoControl.InputBufferLength );
|
||||
Status = STATUS_SUCCESS;
|
||||
}
|
||||
FCB->ContextSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));
|
||||
RtlCopyMemory( FCB->Context,
|
||||
IrpSp->Parameters.DeviceIoControl.Type3InputBuffer,
|
||||
FCB->ContextSize );
|
||||
|
||||
return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL );
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_SUCCESS, Irp, 0, NULL );
|
||||
}
|
||||
|
|
|
@ -174,8 +174,8 @@ PAFD_HANDLE LockHandles( PAFD_HANDLE HandleArray, UINT HandleCount ) {
|
|||
( NonPagedPool, HandleCount * sizeof(AFD_HANDLE) );
|
||||
|
||||
for( i = 0; FileObjects && i < HandleCount; i++ ) {
|
||||
HandleArray[i].Status = 0;
|
||||
HandleArray[i].Events = HandleArray[i].Events;
|
||||
FileObjects[i].Status = 0;
|
||||
FileObjects[i].Events = HandleArray[i].Events;
|
||||
FileObjects[i].Handle = 0;
|
||||
if( !HandleArray[i].Handle ) continue;
|
||||
if( NT_SUCCESS(Status) ) {
|
||||
|
@ -206,6 +206,7 @@ VOID UnlockHandles( PAFD_HANDLE HandleArray, UINT HandleCount ) {
|
|||
}
|
||||
|
||||
ExFreePool( HandleArray );
|
||||
HandleArray = NULL;
|
||||
}
|
||||
|
||||
/* Returns transitioned state or SOCKET_STATE_INVALID_TRANSITION */
|
||||
|
|
|
@ -52,6 +52,7 @@ AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
ULONG EaLength;
|
||||
PWCHAR EaInfoValue = NULL;
|
||||
UINT Disposition, i;
|
||||
NTSTATUS Status = STATUS_SUCCESS;
|
||||
|
||||
AFD_DbgPrint(MID_TRACE,
|
||||
("AfdCreate(DeviceObject %p Irp %p)\n", DeviceObject, Irp));
|
||||
|
@ -140,16 +141,27 @@ AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
AFD_DbgPrint(MID_TRACE,("Packet oriented socket\n"));
|
||||
/* Allocate our backup buffer */
|
||||
FCB->Recv.Window = ExAllocatePool( NonPagedPool, FCB->Recv.Size );
|
||||
if( !FCB->Recv.Window ) Status = STATUS_NO_MEMORY;
|
||||
FCB->Send.Window = ExAllocatePool( NonPagedPool, FCB->Send.Size );
|
||||
if( !FCB->Send.Window ) {
|
||||
if( FCB->Recv.Window ) ExFreePool( FCB->Recv.Window );
|
||||
Status = STATUS_NO_MEMORY;
|
||||
}
|
||||
/* A datagram socket is always sendable */
|
||||
FCB->PollState |= AFD_EVENT_SEND;
|
||||
PollReeval( FCB->DeviceExt, FCB->FileObject );
|
||||
}
|
||||
|
||||
Irp->IoStatus.Status = STATUS_SUCCESS;
|
||||
if( !NT_SUCCESS(Status) ) {
|
||||
if( FCB->TdiDeviceName.Buffer ) ExFreePool( FCB->TdiDeviceName.Buffer );
|
||||
ExFreePool( FCB );
|
||||
FileObject->FsContext = NULL;
|
||||
}
|
||||
|
||||
Irp->IoStatus.Status = Status;
|
||||
IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
return Status;
|
||||
}
|
||||
|
||||
VOID DestroySocket( PAFD_FCB FCB ) {
|
||||
|
|
|
@ -642,6 +642,7 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
AFD_DbgPrint(MID_TRACE,("Nonblocking\n"));
|
||||
Status = STATUS_CANT_WAIT;
|
||||
PollReeval( FCB->DeviceExt, FCB->FileObject );
|
||||
UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE );
|
||||
return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL );
|
||||
} else {
|
||||
PollReeval( FCB->DeviceExt, FCB->FileObject );
|
||||
|
|
|
@ -311,7 +311,7 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
|
|||
|
||||
AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));
|
||||
|
||||
return UnlockAndMaybeComplete( FCB, STATUS_SUCCESS, Irp,
|
||||
return UnlockAndMaybeComplete( FCB, Status, Irp,
|
||||
0, NULL );
|
||||
}
|
||||
|
||||
|
|
|
@ -349,7 +349,10 @@ NDIS_STATUS STDCALL ProtocolReceive(
|
|||
/* Get a transfer data packet */
|
||||
KeAcquireSpinLockAtDpcLevel(&Adapter->Lock);
|
||||
NdisStatus = AllocatePacketWithBuffer( &NdisPacket, NULL, Adapter->MTU );
|
||||
if( NdisStatus != NDIS_STATUS_SUCCESS ) return NDIS_STATUS_NOT_ACCEPTED;
|
||||
if( NdisStatus != NDIS_STATUS_SUCCESS ) {
|
||||
KeReleaseSpinLockFromDpcLevel(&Adapter->Lock);
|
||||
return NDIS_STATUS_NOT_ACCEPTED;
|
||||
}
|
||||
LA_DbgPrint(DEBUG_DATALINK, ("pretransfer LookaheadBufferSize %d packsize %d\n",LookaheadBufferSize,PacketSize));
|
||||
{
|
||||
UINT temp;
|
||||
|
|
|
@ -283,6 +283,7 @@ NdisOpenProtocolConfiguration(
|
|||
if(!ConfigurationContext)
|
||||
{
|
||||
NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n"));
|
||||
ZwClose(KeyHandle);
|
||||
*ConfigurationHandle = NULL;
|
||||
*Status = NDIS_STATUS_FAILURE;
|
||||
return;
|
||||
|
@ -849,6 +850,7 @@ NdisOpenConfigurationKeyByIndex(
|
|||
if(!ConfigurationContext)
|
||||
{
|
||||
NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n"));
|
||||
ZwClose(RegKeyHandle);
|
||||
*Status = NDIS_STATUS_FAILURE;
|
||||
return;
|
||||
}
|
||||
|
@ -907,6 +909,7 @@ NdisOpenConfigurationKeyByName(
|
|||
if(!ConfigurationContext)
|
||||
{
|
||||
NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n"));
|
||||
ZwClose(RegKeyHandle);
|
||||
*Status = NDIS_STATUS_FAILURE;
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -407,6 +407,7 @@ NdisMAllocateMapRegisters(
|
|||
if(!NT_SUCCESS(NtStatus))
|
||||
{
|
||||
NDIS_DbgPrint(MIN_TRACE, ("IoAllocateAdapterChannel failed: 0x%x\n", NtStatus));
|
||||
ExFreePool(Adapter->MapRegisters);
|
||||
return NDIS_STATUS_RESOURCES;
|
||||
}
|
||||
|
||||
|
@ -417,6 +418,7 @@ NdisMAllocateMapRegisters(
|
|||
if(!NT_SUCCESS(NtStatus))
|
||||
{
|
||||
NDIS_DbgPrint(MIN_TRACE, ("KeWaitForSingleObject failed: 0x%x\n", NtStatus));
|
||||
ExFreePool(Adapter->MapRegisters);
|
||||
return NDIS_STATUS_RESOURCES;
|
||||
}
|
||||
|
||||
|
|
|
@ -314,15 +314,18 @@ MiniRequestComplete(
|
|||
IN NDIS_STATUS Status)
|
||||
{
|
||||
PNDIS_REQUEST_MAC_BLOCK MacBlock = (PNDIS_REQUEST_MAC_BLOCK)Request->MacReserved;
|
||||
KIRQL OldIrql;
|
||||
|
||||
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
||||
|
||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
||||
if( MacBlock->Binding->RequestCompleteHandler ) {
|
||||
(*MacBlock->Binding->RequestCompleteHandler)(
|
||||
MacBlock->Binding->ProtocolBindingContext,
|
||||
Request,
|
||||
Status);
|
||||
}
|
||||
KeLowerIrql(OldIrql);
|
||||
}
|
||||
|
||||
VOID NTAPI
|
||||
|
@ -340,15 +343,18 @@ MiniSendComplete(
|
|||
*/
|
||||
{
|
||||
PADAPTER_BINDING AdapterBinding;
|
||||
KIRQL OldIrql;
|
||||
|
||||
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
||||
|
||||
AdapterBinding = (PADAPTER_BINDING)Packet->Reserved[0];
|
||||
|
||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
||||
(*AdapterBinding->ProtocolBinding->Chars.SendCompleteHandler)(
|
||||
AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
|
||||
Packet,
|
||||
Status);
|
||||
KeLowerIrql(OldIrql);
|
||||
}
|
||||
|
||||
|
||||
|
@ -370,15 +376,18 @@ MiniTransferDataComplete(
|
|||
IN UINT BytesTransferred)
|
||||
{
|
||||
PADAPTER_BINDING AdapterBinding;
|
||||
KIRQL OldIrql;
|
||||
|
||||
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
||||
|
||||
AdapterBinding = (PADAPTER_BINDING)Packet->Reserved[0];
|
||||
|
||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
||||
(*AdapterBinding->ProtocolBinding->Chars.SendCompleteHandler)(
|
||||
AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
|
||||
Packet,
|
||||
Status);
|
||||
KeLowerIrql(OldIrql);
|
||||
}
|
||||
|
||||
|
||||
|
@ -548,10 +557,12 @@ MiniQueryInformation(
|
|||
{
|
||||
NDIS_STATUS NdisStatus;
|
||||
ULONG BytesNeeded;
|
||||
KIRQL OldIrql;
|
||||
|
||||
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
||||
|
||||
/* call the miniport's queryinfo handler */
|
||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
||||
NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.QueryInformationHandler)(
|
||||
Adapter->NdisMiniportBlock.MiniportAdapterContext,
|
||||
Oid,
|
||||
|
@ -559,6 +570,7 @@ MiniQueryInformation(
|
|||
Size,
|
||||
BytesWritten,
|
||||
&BytesNeeded);
|
||||
KeLowerIrql(OldIrql);
|
||||
|
||||
/* FIXME: Wait in pending case! */
|
||||
|
||||
|
@ -678,14 +690,17 @@ MiniDoRequest(
|
|||
* Status of operation
|
||||
*/
|
||||
{
|
||||
NDIS_STATUS Status;
|
||||
KIRQL OldIrql;
|
||||
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
||||
|
||||
Adapter->MediaRequest = NdisRequest;
|
||||
|
||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
||||
switch (NdisRequest->RequestType)
|
||||
{
|
||||
case NdisRequestQueryInformation:
|
||||
return (*Adapter->DriverHandle->MiniportCharacteristics.QueryInformationHandler)(
|
||||
Status = (*Adapter->DriverHandle->MiniportCharacteristics.QueryInformationHandler)(
|
||||
Adapter->MiniportAdapterContext,
|
||||
NdisRequest->DATA.QUERY_INFORMATION.Oid,
|
||||
NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer,
|
||||
|
@ -695,7 +710,7 @@ MiniDoRequest(
|
|||
break;
|
||||
|
||||
case NdisRequestSetInformation:
|
||||
return (*Adapter->DriverHandle->MiniportCharacteristics.SetInformationHandler)(
|
||||
Status = (*Adapter->DriverHandle->MiniportCharacteristics.SetInformationHandler)(
|
||||
Adapter->MiniportAdapterContext,
|
||||
NdisRequest->DATA.SET_INFORMATION.Oid,
|
||||
NdisRequest->DATA.SET_INFORMATION.InformationBuffer,
|
||||
|
@ -705,8 +720,11 @@ MiniDoRequest(
|
|||
break;
|
||||
|
||||
default:
|
||||
return NDIS_STATUS_FAILURE;
|
||||
Status = NDIS_STATUS_FAILURE;
|
||||
}
|
||||
|
||||
KeLowerIrql(OldIrql);
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
|
@ -722,9 +740,12 @@ NdisMQueryInformationComplete(
|
|||
{
|
||||
PNDIS_MINIPORT_BLOCK MiniportBlock =
|
||||
(PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle;
|
||||
KIRQL OldIrql;
|
||||
ASSERT(MiniportBlock);
|
||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
||||
if( MiniportBlock->QueryCompleteHandler )
|
||||
(MiniportBlock->QueryCompleteHandler)(MiniportAdapterHandle, Status);
|
||||
KeLowerIrql(OldIrql);
|
||||
}
|
||||
|
||||
|
||||
|
@ -746,9 +767,12 @@ VOID NTAPI MiniportDpc(
|
|||
PVOID WorkItemContext;
|
||||
NDIS_WORK_ITEM_TYPE WorkItemType;
|
||||
PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(DeferredContext);
|
||||
KIRQL OldIrql;
|
||||
|
||||
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
||||
|
||||
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
||||
|
||||
NdisStatus =
|
||||
MiniDequeueWorkItem
|
||||
(Adapter, &WorkItemType, &WorkItemContext);
|
||||
|
@ -845,6 +869,8 @@ VOID NTAPI MiniportDpc(
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
||||
}
|
||||
|
||||
|
||||
|
@ -1281,6 +1307,7 @@ NdisIPnPStartDevice(
|
|||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
NDIS_DbgPrint(MIN_TRACE,("failed to open adapter-specific reg key\n"));
|
||||
ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock );
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -1909,7 +1936,10 @@ NdisMSetInformationComplete(
|
|||
IN NDIS_HANDLE MiniportAdapterHandle,
|
||||
IN NDIS_STATUS Status)
|
||||
{
|
||||
KIRQL OldIrql;
|
||||
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
|
||||
(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)(MiniportAdapterHandle, Status);
|
||||
KeLowerIrql(OldIrql);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -238,7 +238,6 @@ ProSend(
|
|||
*/
|
||||
NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
|
||||
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &SpinOldIrql);
|
||||
{
|
||||
/*
|
||||
* if the miniport is marked as busy, we queue the packet as a work item,
|
||||
* else we send the packet directly to the miniport. Sending to the miniport
|
||||
|
@ -251,8 +250,6 @@ ProSend(
|
|||
NDIS_DbgPrint(MAX_TRACE, ("Setting adapter 0x%x to busy\n"));
|
||||
Adapter->MiniportBusy = TRUE;
|
||||
}
|
||||
}
|
||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
|
||||
|
||||
/*
|
||||
* Test the packet to see if it is a MAC loopback.
|
||||
|
@ -269,9 +266,12 @@ ProSend(
|
|||
if (QueueWorkItem)
|
||||
{
|
||||
MiniQueueWorkItem(Adapter, NdisWorkItemSendLoopback, (PVOID)Packet);
|
||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
|
||||
return NDIS_STATUS_PENDING;
|
||||
}
|
||||
|
||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
|
||||
|
||||
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
|
||||
{
|
||||
/*
|
||||
|
@ -306,12 +306,15 @@ ProSend(
|
|||
if (QueueWorkItem)
|
||||
{
|
||||
MiniQueueWorkItem(Adapter, NdisWorkItemSend, (PVOID)Packet);
|
||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
|
||||
NDIS_DbgPrint(MAX_TRACE, ("Queued a work item and returning\n"));
|
||||
return NDIS_STATUS_PENDING;
|
||||
}
|
||||
|
||||
ASSERT(Adapter->NdisMiniportBlock.DriverHandle);
|
||||
|
||||
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
|
||||
|
||||
/*
|
||||
* Call the appropriate send handler
|
||||
*
|
||||
|
|
|
@ -301,7 +301,10 @@ NdisOpenFile(
|
|||
memmove ( FullFileName.Buffer, NDIS_FILE_FOLDER, FullFileName.Length );
|
||||
*Status = RtlAppendUnicodeStringToString ( &FullFileName, FileName );
|
||||
if ( !NT_SUCCESS(*Status) )
|
||||
{
|
||||
*Status = NDIS_STATUS_FAILURE;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
InitializeObjectAttributes ( &ObjectAttributes,
|
||||
&FullFileName,
|
||||
|
@ -321,6 +324,11 @@ NdisOpenFile(
|
|||
FILE_SYNCHRONOUS_IO_NONALERT, // ULONG CreateOptions
|
||||
0, // PVOID EaBuffer
|
||||
0 ); // ULONG EaLength
|
||||
|
||||
if ( !NT_SUCCESS(*Status) )
|
||||
{
|
||||
*Status = NDIS_STATUS_FAILURE;
|
||||
}
|
||||
|
||||
cleanup:
|
||||
if ( FullFileName.Buffer != NULL )
|
||||
|
|
|
@ -595,7 +595,6 @@ VOID LANTransmit(
|
|||
PETH_HEADER EHeader;
|
||||
PCHAR Data;
|
||||
UINT Size;
|
||||
KIRQL OldIrql;
|
||||
PLAN_ADAPTER Adapter = (PLAN_ADAPTER)Context;
|
||||
|
||||
TI_DbgPrint(DEBUG_DATALINK,
|
||||
|
@ -673,13 +672,11 @@ VOID LANTransmit(
|
|||
((PCHAR)LinkAddress)[5] & 0xff));
|
||||
}
|
||||
|
||||
TcpipAcquireSpinLock( &Adapter->Lock, &OldIrql );
|
||||
TI_DbgPrint(MID_TRACE, ("NdisSend\n"));
|
||||
NdisSend(&NdisStatus, Adapter->NdisHandle, NdisPacket);
|
||||
TI_DbgPrint(MID_TRACE, ("NdisSend %s\n",
|
||||
NdisStatus == NDIS_STATUS_PENDING ?
|
||||
"Pending" : "Complete"));
|
||||
TcpipReleaseSpinLock( &Adapter->Lock, OldIrql );
|
||||
|
||||
/* I had a talk with vizzini: these really ought to be here.
|
||||
* we're supposed to see these completed by ndis *only* when
|
||||
|
@ -861,6 +858,11 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name,
|
|||
ExFreePool( Kbio );
|
||||
KbioLength = ResultLength;
|
||||
Kbio = ExAllocatePool( NonPagedPool, KbioLength );
|
||||
if( !Kbio ) {
|
||||
TI_DbgPrint(DEBUG_DATALINK,("Failed to allocate memory\n"));
|
||||
NtClose( EnumKey );
|
||||
return STATUS_NO_MEMORY;
|
||||
}
|
||||
|
||||
Status = ZwEnumerateKey( EnumKey, i, KeyBasicInformation,
|
||||
Kbio, KbioLength, &ResultLength );
|
||||
|
@ -1262,7 +1264,7 @@ NDIS_STATUS LANUnregisterAdapter(
|
|||
|
||||
FreeAdapter(Adapter);
|
||||
|
||||
return NDIS_STATUS_SUCCESS;
|
||||
return NdisStatus;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue