Share via


NdisMAllocateSharedMemoryAsyncEx 함수(ndis.h)

주의

ARM 및 ARM64 프로세서의 경우 NDIS 드라이버 작성기는 NDIS 분산/수집 DMA 대신 WDF DMA 또는 WDM DMA를 사용하는 것이 좋습니다.

WDF DMA에 대한 자세한 내용은 KMDF 드라이버에서 DMA 작업 처리를 참조하세요.

WDM DMA에 대한 자세한 내용은 드라이버에 대한 입력/출력 관리의 DMA 관련 자식 topics 참조하세요.

미니포트 드라이버는 NdisMAllocateSharedMemoryAsyncEx 함수를 호출하여 드라이버와 버스 master DMA NIC 간에 공유되는 추가 메모리를 할당합니다( 일반적으로 미니포트 드라이버가 사용 가능한 NIC 수신 버퍼에서 부족할 때).

구문

NDIS_STATUS NdisMAllocateSharedMemoryAsyncEx(
  [in] NDIS_HANDLE MiniportDmaHandle,
  [in] ULONG       Length,
  [in] BOOLEAN     Cached,
  [in] PVOID       Context
);

매개 변수

[in] MiniportDmaHandle

NDIS가 DMA 리소스를 관리하는 데 사용하는 컨텍스트 영역에 대한 핸들입니다. 호출자는 다음을 호출하여 이 핸들을 획득했습니다. NdisMRegisterScatterGatherDma 함수입니다.

[in] Length

할당할 바이트 수입니다.

[in] Cached

이 매개 변수는 무시됩니다(캐시된 메모리는 항상 x86 및 x64 시스템에서 사용됨).

[in] Context

MiniportSharedMemoryAllocateComplete 함수가 호출될 때 전달될 드라이버 결정 컨텍스트에 대한 포인터입니다.

반환 값

NdisMAllocateSharedMemoryAsyncEx 는 다음 중 하나를 반환할 수 있습니다.

반환 코드 설명
NDIS_STATUS_PENDING
NDIS는 MiniportSharedMemoryAllocateComplete 함수를 호출하고 할당된 공유 메모리를 설명하는 정보를 제공합니다. 공유 메모리 할당 시도가 실패하면 NDIS는 MiniportSharedMemoryAllocateComplete 를 호출하고 NULL 포인터를 전달합니다.
NDIS_STATUS_FAILURE
현재 요청된 메모리를 할당할 수 없습니다. NdisMAllocateSharedMemoryAsyncEx가 이 상태 반환하는 경우 시스템 리소스를 사용할 수 있게 되었는지 여부에 따라 동일한 매개 변수를 사용하는 후속 호출이 성공할 수 있습니다.

설명

참고 미니포트 드라이버는 이미 NdisMAllocateSharedMemoryAsyncEx를 호출하기 전에 분산형/수집 DMA 채널을 초기화하기 위해 NdisMRegisterScatterGatherDma 또는 NdisMRegisterDmaChannel을 호출해야 합니다.
 
버스 master DMA NIC 드라이버는 NdisMAllocateSharedMemoryAsyncEx를 호출하여 공유 메모리를 동적으로 할당합니다. 이러한 드라이버는 초기화 중에 공유 메모리 공간도 할당합니다. 이러한 드라이버는 네트워크 트래픽이 많을 때 기존 공유 메모리 공간에 과도한 요구가 발생하는 경우 전송 작업에 동적으로 할당된 공유 메모리를 사용합니다.

이러한 미니포트 드라이버는 일반적으로 들어오는 전송에 사용할 수 있는 공유 메모리 버퍼 수를 추적하기 위해 하나 이상의 상태 변수를 유지 관리합니다. 사용 가능한 버퍼 수가 드라이버로 결정된 낮은 값에 도달하면 미니포트 드라이버는 NdisMAllocateSharedMemoryAsyncEx 를 호출하여 공유 메모리에 더 많은 버퍼 공간을 할당합니다. 사용 가능한 버퍼 수가 드라이버로 결정된 높은 수준으로 올라가면 미니포트 드라이버는 NdisMFreeSharedMemory 를 한 번 이상 호출하여 이전 동적 할당을 해제합니다.

일반적으로 이러한 미니포트 드라이버는 NIC가 제거될 때까지 MiniportInitializeEx 함수가 NdisMAllocateSharedMemory 와 함께 할당된 공유 메모리 블록을 유지합니다. NIC가 제거되면 NDIS는 미니포트 드라이버의 MiniportHaltEx 함수를 호출합니다. 이 할당은 NIC를 통한 전송에 대한 평균 수요를 처리하기에 충분합니다.

미니포트 드라이버는 할당할 수 있는 공유 메모리 양에 대한 제한을 설정해야 합니다. 이 제한은 드라이버별이며 드라이버가 버퍼가 부족하지 않도록 충분히 높아야 합니다. 시스템 성능을 저하시킬 수 있는 공유 메모리의 낭비가 발생할 수 있으므로 지나치게 높은 제한을 두지 마세요.

NdisMAllocateSharedMemoryAsyncEx 또는 NdisMAllocateSharedMemory를 호출하는 모든 미니포트 드라이버는 NIC가 제거될 때 NdisMFreeSharedMemory를 하나 이상 호출하여 모든 미해결 할당을 해제해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
대상 플랫폼 유니버설
헤더 ndis.h(Ndis.h 포함)
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 Irql_Gather_DMA_Function(ndis)

추가 정보

MiniportHaltEx

MiniportInitializeEx

MiniportSharedMemoryAllocateComplete

NdisMAllocateSharedMemory

NdisMFreeSharedMemory

NdisMRegisterDmaChannel

NdisMRegisterScatterGatherDma