- Merge aicom-network-fixes up to r36151

svn path=/trunk/; revision=36152
This commit is contained in:
Cameron Gutman 2008-09-12 04:08:55 +00:00
parent 4046b602f2
commit 5f008ce5b8
12 changed files with 90 additions and 32 deletions

View file

@ -39,7 +39,6 @@ AfdGetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
NTSTATUS STDCALL NTSTATUS STDCALL
AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp, AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
PIO_STACK_LOCATION IrpSp ) { PIO_STACK_LOCATION IrpSp ) {
NTSTATUS Status = STATUS_BUFFER_TOO_SMALL;
PFILE_OBJECT FileObject = IrpSp->FileObject; PFILE_OBJECT FileObject = IrpSp->FileObject;
PAFD_FCB FCB = FileObject->FsContext; PAFD_FCB FCB = FileObject->FsContext;
@ -47,25 +46,19 @@ AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp,
if( FCB->Context ) { if( FCB->Context ) {
ExFreePool( FCB->Context ); ExFreePool( FCB->Context );
FCB->Context = NULL; FCB->ContextSize = 0;
} }
if( FCB->ContextSize < FCB->Context = ExAllocatePool( PagedPool,
IrpSp->Parameters.DeviceIoControl.InputBufferLength ) { 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, FCB->ContextSize = IrpSp->Parameters.DeviceIoControl.InputBufferLength;
IrpSp->Parameters.DeviceIoControl.Type3InputBuffer,
IrpSp->Parameters.DeviceIoControl.InputBufferLength );
Status = STATUS_SUCCESS;
}
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 );
} }

View file

@ -174,8 +174,8 @@ PAFD_HANDLE LockHandles( PAFD_HANDLE HandleArray, UINT HandleCount ) {
( NonPagedPool, HandleCount * sizeof(AFD_HANDLE) ); ( NonPagedPool, HandleCount * sizeof(AFD_HANDLE) );
for( i = 0; FileObjects && i < HandleCount; i++ ) { for( i = 0; FileObjects && i < HandleCount; i++ ) {
HandleArray[i].Status = 0; FileObjects[i].Status = 0;
HandleArray[i].Events = HandleArray[i].Events; FileObjects[i].Events = HandleArray[i].Events;
FileObjects[i].Handle = 0; FileObjects[i].Handle = 0;
if( !HandleArray[i].Handle ) continue; if( !HandleArray[i].Handle ) continue;
if( NT_SUCCESS(Status) ) { if( NT_SUCCESS(Status) ) {
@ -206,6 +206,7 @@ VOID UnlockHandles( PAFD_HANDLE HandleArray, UINT HandleCount ) {
} }
ExFreePool( HandleArray ); ExFreePool( HandleArray );
HandleArray = NULL;
} }
/* Returns transitioned state or SOCKET_STATE_INVALID_TRANSITION */ /* Returns transitioned state or SOCKET_STATE_INVALID_TRANSITION */

View file

@ -52,6 +52,7 @@ AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp,
ULONG EaLength; ULONG EaLength;
PWCHAR EaInfoValue = NULL; PWCHAR EaInfoValue = NULL;
UINT Disposition, i; UINT Disposition, i;
NTSTATUS Status = STATUS_SUCCESS;
AFD_DbgPrint(MID_TRACE, AFD_DbgPrint(MID_TRACE,
("AfdCreate(DeviceObject %p Irp %p)\n", DeviceObject, Irp)); ("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")); AFD_DbgPrint(MID_TRACE,("Packet oriented socket\n"));
/* Allocate our backup buffer */ /* Allocate our backup buffer */
FCB->Recv.Window = ExAllocatePool( NonPagedPool, FCB->Recv.Size ); FCB->Recv.Window = ExAllocatePool( NonPagedPool, FCB->Recv.Size );
if( !FCB->Recv.Window ) Status = STATUS_NO_MEMORY;
FCB->Send.Window = ExAllocatePool( NonPagedPool, FCB->Send.Size ); 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 */ /* A datagram socket is always sendable */
FCB->PollState |= AFD_EVENT_SEND; FCB->PollState |= AFD_EVENT_SEND;
PollReeval( FCB->DeviceExt, FCB->FileObject ); 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 ); IoCompleteRequest( Irp, IO_NETWORK_INCREMENT );
return STATUS_SUCCESS; return Status;
} }
VOID DestroySocket( PAFD_FCB FCB ) { VOID DestroySocket( PAFD_FCB FCB ) {

View file

@ -642,6 +642,7 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp,
AFD_DbgPrint(MID_TRACE,("Nonblocking\n")); AFD_DbgPrint(MID_TRACE,("Nonblocking\n"));
Status = STATUS_CANT_WAIT; Status = STATUS_CANT_WAIT;
PollReeval( FCB->DeviceExt, FCB->FileObject ); PollReeval( FCB->DeviceExt, FCB->FileObject );
UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE );
return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL );
} else { } else {
PollReeval( FCB->DeviceExt, FCB->FileObject ); PollReeval( FCB->DeviceExt, FCB->FileObject );

View file

@ -311,7 +311,7 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp,
AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status));
return UnlockAndMaybeComplete( FCB, STATUS_SUCCESS, Irp, return UnlockAndMaybeComplete( FCB, Status, Irp,
0, NULL ); 0, NULL );
} }

