Функция 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 не передается.
[in, optional] ItemsList
Необязательный. Указывает на структуру KSOBJECT_CREATE_ITEM для каждого дочернего сайта. Если дочерних элементов нет, это значение должно быть null и ItemsCount должно быть равно нулю.
Возвращаемое значение
Функция 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) ;
Драйверы не должны освободить память, выделенную для вложенного списка KSOBJECT_CREATE_ITEM, пока не вызовите KsFreeDeviceHeader. Сбой этого может привести к возникновению условия проверки ошибок.
Требования
Требование | Ценность |
---|---|
целевая платформа | Всеобщий |
заголовка | ks.h (include Ks.h) |
библиотеки | Ks.lib |
IRQL | < DISPATCH_LEVEL |