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 |