Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La rutina de DpWmiQueryDataBlock devuelve una sola instancia o todas las instancias de un bloque de datos. Esta rutina es necesaria.
Sintaxis
WMI_QUERY_DATABLOCK_CALLBACK WmiQueryDatablockCallback;
NTSTATUS WmiQueryDatablockCallback(
[in] PDEVICE_OBJECT DeviceObject,
[in] PIRP Irp,
[in] ULONG GuidIndex,
[in] ULONG InstanceIndex,
[in] ULONG InstanceCount,
[in, out] PULONG InstanceLengthArray,
[in] ULONG BufferAvail,
[out] PUCHAR Buffer
)
{...}
Parámetros
[in] DeviceObject
Puntero a la estructura DEVICE_OBJECT WDM del controlador.
[in] Irp
Puntero al IRP.
[in] GuidIndex
Especifica el bloque de datos proporcionando un índice de base cero en la lista de GUID que el controlador proporcionó en la estructura de WMILIB_CONTEXT que pasó a WmiSystemControl.
[in] InstanceIndex
Si se llama a dpWmiQueryDataBlock en respuesta a una solicitud de IRP_MN_QUERY_SINGLE_INSTANCE, instanceIndex especifica un índice de base cero que indica la instancia del bloque de datos especificado que se va a consultar. Si se llama DpWmiQueryDataBlock en respuesta a una solicitud de IRP_MN_QUERY_ALL_DATA, InstanceIndex es cero.
[in] InstanceCount
Si se llama DpWmiQueryDataBlock en respuesta a una solicitud de IRP_MN_QUERY_SINGLE_INSTANCE, InstanceCount es 1. Si se llama dpWmiQueryDataBlock en respuesta a una solicitud de IRP_MN_QUERY_ALL_DATA, InstanceCount es el número de instancias que se van a devolver.
[in, out] InstanceLengthArray
Puntero a una matriz proporcionada por el autor de la llamada InstanceCountmatriz de elementos ULONG. El controlador rellena cada elemento de matriz para indicar la longitud de cada instancia devuelta. Si BufferAvail es cero, InstanceLengthArray es NULL.
[in] BufferAvail
Especifica el número máximo de bytes que están disponibles para recibir datos en el búfer en Búfer. Si este valor es cero, el autor de la llamada solicita que el controlador especifique el tamaño de búfer necesario en su llamada a WmiCompleteRequest. Consulte la sección Comentarios para obtener más información.
[out] Buffer
Puntero al búfer para recibir datos de instancia. Si el búfer es lo suficientemente grande como para recibir todos los datos, el controlador escribe los datos de instancia en el búfer con cada instancia alineada en un límite de 8 bytes. Si el búfer es demasiado pequeño para recibir todos los datos, el controlador llama a WmiCompleteRequest con BufferUsed establecer en el tamaño necesario.
Valor devuelto
dpWmiQueryDataBlock devuelve STATUS_SUCCESS o un estado de error como el siguiente:
Si el controlador no puede completar la solicitud inmediatamente, puede devolver STATUS_PENDING.
Observaciones
WMI llama a la rutina DpWmiQueryDataBlock de un controlador después de que el controlador llame a WmiSystemControl en respuesta a una solicitud de IRP_MN_QUERY_SINGLE_INSTANCE o IRP_MN_QUERY_ALL_DATA. El controlador debe colocar la dirección de su rutina dpWmiQueryDataBlock en la estructura de WMILIB_CONTEXT que pasa a WmiSystemControl.
El controlador es responsable de validar todos los argumentos de entrada. En concreto, el controlador debe hacer lo siguiente:
- Compruebe que el valor guidIndex de está entre cero y GuidCount-1, en función del miembro guidCount de de la estructura de WMILIB_CONTEXT.
- Compruebe que el controlador no ha marcado el bloque de datos especificado para su eliminación. Si el controlador especificó recientemente la marca WMIREG_FLAG_REMOVE_GUID en un WMIGUIDREGINFO estructura contenida en una estructura de WMILIB_CONTEXT, es posible que una consulta llegue antes de que se produzca la eliminación.
- Compruebe que el InstanceIndex y valores de InstanceCount, juntos, especifique una serie de instancias de bloque de datos que está dentro del intervalo admitido por el controlador para el bloque de datos. Si InstanceIndex no es cero, InstanceCount debe ser 1. Si InstanceIndex es 0, InstanceCount no debe ser mayor que el número de instancias admitidas.
- Compruebe que el búfer descrito por de búfer y bufferAvail sea lo suficientemente grande como para contener todas las instancias solicitadas del bloque de datos. Cada instancia debe comenzar en un límite de 8 bytes y es posible que exista relleno adicional entre los elementos de datos de cada instancia.
Esta rutina puede ser paginable.
Para obtener más información sobre la implementación de esta rutina, vea Llamada a WmiSystemControl para controlar irps de WMI.
Requisitos
| Requisito | Valor |
|---|---|
| de la plataforma de destino de | Escritorio |
| encabezado de | wmilib.h (include Wmilib.h) |
| irQL | Se llama en PASSIVE_LEVEL. |