NdisAllocateNetBuffer 함수(ndis/nblapi.h)
NdisAllocateNetBuffer 함수를 호출하여 NET_BUFFER 구조체 풀에서 NET_BUFFER 구조를 할당하고 초기화합니다.
통사론
NDIS_EXPORTED_ROUTINE NET_BUFFER * NdisAllocateNetBuffer(
[in] NDIS_HANDLE PoolHandle,
[in, optional] MDL *MdlChain,
[in] ULONG DataOffset,
[in] SIZE_T DataLength
);
매개 변수
[in] PoolHandle
이전에 호출에서 반환된 NET_BUFFER 구조체 풀 핸들 NdisAllocateNetBufferPool.
[in, optional] MdlChain
NDIS가 새 NET_BUFFER 구조를 초기화하는 데 사용하는 MDL 체인에 대한 포인터입니다. MdlChain NULL 수 있습니다.
[in] DataOffset
버퍼의 시작부터 MDL 체인의 사용된 데이터 공간 시작까지의 초기 오프셋(바이트)입니다. 이 오프셋보다 앞의 데이터 공간은 사용되지 않는 데이터 공간 . 따라서 이 값은 MDL 체인에서 사용 가능한 백필 공간의 초기 크기도 나타냅니다. MdlChain NULL 경우 DataOffset 0이어야 합니다.
[in] DataLength
사용된 데이터 공간의 길이(바이트)는 MDL 체인에서. MdlChain NULL 경우 DataLength 0이어야 합니다.
반환 값
NdisAllocateNetBuffer NDIS가 할당한 NET_BUFFER 구조체에 대한 포인터를 반환합니다. 할당에 실패한 경우 이 포인터는 NULL .
발언
NdisFreeNetBuffer 호출하여 NET_BUFFER 구조체 풀에서 할당된 NET_BUFFER 구조를 해제합니다.
예를 들어 원래 MDL 체인에 XDataLength 및 YDataOffset포함되어 있고 CurrentMdl 원래 MDL 체인의 두 번째 MDL(M)으로 시작하는 경우 CurrentMdlOffset Z . 그런 다음 NET_BUFFER_DATAMdlChain 필드는 X의DataLength 포함하는 새 MDL 체인을 가리키고 Y의 DataOffset합니다. CurrentMdl 새 MDL 체인에서 세 번째 MDL(M')으로 시작하는 경우 CurrentMdlOffset Z의 다음 매크로를 사용하여 NET_BUFFER필드를 설정해야 합니다.
NET_BUFFER_FIRST_MDL(_NB) = New MDL chain;
NET_BUFFER_DATA_LENGTH(_NB) = X';
NET_BUFFER_DATA_OFFSET(_NB) = Y';
NET_BUFFER_CURRENT_MDL(_NB) = M';
NET_BUFFER_CURRENT_MDL_OFFSET(_NB) = Z';
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | NDIS 6.0 이상에서 지원됩니다. |
대상 플랫폼 | 보편적 |
헤더 | ndis/nblapi.h(ndis.h 포함) |
라이브러리 | Ndis.lib |
IRQL | <= DISPATCH_LEVEL |
DDI 규정 준수 규칙 | Irql_NetBuffer_Function(ndis), NdisAllocateNetBuffer(ndis) |