Share via


NdisAllocatePacketPoolEx 함수(ndis.h)

참고 NDIS 5. x 는 더 이상 사용되지 않으며 NDIS 6으로 대체됩니다. x. 새로운 NDIS 드라이버 개발은 Windows Vista부터 시작하는 네트워크 드라이버를 참조하세요. NDIS 5 포팅에 대한 자세한 내용입니다. x 드라이버를 NDIS 6에 연결합니다. x, NDIS 5.x 드라이버를 NDIS 6.0으로 포팅을 참조하세요.

이 함수는 패킷 설명자 풀에 대한 스토리지 블록을 할당하고 초기화합니다.

구문

void NdisAllocatePacketPoolEx(
  [out] PNDIS_STATUS Status,
  [out] PNDIS_HANDLE PoolHandle,
  [in]  UINT         NumberOfDescriptors,
  [in]  UINT         NumberOfOverflowDescriptors,
  [in]  UINT         ProtocolReservedLength
);

매개 변수

[out] Status

이 함수가 패킷 풀 할당의 상태 반환하는 호출자 제공 변수를 가리킵니다.

[out] PoolHandle

이 함수가 패킷 풀에 대한 핸들을 반환하는 호출자 제공 변수를 가리킵니다. 이 핸들은 드라이버가 이후에 호출하는 NdisXXX패킷 함수에 필요한 매개 변수입니다.

[in] NumberOfDescriptors

예상되는 일반 사용을 위해 풀에 포함해야 하는 패킷 설명자 수를 지정합니다. 할당할 수 있는 최대 NumberOfDescriptors 는 0xFFFF. 이보다 더 많은 할당을 시도하면 NdisAllocatePacketPoolEx 는 NDIS_STATUS_RESOURCES 상태를 반환합니다.

[in] NumberOfOverflowDescriptors

오버플로 상황에 예약된 패킷 설명자 수를 지정합니다. 즉, NumberOfDescriptors 에서 지정한 모든 설명자가 사용 중인 경우입니다. 이 매개 변수와 NumberOfDescriptors의 합계가 0xFFFF 초과하면 NdisAllocatePacketPoolEx는 이 매개 변수로 제공된 값을 줄여 Total NumberOfDescriptors 및 NumberOfOverflowDescriptors가 0xFFFF.

[in] ProtocolReservedLength

각 패킷 설명자의 ProtocolReserved 배열에 할당할 바이트 수를 지정합니다. 수신 표시에 사용할 패킷 설명자의 경우 이 매개 변수는 4*크기(PVOID)입니다.

반환 값

없음

설명

다음 표에는 이 함수에 대한 가능한 반환 값이 나와 있습니다.

상태 Description
NDIS_STATUS_SUCCESS 드라이버는 패킷 설명자가 필요한 경우 NdisAllocatePacket 을 호출하여 상위 수준 드라이버까지 표시하거나 하위 수준 드라이버로 패킷을 보낼 수 있습니다.
NDIS_STATUS_RESOURCES 메모리 부족으로 인해 패킷 풀을 할당하지 못했습니다. 이 반환이 반드시 후속 호출이 실패한다는 것을 의미하지는 않습니다. 그러나 호출자는 NumberOfDescriptors 를 줄이고 즉시 다시 호출하려고 시도할 수 있습니다.

NdisAllocatePacketPoolEx를 성공적으로 호출하면 호출자가 저장해야 하는 패킷 풀에 대한 핸들이 반환됩니다. 일반적으로 드라이버는 이 핸들을 사용하여 NdisAllocatePacket 을 한 번 이상 호출하여 패킷 설명자 집합을 할당합니다.

NdisAllocatePacketPoolExNumberOfDescriptors에 지정된 패킷 설명자 수를 수용하기에 충분한 메모리만 정적으로 할당합니다. NdisAllocatePacket을 호출하여 풀에서 할당할 수 있는 패킷 설명자의 총 수는 0xFFFF 작거나 원래 NdisAllocatePacketPoolEx에 전달된 NumberOfDescriptorsNumberOfOverflowDescriptors의 합계입니다. 오버플로 설명자는 오버플로 상황에서만 동적으로 할당됩니다. 즉, 지정된 NumberOfDescriptors 가 이미 할당되어 계속 사용 중인 경우입니다.

NumberOfDescriptorsNumberOfOverflowDescriptors의 합계는 패킷 풀의 무료 목록에 패킷 설명자를 반환하기 위해 NdisFreePacket을 호출하기 전에 드라이버가 NdisAllocatePacket을 호출할 수 있는 횟수에 대한 유효 제한입니다. 오버플로 설명자가 아직 할당되지 않은 경우 NdisFreePacket 은 패킷 설명자를 정적으로 할당된 풀에 반환합니다. 하나 이상의 오버플로 설명자가 이미 할당된 경우 NdisFreePacket 은 패킷 설명자를 풀이 아닌 시스템 메모리에 반환합니다.

NdisAllocatePacketPoolEx의 호출자는 NumberOfDescriptors를 예상된 일반 로드에 필요한 패킷 설명자 수로 설정해야 합니다. 드라이버는 예상 최대 부하를 수용하는 데 필요한 추가 설명자 수로 NumberOfOverflowDescriptors 를 설정해야 합니다. 풀에서 가능한 총 패킷 설명자 수(NumberOfDescriptorsNumberOfOverflowDescriptors)가 할당된 경우 NdisAllocatePacket 에 대한 호출은 NDIS_STATUS_RESOURCES 반환합니다.

전송되거나 표시된 패킷이 할당 드라이버에 반환되면 NdisReinitializePacket 을 호출하고 버퍼 설명자 체인으로 다시 설정한 후 각 패킷 설명자를 다시 사용하거나 드라이버가 NdisFreePacket 을 호출하여 해당 패킷을 무료 목록으로 반환할 수 있습니다. 패킷 풀에서 할당된 패킷을 다시 초기화하고 다시 사용하는 것은 해제한 다음 다시 할당해야 하는 것보다 훨씬 빠릅니다. NdisReinitializePacket은 버퍼 체인의 헤드를 NULL로 설정하므로 드라이버가 패킷 설명자를 사용하여 NdisReinitializePacket을 호출하기 전에 패킷 설명자에 연결된 버퍼 설명자에 대한 포인터를 저장해야 합니다.

드라이버에 패킷 설명자가 더 이상 필요하지 않은 경우 [(nf-ndis-ndisfreepacketpool.md)를 호출하여 NdisAllocatePacketPoolEx로 할당된 스토리지를 해제합니다.

OS 버전: .NET 4.0 이상을 Windows CE.

요구 사항

요구 사항
헤더 ndis.h
라이브러리 Ndis.lib
IRQL IRQL <= DISPATCH_LEVEL

추가 정보