다음을 통해 공유


KsAllocateDeviceHeader 함수(ks.h)

KsAllocateDeviceHeader 함수는 필요한 디바이스 확장 헤더를 할당하고 초기화합니다.

구문

KSDDKAPI NTSTATUS KsAllocateDeviceHeader(
  [out]          KSDEVICE_HEADER       *Header,
  [in]           ULONG                 ItemsCount,
  [in, optional] PKSOBJECT_CREATE_ITEM ItemsList
);

매개 변수

[out] Header

초기화된 헤더에 대한 포인터를 반환할 위치를 가리킵니다.

[in] ItemsCount

ItemsList의 하위 항목 수를 지정합니다. ItemsList가 전달되지 않으면 0이어야 합니다.

[in, optional] ItemsList

선택 사항입니다. 각 하위 항목에 대한 KSOBJECT_CREATE_ITEM 구조를 가리킵니다. 하위 항목이 없는 경우 이 값은 NULL 이고 ItemsCount 는 0이어야 합니다.

반환 값

KsAllocateDeviceHeader 함수는 성공하면 STATUS_SUCCESS 반환하거나 필요한 리소스를 할당할 수 없는 경우 STATUS_INSUFFICIENT_RESOURCES 반환합니다.

설명

KsAllocateDeviceHeader 함수는 디바이스의 KSDEVICE_HEADER 구조에 대한 메모리를 할당합니다. 헤더가 더 이상 필요하지 않은 경우 드라이버는 KsFreeDeviceHeader 함수를 호출하여 할당된 메모리를 해제해야 합니다.

지정된 디바이스에 대한 하위 개체가 있는 경우 드라이버는 KsAllocateDeviceHeader를 호출하기 전에 각 하위 개체에 대한 KSOBJECT_CREATE_ITEM 구조를 보유하기에 충분한 크기의 페이징된 메모리 또는 비페이지 메모리의 버퍼를 할당해야 합니다. 예를 들면 다음과 같습니다.

/* Allocate a buffer for 4 subobjects for a given streaming device */
PKSOBJECT_CREATE_ITEM createBuffer ;
ULONG bufferSize  = (sizeof (KSOBJECT_CREATE_ITEM)) * 4 ;

createBuffer = (PKSOBJECT_CREATE_ITEM)
               ExAllocatePoolWithTag (PagedPool, bufferSize) ;

드라이버는 KsFreeDeviceHeader를 호출한 후까지 하위 개체 KSOBJECT_CREATE_ITEM 목록에 할당된 메모리를 해제해서는 안 됩니다. 이렇게 하지 않으면 버그 검사 조건이 발생할 수 있습니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 ks.h(Ks.h 포함)
라이브러리 Ks.lib
IRQL < DISPATCH_LEVEL

추가 정보

KSOBJECT_CREATE_ITEM

KsFreeDeviceHeader