KsAllocateObjectHeader 함수(ks.h)
KsAllocateObjectHeader 함수는 필요한 파일 컨텍스트 헤더를 초기화합니다.
구문
KSDDKAPI NTSTATUS KsAllocateObjectHeader(
[out] KSOBJECT_HEADER *Header,
[in] ULONG ItemsCount,
[in, optional] PKSOBJECT_CREATE_ITEM ItemsList,
[in] PIRP Irp,
[in] const KSDISPATCH_TABLE *Table
);
매개 변수
[out] Header
성공한 경우 초기화된 KSOBJECT_HEADER 대한 포인터를 반환할 호출자가 할당한 위치를 가리킵니다.
[in] ItemsCount
헤더가 할당된 후 개체 헤더에 추가할 ItemsList 의 개체 만들기 항목 수를 지정합니다. ItemsList가 NULL인 경우 이 값은 0이어야 합니다.
[in, optional] ItemsList
필요에 따라 개체 헤더에 추가할 일련의 KSOBJECT_CREATE_ITEM 구조를 포함하는 호출자가 할당한 버퍼에 대한 포인터를 지정합니다. 개체 만들기 항목이 없는 경우 NULL 로 설정해야 합니다.
[in] Irp
개체 헤더 만들기를 완료하는 데 필요한 정보가 포함된 주요 함수 IRP_MJ_CREATE IRP를 가리킵니다.
[in] Table
이 파일 개체의 초기화된 디스패치 테이블을 가리킵니다.
반환 값
KsAllocateObjectHeader 함수는 성공하면 STATUS_SUCCESS 반환하고, 요청을 이행할 수 있는 리소스가 충분하지 않으면 STATUS_INSUFFICIENT_RESOURCES.
설명
이 루틴을 호출하기 전에 드라이버는 KSDISPATCH_TABLE 시스템 상주 스토리지를 할당하고 디스패치 테이블을 초기화해야 합니다. 이 디스패치 테이블의 메모리는 KsFreeObjectHeader 가 호출될 때까지 해제할 수 없습니다.
KsAllocateObjectHeader 는 KSOBJECT_HEADER 구조체에 대한 메모리를 할당하고 헤더의 헤더에 대한 포인터를 반환합니다. 드라이버는 메모리 자체를 해제하려고 시도해서는 안 되며, 이 개체 헤더가 필요한 모든 작업이 완료되면 KsFreeObjectHeader 를 호출해야 합니다.
지정된 디바이스에 대한 하위 개체가 있는 경우 드라이버는 KsAllocateObjectHeader를 호출하기 전에 각 하위 개체에 대한 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 |