View file

@ -349,7 +349,10 @@ NDIS_STATUS STDCALL ProtocolReceive(
/* Get a transfer data packet */ /* Get a transfer data packet */
KeAcquireSpinLockAtDpcLevel(&Adapter->Lock); KeAcquireSpinLockAtDpcLevel(&Adapter->Lock);
NdisStatus = AllocatePacketWithBuffer( &NdisPacket, NULL, Adapter->MTU ); 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)); LA_DbgPrint(DEBUG_DATALINK, ("pretransfer LookaheadBufferSize %d packsize %d\n",LookaheadBufferSize,PacketSize));
{ {
UINT temp; UINT temp;

View file

@ -283,6 +283,7 @@ NdisOpenProtocolConfiguration(
if(!ConfigurationContext) if(!ConfigurationContext)
{ {
NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n"));
ZwClose(KeyHandle);
*ConfigurationHandle = NULL; *ConfigurationHandle = NULL;
*Status = NDIS_STATUS_FAILURE; *Status = NDIS_STATUS_FAILURE;
return; return;
@ -849,6 +850,7 @@ NdisOpenConfigurationKeyByIndex(
if(!ConfigurationContext) if(!ConfigurationContext)
{ {
NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n"));
ZwClose(RegKeyHandle);
*Status = NDIS_STATUS_FAILURE; *Status = NDIS_STATUS_FAILURE;
return; return;
} }
@ -907,6 +909,7 @@ NdisOpenConfigurationKeyByName(
if(!ConfigurationContext) if(!ConfigurationContext)
{ {
NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n")); NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n"));
ZwClose(RegKeyHandle);
*Status = NDIS_STATUS_FAILURE; *Status = NDIS_STATUS_FAILURE;
return; return;
} }

View file

@ -407,6 +407,7 @@ NdisMAllocateMapRegisters(
if(!NT_SUCCESS(NtStatus)) if(!NT_SUCCESS(NtStatus))
{ {
NDIS_DbgPrint(MIN_TRACE, ("IoAllocateAdapterChannel failed: 0x%x\n", NtStatus)); NDIS_DbgPrint(MIN_TRACE, ("IoAllocateAdapterChannel failed: 0x%x\n", NtStatus));
ExFreePool(Adapter->MapRegisters);
return NDIS_STATUS_RESOURCES; return NDIS_STATUS_RESOURCES;
} }
@ -417,6 +418,7 @@ NdisMAllocateMapRegisters(
if(!NT_SUCCESS(NtStatus)) if(!NT_SUCCESS(NtStatus))
{ {
NDIS_DbgPrint(MIN_TRACE, ("KeWaitForSingleObject failed: 0x%x\n", NtStatus)); NDIS_DbgPrint(MIN_TRACE, ("KeWaitForSingleObject failed: 0x%x\n", NtStatus));
ExFreePool(Adapter->MapRegisters);
return NDIS_STATUS_RESOURCES; return NDIS_STATUS_RESOURCES;
} }

View file

@ -314,15 +314,18 @@ MiniRequestComplete(
IN NDIS_STATUS Status) IN NDIS_STATUS Status)
{ {
PNDIS_REQUEST_MAC_BLOCK MacBlock = (PNDIS_REQUEST_MAC_BLOCK)Request->MacReserved; PNDIS_REQUEST_MAC_BLOCK MacBlock = (PNDIS_REQUEST_MAC_BLOCK)Request->MacReserved;
KIRQL OldIrql;
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
if( MacBlock->Binding->RequestCompleteHandler ) { if( MacBlock->Binding->RequestCompleteHandler ) {
(*MacBlock->Binding->RequestCompleteHandler)( (*MacBlock->Binding->RequestCompleteHandler)(
MacBlock->Binding->ProtocolBindingContext, MacBlock->Binding->ProtocolBindingContext,
Request, Request,
Status); Status);
} }
KeLowerIrql(OldIrql);
} }
VOID NTAPI VOID NTAPI
@ -340,15 +343,18 @@ MiniSendComplete(
*/ */
{ {
PADAPTER_BINDING AdapterBinding; PADAPTER_BINDING AdapterBinding;
KIRQL OldIrql;
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
AdapterBinding = (PADAPTER_BINDING)Packet->Reserved[0]; AdapterBinding = (PADAPTER_BINDING)Packet->Reserved[0];
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
(*AdapterBinding->ProtocolBinding->Chars.SendCompleteHandler)( (*AdapterBinding->ProtocolBinding->Chars.SendCompleteHandler)(
AdapterBinding->NdisOpenBlock.ProtocolBindingContext, AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
Packet, Packet,
Status); Status);
KeLowerIrql(OldIrql);
} }
@ -370,15 +376,18 @@ MiniTransferDataComplete(
IN UINT BytesTransferred) IN UINT BytesTransferred)
{ {
PADAPTER_BINDING AdapterBinding; PADAPTER_BINDING AdapterBinding;
KIRQL OldIrql;
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
AdapterBinding = (PADAPTER_BINDING)Packet->Reserved[0]; AdapterBinding = (PADAPTER_BINDING)Packet->Reserved[0];
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
(*AdapterBinding->ProtocolBinding->Chars.SendCompleteHandler)( (*AdapterBinding->ProtocolBinding->Chars.SendCompleteHandler)(
AdapterBinding->NdisOpenBlock.ProtocolBindingContext, AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
Packet, Packet,
Status); Status);
KeLowerIrql(OldIrql);
} }
@ -548,10 +557,12 @@ MiniQueryInformation(
{ {
NDIS_STATUS NdisStatus; NDIS_STATUS NdisStatus;
ULONG BytesNeeded; ULONG BytesNeeded;
KIRQL OldIrql;
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
/* call the miniport's queryinfo handler */ /* call the miniport's queryinfo handler */
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.QueryInformationHandler)( NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.QueryInformationHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext, Adapter->NdisMiniportBlock.MiniportAdapterContext,
Oid, Oid,
@ -559,6 +570,7 @@ MiniQueryInformation(
Size, Size,
BytesWritten, BytesWritten,
&BytesNeeded); &BytesNeeded);
KeLowerIrql(OldIrql);
/* FIXME: Wait in pending case! */ /* FIXME: Wait in pending case! */
@ -678,14 +690,17 @@ MiniDoRequest(
* Status of operation * Status of operation
*/ */
{ {
NDIS_STATUS Status;
KIRQL OldIrql;
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
Adapter->MediaRequest = NdisRequest; Adapter->MediaRequest = NdisRequest;
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
switch (NdisRequest->RequestType) switch (NdisRequest->RequestType)
{ {
case NdisRequestQueryInformation: case NdisRequestQueryInformation:
return (*Adapter->DriverHandle->MiniportCharacteristics.QueryInformationHandler)( Status = (*Adapter->DriverHandle->MiniportCharacteristics.QueryInformationHandler)(
Adapter->MiniportAdapterContext, Adapter->MiniportAdapterContext,
NdisRequest->DATA.QUERY_INFORMATION.Oid, NdisRequest->DATA.QUERY_INFORMATION.Oid,
NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer,
@ -695,7 +710,7 @@ MiniDoRequest(
break; break;
case NdisRequestSetInformation: case NdisRequestSetInformation:
return (*Adapter->DriverHandle->MiniportCharacteristics.SetInformationHandler)( Status = (*Adapter->DriverHandle->MiniportCharacteristics.SetInformationHandler)(
Adapter->MiniportAdapterContext, Adapter->MiniportAdapterContext,
NdisRequest->DATA.SET_INFORMATION.Oid, NdisRequest->DATA.SET_INFORMATION.Oid,
NdisRequest->DATA.SET_INFORMATION.InformationBuffer, NdisRequest->DATA.SET_INFORMATION.InformationBuffer,
@ -705,8 +720,11 @@ MiniDoRequest(
break; break;
default: 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 MiniportBlock =
(PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle; (PNDIS_MINIPORT_BLOCK)MiniportAdapterHandle;
KIRQL OldIrql;
ASSERT(MiniportBlock); ASSERT(MiniportBlock);
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
if( MiniportBlock->QueryCompleteHandler ) if( MiniportBlock->QueryCompleteHandler )
(MiniportBlock->QueryCompleteHandler)(MiniportAdapterHandle, Status); (MiniportBlock->QueryCompleteHandler)(MiniportAdapterHandle, Status);
KeLowerIrql(OldIrql);
} }
@ -746,9 +767,12 @@ VOID NTAPI MiniportDpc(
PVOID WorkItemContext; PVOID WorkItemContext;
NDIS_WORK_ITEM_TYPE WorkItemType; NDIS_WORK_ITEM_TYPE WorkItemType;
PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(DeferredContext); PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(DeferredContext);
KIRQL OldIrql;
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
NdisStatus = NdisStatus =
MiniDequeueWorkItem MiniDequeueWorkItem
(Adapter, &WorkItemType, &WorkItemContext); (Adapter, &WorkItemType, &WorkItemContext);
@ -845,6 +869,8 @@ VOID NTAPI MiniportDpc(
break; break;
} }
} }
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
} }
@ -1281,6 +1307,7 @@ NdisIPnPStartDevice(
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
NDIS_DbgPrint(MIN_TRACE,("failed to open adapter-specific reg key\n")); NDIS_DbgPrint(MIN_TRACE,("failed to open adapter-specific reg key\n"));
ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock );
return Status; return Status;
} }
@ -1909,7 +1936,10 @@ NdisMSetInformationComplete(
IN NDIS_HANDLE MiniportAdapterHandle, IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_STATUS Status) IN NDIS_STATUS Status)
{ {
KIRQL OldIrql;
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql);
(*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)(MiniportAdapterHandle, Status); (*((PNDIS_MINIPORT_BLOCK)(MiniportAdapterHandle))->SetCompleteHandler)(MiniportAdapterHandle, Status);
KeLowerIrql(OldIrql);
} }

View file

@ -238,7 +238,6 @@ ProSend(
*/ */
NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n")); NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &SpinOldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &SpinOldIrql);
{
/* /*
* if the miniport is marked as busy, we queue the packet as a work item, * 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 * 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")); NDIS_DbgPrint(MAX_TRACE, ("Setting adapter 0x%x to busy\n"));
Adapter->MiniportBusy = TRUE; Adapter->MiniportBusy = TRUE;
} }
}
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
/* /*
* Test the packet to see if it is a MAC loopback. * Test the packet to see if it is a MAC loopback.
@ -269,9 +266,12 @@ ProSend(
if (QueueWorkItem) if (QueueWorkItem)
{ {
MiniQueueWorkItem(Adapter, NdisWorkItemSendLoopback, (PVOID)Packet); MiniQueueWorkItem(Adapter, NdisWorkItemSendLoopback, (PVOID)Packet);
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
return NDIS_STATUS_PENDING; return NDIS_STATUS_PENDING;
} }
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql); KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
{ {
/* /*
@ -306,12 +306,15 @@ ProSend(
if (QueueWorkItem) if (QueueWorkItem)
{ {
MiniQueueWorkItem(Adapter, NdisWorkItemSend, (PVOID)Packet); MiniQueueWorkItem(Adapter, NdisWorkItemSend, (PVOID)Packet);
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
NDIS_DbgPrint(MAX_TRACE, ("Queued a work item and returning\n")); NDIS_DbgPrint(MAX_TRACE, ("Queued a work item and returning\n"));
return NDIS_STATUS_PENDING; return NDIS_STATUS_PENDING;
} }
ASSERT(Adapter->NdisMiniportBlock.DriverHandle); ASSERT(Adapter->NdisMiniportBlock.DriverHandle);
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, SpinOldIrql);
/* /*
* Call the appropriate send handler * Call the appropriate send handler
* *

View file

@ -301,7 +301,10 @@ NdisOpenFile(
memmove ( FullFileName.Buffer, NDIS_FILE_FOLDER, FullFileName.Length ); memmove ( FullFileName.Buffer, NDIS_FILE_FOLDER, FullFileName.Length );
*Status = RtlAppendUnicodeStringToString ( &FullFileName, FileName ); *Status = RtlAppendUnicodeStringToString ( &FullFileName, FileName );
if ( !NT_SUCCESS(*Status) ) if ( !NT_SUCCESS(*Status) )
{
*Status = NDIS_STATUS_FAILURE;
goto cleanup; goto cleanup;
}
InitializeObjectAttributes ( &ObjectAttributes, InitializeObjectAttributes ( &ObjectAttributes,
&FullFileName, &FullFileName,
@ -321,6 +324,11 @@ NdisOpenFile(
FILE_SYNCHRONOUS_IO_NONALERT, // ULONG CreateOptions FILE_SYNCHRONOUS_IO_NONALERT, // ULONG CreateOptions
0, // PVOID EaBuffer 0, // PVOID EaBuffer
0 ); // ULONG EaLength 0 ); // ULONG EaLength
if ( !NT_SUCCESS(*Status) )
{
*Status = NDIS_STATUS_FAILURE;
}
cleanup: cleanup:
if ( FullFileName.Buffer != NULL ) if ( FullFileName.Buffer != NULL )

View file

@ -595,7 +595,6 @@ VOID LANTransmit(
PETH_HEADER EHeader; PETH_HEADER EHeader;
PCHAR Data; PCHAR Data;
UINT Size; UINT Size;
KIRQL OldIrql;
PLAN_ADAPTER Adapter = (PLAN_ADAPTER)Context; PLAN_ADAPTER Adapter = (PLAN_ADAPTER)Context;
TI_DbgPrint(DEBUG_DATALINK, TI_DbgPrint(DEBUG_DATALINK,
@ -673,13 +672,11 @@ VOID LANTransmit(
((PCHAR)LinkAddress)[5] & 0xff)); ((PCHAR)LinkAddress)[5] & 0xff));
} }
TcpipAcquireSpinLock( &Adapter->Lock, &OldIrql );
TI_DbgPrint(MID_TRACE, ("NdisSend\n")); TI_DbgPrint(MID_TRACE, ("NdisSend\n"));
NdisSend(&NdisStatus, Adapter->NdisHandle, NdisPacket); NdisSend(&NdisStatus, Adapter->NdisHandle, NdisPacket);
TI_DbgPrint(MID_TRACE, ("NdisSend %s\n", TI_DbgPrint(MID_TRACE, ("NdisSend %s\n",
NdisStatus == NDIS_STATUS_PENDING ? NdisStatus == NDIS_STATUS_PENDING ?
"Pending" : "Complete")); "Pending" : "Complete"));
TcpipReleaseSpinLock( &Adapter->Lock, OldIrql );
/* I had a talk with vizzini: these really ought to be here. /* I had a talk with vizzini: these really ought to be here.
* we're supposed to see these completed by ndis *only* when * we're supposed to see these completed by ndis *only* when
@ -861,6 +858,11 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name,
ExFreePool( Kbio ); ExFreePool( Kbio );
KbioLength = ResultLength; KbioLength = ResultLength;
Kbio = ExAllocatePool( NonPagedPool, KbioLength ); 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, Status = ZwEnumerateKey( EnumKey, i, KeyBasicInformation,
Kbio, KbioLength, &ResultLength ); Kbio, KbioLength, &ResultLength );
@ -1262,7 +1264,7 @@ NDIS_STATUS LANUnregisterAdapter(
FreeAdapter(Adapter); FreeAdapter(Adapter);
return NDIS_STATUS_SUCCESS; return NdisStatus;
} }