NdisAllocateFragmentNetBufferList 함수(ndis/nblapi.h)

NdisAllocateFragmentNetBufferList 함수를 호출하여 기존 NET_BUFFER_LIST 구조체의 데이터를 기반으로 하는 새 조각화된 NET_BUFFER_LIST 구조를 만듭니다.

구문

NDIS_EXPORTED_ROUTINE NET_BUFFER_LIST * NdisAllocateFragmentNetBufferList(
  [in] NET_BUFFER_LIST *OriginalNetBufferList,
       NDIS_HANDLE     NetBufferListPool,
       NDIS_HANDLE     NetBufferPool,
  [in] ULONG           StartOffset,
  [in] ULONG           MaximumLength,
  [in] ULONG           DataOffsetDelta,
  [in] ULONG           DataBackFill,
  [in] ULONG           AllocateFragmentFlags
);

매개 변수

[in] OriginalNetBufferList

기존 NET_BUFFER_LIST 구조체에 대한 포인터입니다.

NetBufferListPool

에 대한 호출에서 가져온 핸들입니다. NdisAllocateNetBufferListPool 함수입니다.

NetBufferPool

이전에 호출에서 반환된 NET_BUFFER 구조체 풀 핸들 NdisAllocateNetBufferPool.

[in] StartOffset

NET_BUFFER 구조에서 데이터의 시작부터 추가 바이트 오프셋입니다. 이 오프셋은 각 NET_BUFFER 구조에 지정된 DataOffset 멤버의 값에 추가됩니다.

[in] MaximumLength

새 NET_BUFFER_LIST 구조체의 각 조각에 대한 최대 길이(바이트)입니다. 각 조각은 NET_BUFFER 구조체로 설명됩니다.

[in] DataOffsetDelta

NDIS가 새 NET_BUFFER 구조에서 사용할 수 있도록 해야 하는 사용 데이터 공간 의 추가 크기입니다.

[in] DataBackFill

할당이 필요한 경우 할당할 DataOffsetDelta 매개 변수 값 외에 데이터 공간의 양입니다. NDIS가 DataOffsetDelta에서 요청된 데이터 공간을 제공하기 위해 메모리를 할당해야 하는 경우 DataBackFill 에서 지정하는 추가 공간도 할당해야 합니다.

[in] AllocateFragmentFlags

OR 작업과 결합할 수 있는 NDIS 플래그입니다. 이 매개 변수를 0으로 설정합니다. 현재 이 함수에 대해 정의된 플래그가 없습니다.

반환 값

NdisAllocateFragmentNetBufferList 는 새 조각화된 NET_BUFFER_LIST 구조체에 대한 포인터를 반환합니다. 할당에 실패한 경우 반환 값은 NULL입니다.

설명

NdisAllocateFragmentNetBufferList는 호출자가 NdisAllocateFragmentNetBufferList에 전달한 NET_BUFFER_LIST 구조체에서 설명하는 것과 동일한 데이터를 설명하는 새 조각 NET_BUFFER_LIST 구조체 및 NET_BUFFER 구조를 할당하고 초기화합니다.

조각 NET_BUFFER_LIST 구조에 지정된 풀과 연결된 특성이 있어야 하는 경우 호출자는 NetBufferListPoolHandle 또는 NetBufferPoolHandle 매개 변수에서 풀 핸들 지정해야 합니다. 예를 들어 NET_BUFFER_LIST 구조체의 ProtocolType 멤버는 풀과 연결됩니다.

지정된 원본 NET_BUFFER_LIST 구조체의 각 NET_BUFFER 구조체에 대해 NDIS는 다음과 같이 조각 NET_BUFFER 구조를 만듭니다.

  • NDIS는 원본 NET_BUFFER 구조에서 사용된 데이터 공간 의 시작부터 시작하여 StartOffset 매개 변수에 지정된 값으로 오프셋되는 조각을 만듭니다.
  • NDIS는 원본 NET_BUFFER 구조에서 사용된 데이터 공간( StartOffset 을 고려한 후)을 조각으로 나눕니다.
  • 각 조각의 사용된 데이터 공간 길이가 MaximumLength 매개 변수에 지정된 값보다 작거나 같습니다. 마지막 조각의 사용된 데이터 공간MaximumLength 보다 작을 수 있습니다.
  • 각 조각은 새로운 NET_BUFFER 구조체와 새로운 MDL 체인 집합으로 설명됩니다.
  • 새 NET_BUFFER 구조체의 데이터 오프셋은 DataOffsetDelta 매개 변수에 지정된 바이트 수만큼 후퇴됩니다(DataOffset 멤버의 값이 감소됨).
  • NDIS가 DataOffsetDelta에서 요청된 데이터 공간을 제공하기 위해 메모리를 할당해야 하는 경우 DataBackFill 에서 지정하는 추가 공간도 할당해야 합니다.
NdisAllocateFragmentNetBufferList에서 만드는 새 조각 NET_BUFFER_LIST 구조체에는 이니셜이 포함되지 않습니다. NET_BUFFER_LIST_CONTEXT 구조체입니다.

다음을 호출합니다. NdisFreeFragmentNetBufferList 함수는 NdisAllocateFragmentNetBufferList를 호출하여 이전에 할당된 NET_BUFFER_LIST 구조체와 연결된 모든 NET_BUFFER 구조체 및 MDL 체인을 해제합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
대상 플랫폼 유니버설
헤더 ndis/nblapi.h(include ndis.h)
라이브러리 Ndis.lib
IRQL <= DISPATCH_LEVEL
DDI 규정 준수 규칙 Irql_NetBuffer_Function(ndis), NdisAllocateFragmentNetBufferList(ndis), NdisAllocateFragmentNetBufferList_InitFail(ndis)

추가 정보

NET_BUFFER

NET_BUFFER_LIST

NET_BUFFER_LIST_CONTEXT

NdisAllocateNetBufferListPool

NdisAllocateNetBufferPool

NdisFreeFragmentNetBufferList