Función KsAllocateDeviceHeader (ks.h)
La función KsAllocateDeviceHeader asigna e inicializa el encabezado de extensión de dispositivo necesario.
Sintaxis
KSDDKAPI NTSTATUS KsAllocateDeviceHeader(
[out] KSDEVICE_HEADER *Header,
[in] ULONG ItemsCount,
[in, optional] PKSOBJECT_CREATE_ITEM ItemsList
);
Parámetros
[out] Header
Apunta a la ubicación en la que se va a devolver un puntero al encabezado inicializado.
[in] ItemsCount
Especifica el número de subelementos en ItemsList. Debe ser cero si no se pasa itemsList .
[in, optional] ItemsList
Opcional. Apunta a una estructura de KSOBJECT_CREATE_ITEM para cada subelemento. Si no hay ningún subelemento, este valor debe ser NULL y ItemsCount debe ser cero.
Valor devuelto
La función KsAllocateDeviceHeader devuelve STATUS_SUCCESS si se ejecuta correctamente o STATUS_INSUFFICIENT_RESOURCES si no puede asignar los recursos necesarios.
Comentarios
La función KsAllocateDeviceHeader asigna memoria para la estructura de KSDEVICE_HEADER para un dispositivo. Cuando el encabezado ya no sea necesario, el controlador debe llamar a la función KsFreeDeviceHeader para liberar la memoria asignada.
Si existen subobjetos para un dispositivo determinado, el controlador debe, antes de llamar a KsAllocateDeviceHeader, asignar un búfer de memoria paginada o no paginada de tamaño suficiente para contener una estructura de KSOBJECT_CREATE_ITEM para cada subobjeto. Por ejemplo:
/* 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) ;
Los controladores no deben liberar la memoria asignada para el subobjeto KSOBJECT_CREATE_ITEM lista hasta después de llamar a KsFreeDeviceHeader. Si no lo hace, se puede producir una condición de comprobación de errores.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Universal |
Encabezado | ks.h (incluya Ks.h) |
Library | Ks.lib |
IRQL | < DISPATCH_LEVEL |