mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 21:23:05 +00:00
- Merge aicom-network-fixes up to r36009
svn path=/trunk/; revision=36010
This commit is contained in:
parent
76153f2508
commit
d158ab5aa3
10 changed files with 58 additions and 29 deletions
|
@ -1293,8 +1293,7 @@ NdisIPnPStartDevice(
|
||||||
* NdisMQueryAdapterResources.
|
* NdisMQueryAdapterResources.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (Stack->Parameters.StartDevice.AllocatedResources != NULL &&
|
if (Stack->Parameters.StartDevice.AllocatedResources != NULL)
|
||||||
Stack->Parameters.StartDevice.AllocatedResourcesTranslated != NULL)
|
|
||||||
{
|
{
|
||||||
ResourceCount = Stack->Parameters.StartDevice.AllocatedResources->List[0].
|
ResourceCount = Stack->Parameters.StartDevice.AllocatedResources->List[0].
|
||||||
PartialResourceList.Count;
|
PartialResourceList.Count;
|
||||||
|
@ -1310,24 +1309,31 @@ NdisIPnPStartDevice(
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResources,
|
||||||
|
Stack->Parameters.StartDevice.AllocatedResources,
|
||||||
|
ResourceListSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Stack->Parameters.StartDevice.AllocatedResourcesTranslated != NULL)
|
||||||
|
{
|
||||||
|
ResourceCount = Stack->Parameters.StartDevice.AllocatedResources->List[0].
|
||||||
|
PartialResourceList.Count;
|
||||||
|
ResourceListSize =
|
||||||
|
FIELD_OFFSET(CM_RESOURCE_LIST, List[0].PartialResourceList.
|
||||||
|
PartialDescriptors[ResourceCount]);
|
||||||
|
|
||||||
Adapter->NdisMiniportBlock.AllocatedResourcesTranslated =
|
Adapter->NdisMiniportBlock.AllocatedResourcesTranslated =
|
||||||
ExAllocatePool(PagedPool, ResourceListSize);
|
ExAllocatePool(PagedPool, ResourceListSize);
|
||||||
if (Adapter->NdisMiniportBlock.AllocatedResourcesTranslated == NULL)
|
if (Adapter->NdisMiniportBlock.AllocatedResourcesTranslated == NULL)
|
||||||
{
|
{
|
||||||
ExFreePool(Adapter->NdisMiniportBlock.AllocatedResources);
|
|
||||||
Adapter->NdisMiniportBlock.AllocatedResources = NULL;
|
|
||||||
ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock );
|
ExInterlockedRemoveEntryList( &Adapter->ListEntry, &AdapterListLock );
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResources,
|
|
||||||
Stack->Parameters.StartDevice.AllocatedResources,
|
|
||||||
ResourceListSize);
|
|
||||||
|
|
||||||
RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResourcesTranslated,
|
RtlCopyMemory(Adapter->NdisMiniportBlock.AllocatedResourcesTranslated,
|
||||||
Stack->Parameters.StartDevice.AllocatedResourcesTranslated,
|
Stack->Parameters.StartDevice.AllocatedResourcesTranslated,
|
||||||
ResourceListSize);
|
ResourceListSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Store the Bus Type, Bus Number and Slot information. It's used by
|
* Store the Bus Type, Bus Number and Slot information. It's used by
|
||||||
|
|
|
@ -805,10 +805,11 @@ NdisRegisterProtocol(
|
||||||
NtStatus = ZwQueryValueKey(DriverKeyHandle, &ValueName, KeyValuePartialInformation, KeyInformation,
|
NtStatus = ZwQueryValueKey(DriverKeyHandle, &ValueName, KeyValuePartialInformation, KeyInformation,
|
||||||
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + ResultLength, &ResultLength);
|
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + ResultLength, &ResultLength);
|
||||||
|
|
||||||
|
ZwClose(DriverKeyHandle);
|
||||||
|
|
||||||
if(!NT_SUCCESS(NtStatus))
|
if(!NT_SUCCESS(NtStatus))
|
||||||
{
|
{
|
||||||
NDIS_DbgPrint(MIN_TRACE, ("Unable to query the Bind value\n"));
|
NDIS_DbgPrint(MIN_TRACE, ("Unable to query the Bind value\n"));
|
||||||
ZwClose(DriverKeyHandle);
|
|
||||||
ExFreePool(KeyInformation);
|
ExFreePool(KeyInformation);
|
||||||
ExFreePool(Protocol);
|
ExFreePool(Protocol);
|
||||||
*Status = NDIS_STATUS_FAILURE;
|
*Status = NDIS_STATUS_FAILURE;
|
||||||
|
@ -893,7 +894,8 @@ NdisRegisterProtocol(
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
*Status = NDIS_STATUS_SUCCESS;
|
ExFreePool(KeyInformation);
|
||||||
|
*Status = NDIS_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -322,9 +322,6 @@ NdisOpenFile(
|
||||||
0, // PVOID EaBuffer
|
0, // PVOID EaBuffer
|
||||||
0 ); // ULONG EaLength
|
0 ); // ULONG EaLength
|
||||||
|
|
||||||
//if ( !NT_SUCCESS(*Status) )
|
|
||||||
// goto cleanup;
|
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
if ( FullFileName.Buffer != NULL )
|
if ( FullFileName.Buffer != NULL )
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,9 +20,9 @@ typedef struct _PORT_SET {
|
||||||
FAST_MUTEX Mutex;
|
FAST_MUTEX Mutex;
|
||||||
} PORT_SET, *PPORT_SET;
|
} PORT_SET, *PPORT_SET;
|
||||||
|
|
||||||
VOID PortsStartup( PPORT_SET PortSet,
|
NTSTATUS PortsStartup( PPORT_SET PortSet,
|
||||||
UINT StartingPort,
|
UINT StartingPort,
|
||||||
UINT PortsToManage );
|
UINT PortsToManage );
|
||||||
VOID PortsShutdown( PPORT_SET PortSet );
|
VOID PortsShutdown( PPORT_SET PortSet );
|
||||||
VOID DeallocatePort( PPORT_SET PortSet, ULONG Port );
|
VOID DeallocatePort( PPORT_SET PortSet, ULONG Port );
|
||||||
BOOLEAN AllocatePort( PPORT_SET PortSet, ULONG Port );
|
BOOLEAN AllocatePort( PPORT_SET PortSet, ULONG Port );
|
||||||
|
|
|
@ -319,11 +319,11 @@ NDIS_STATUS PrependPacket( PNDIS_PACKET Packet, PCHAR Data, UINT Length,
|
||||||
|
|
||||||
if( Copy ) {
|
if( Copy ) {
|
||||||
NewBuf = ExAllocatePool( NonPagedPool, Length );
|
NewBuf = ExAllocatePool( NonPagedPool, Length );
|
||||||
if( !NewBuf ) return STATUS_NO_MEMORY;
|
if( !NewBuf ) return NDIS_STATUS_RESOURCES;
|
||||||
RtlCopyMemory( NewBuf, Data, Length );
|
RtlCopyMemory( NewBuf, Data, Length );
|
||||||
} else NewBuf = Data;
|
} else NewBuf = Data;
|
||||||
|
|
||||||
NdisAllocateBuffer( &Status, &Buffer, GlobalBufferPool, Data, Length );
|
NdisAllocateBuffer( &Status, &Buffer, GlobalBufferPool, NewBuf, Length );
|
||||||
if( Status != NDIS_STATUS_SUCCESS ) return Status;
|
if( Status != NDIS_STATUS_SUCCESS ) return Status;
|
||||||
|
|
||||||
NdisChainBufferAtFront( Packet, Buffer );
|
NdisChainBufferAtFront( Packet, Buffer );
|
||||||
|
@ -351,7 +351,7 @@ NDIS_STATUS AllocatePacketWithBufferX( PNDIS_PACKET *NdisPacket,
|
||||||
PCHAR NewData;
|
PCHAR NewData;
|
||||||
|
|
||||||
NewData = ExAllocatePool( NonPagedPool, Len );
|
NewData = ExAllocatePool( NonPagedPool, Len );
|
||||||
if( !NewData ) return NDIS_STATUS_NOT_ACCEPTED; // XXX
|
if( !NewData ) return NDIS_STATUS_RESOURCES;
|
||||||
TrackWithTag(EXALLOC_TAG, NewData, File, Line);
|
TrackWithTag(EXALLOC_TAG, NewData, File, Line);
|
||||||
|
|
||||||
if( Data ) RtlCopyMemory(NewData, Data, Len);
|
if( Data ) RtlCopyMemory(NewData, Data, Len);
|
||||||
|
|
|
@ -29,7 +29,7 @@ TDI_STATUS InfoTdiQueryGetInterfaceMIB(TDIEntityID *ID,
|
||||||
(PIFENTRY)ExAllocatePool( NonPagedPool,
|
(PIFENTRY)ExAllocatePool( NonPagedPool,
|
||||||
sizeof(IFENTRY) + MAX_IFDESCR_LEN );
|
sizeof(IFENTRY) + MAX_IFDESCR_LEN );
|
||||||
|
|
||||||
if( !OutData ) return TDI_INVALID_REQUEST; /* Out of memory */
|
if( !OutData ) return TDI_NO_RESOURCES; /* Out of memory */
|
||||||
|
|
||||||
RtlZeroMemory( OutData, sizeof(IFENTRY) + MAX_IFDESCR_LEN );
|
RtlZeroMemory( OutData, sizeof(IFENTRY) + MAX_IFDESCR_LEN );
|
||||||
|
|
||||||
|
|
|
@ -711,8 +711,8 @@ DriverEntry(
|
||||||
/* Setup network layer and transport layer entities */
|
/* Setup network layer and transport layer entities */
|
||||||
KeInitializeSpinLock(&EntityListLock);
|
KeInitializeSpinLock(&EntityListLock);
|
||||||
EntityList = ExAllocatePool(NonPagedPool, sizeof(TDIEntityID) * MAX_TDI_ENTITIES );
|
EntityList = ExAllocatePool(NonPagedPool, sizeof(TDIEntityID) * MAX_TDI_ENTITIES );
|
||||||
if (!NT_SUCCESS(Status)) {
|
if (!EntityList) {
|
||||||
TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
|
TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
|
||||||
TiUnload(DriverObject);
|
TiUnload(DriverObject);
|
||||||
return STATUS_INSUFFICIENT_RESOURCES;
|
return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
}
|
}
|
||||||
|
@ -760,9 +760,23 @@ DriverEntry(
|
||||||
IPStartup(RegistryPath);
|
IPStartup(RegistryPath);
|
||||||
|
|
||||||
/* Initialize transport level protocol subsystems */
|
/* Initialize transport level protocol subsystems */
|
||||||
RawIPStartup();
|
Status = RawIPStartup();
|
||||||
UDPStartup();
|
if( !NT_SUCCESS(Status) ) {
|
||||||
TCPStartup();
|
TiUnload(DriverObject);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = UDPStartup();
|
||||||
|
if( !NT_SUCCESS(Status) ) {
|
||||||
|
TiUnload(DriverObject);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = TCPStartup();
|
||||||
|
if( !NT_SUCCESS(Status) ) {
|
||||||
|
TiUnload(DriverObject);
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
/* Initialize the lan worker */
|
/* Initialize the lan worker */
|
||||||
LANStartup();
|
LANStartup();
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
#include "precomp.h"
|
#include "precomp.h"
|
||||||
|
|
||||||
VOID PortsStartup( PPORT_SET PortSet,
|
NTSTATUS PortsStartup( PPORT_SET PortSet,
|
||||||
UINT StartingPort,
|
UINT StartingPort,
|
||||||
UINT PortsToManage ) {
|
UINT PortsToManage ) {
|
||||||
PortSet->StartingPort = StartingPort;
|
PortSet->StartingPort = StartingPort;
|
||||||
|
@ -19,11 +19,13 @@ VOID PortsStartup( PPORT_SET PortSet,
|
||||||
PortSet->PortsToOversee - 1;
|
PortSet->PortsToOversee - 1;
|
||||||
PortSet->ProtoBitBuffer =
|
PortSet->ProtoBitBuffer =
|
||||||
PoolAllocateBuffer( (PortSet->PortsToOversee + 7) / 8 );
|
PoolAllocateBuffer( (PortSet->PortsToOversee + 7) / 8 );
|
||||||
|
if(!PortSet->ProtoBitBuffer) return STATUS_INSUFFICIENT_RESOURCES;
|
||||||
RtlInitializeBitMap( &PortSet->ProtoBitmap,
|
RtlInitializeBitMap( &PortSet->ProtoBitmap,
|
||||||
PortSet->ProtoBitBuffer,
|
PortSet->ProtoBitBuffer,
|
||||||
PortSet->PortsToOversee );
|
PortSet->PortsToOversee );
|
||||||
RtlClearAllBits( &PortSet->ProtoBitmap );
|
RtlClearAllBits( &PortSet->ProtoBitmap );
|
||||||
ExInitializeFastMutex( &PortSet->Mutex );
|
ExInitializeFastMutex( &PortSet->Mutex );
|
||||||
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID PortsShutdown( PPORT_SET PortSet ) {
|
VOID PortsShutdown( PPORT_SET PortSet ) {
|
||||||
|
|
|
@ -455,7 +455,11 @@ NTSTATUS TCPStartup(VOID)
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
PortsStartup( &TCPPorts, 1, 0xfffe );
|
Status = PortsStartup( &TCPPorts, 1, 0xfffe );
|
||||||
|
if( !NT_SUCCESS(Status) ) {
|
||||||
|
TCPMemShutdown();
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
|
|
||||||
RegisterOskitTCPEventHandlers( &EventHandlers );
|
RegisterOskitTCPEventHandlers( &EventHandlers );
|
||||||
InitOskitTCP();
|
InitOskitTCP();
|
||||||
|
|
|
@ -302,8 +302,12 @@ NTSTATUS UDPStartup(
|
||||||
#ifdef __NTDRIVER__
|
#ifdef __NTDRIVER__
|
||||||
RtlZeroMemory(&UDPStats, sizeof(UDP_STATISTICS));
|
RtlZeroMemory(&UDPStats, sizeof(UDP_STATISTICS));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
PortsStartup( &UDPPorts, 1, 0xfffe );
|
Status = PortsStartup( &UDPPorts, 1, 0xfffe );
|
||||||
|
|
||||||
|
if( !NT_SUCCESS(Status) ) return Status;
|
||||||
|
|
||||||
/* Register this protocol with IP layer */
|
/* Register this protocol with IP layer */
|
||||||
IPRegisterProtocol(IPPROTO_UDP, UDPReceive);
|
IPRegisterProtocol(IPPROTO_UDP, UDPReceive);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue