mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 06:53:37 +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
|
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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 ) {
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
*
|
*
|
||||||
|
|
|
@ -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 )
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue