Función ScsiPortWmiSetInstanceName (scsiwmi.h)
La rutina ScsiPortWmiSetInstanceName actualiza la estructura WNODE_ALL_DATA dentro del contexto de solicitud para especificar la posición y la longitud de un nombre de instancia.
Sintaxis
PWCHAR ScsiPortWmiSetInstanceName(
[in] PSCSIWMI_REQUEST_CONTEXT RequestContext,
[in] ULONG InstanceIndex,
[in] ULONG InstanceNameLength,
[out] PULONG BufferAvail,
[in, out] PULONG SizeNeeded
);
Parámetros
[in] RequestContext
Puntero a una estructura de tipo SCSIWMI_REQUEST_CONTEXT que contiene el contexto de solicitud de un SRB de WMI.
[in] InstanceIndex
Contiene un índice que indica la instancia para la que se va a especificar la posición y la longitud del nombre de instancia.
[in] InstanceNameLength
Especifica el tamaño en bytes del nombre de instancia.
[out] BufferAvail
Debe contener, en la entrada, el número de bytes de espacio de búfer en la estructura WNODE_ALL_DATA que se puede usar para describir los nombres de instancia y los datos. A la devolución, este miembro contiene el número de bytes de espacio de búfer que permanecen.
Hay tres rutinas WMI de puerto SCSI que devuelven un valor para el tamaño de búfer disponible en su parámetro BufferAvail :
ScsiPortWmiSetInstanceName
El controlador de minipuerto debe llamar primero a ScsiPortWmiSetInstanceCount , pero después de llamar a ScsiPortWmiSetInstanceCount , no importa en qué orden el minidriver llama a ScsiPortWmiSetData y ScsiPortWmiSetInstanceName. Al llamar a ScsiPortWmiSetData o ScsiPortWmiSetInstanceName, el valor pasado a la rutina en su parámetro BufferAvail debe ser el mismo que el valor devuelto en el parámetro BufferAvail por la rutina WMI de puerto SCSI más reciente. Por ejemplo, supongamos que el minidriver llama primero a ScsiPortWmiSetInstanceCount y esta rutina devuelve un valor de 1000 en su parámetro BufferAvail . A continuación, el minidriver llama a ScsiPortWmiSetData , que devuelve un valor de 500 en su parámetro BufferAvail . Por último, el minidriver llama a ScsiPortWmiSetInstanceName , que devuelve un valor de 200 en su parámetro BufferAvail . El valor inicial de 1000 debe pasarse a ScsiPortWmiSetData en BufferAvail y el valor de 500 debe pasarse a ScsiPortWmiSetInstanceName.
Si no hay suficiente memoria disponible para agregar un nombre de instancia de longitud InstanceNameLength, se devolverá un cero en el miembro BufferAvail .
[in, out] SizeNeeded
Indica, en la entrada, el número de bytes necesarios para describir el WNODE antes de agregar los datos descriptivos para la instancia especificada por InstanceIndex. A cambio, este miembro contendrá el tamaño de todo el WNODE, incluidos los datos de la nueva instancia.
Valor devuelto
La rutina ScsiPortWmiSetInstanceCount devuelve un puntero al búfer donde el autor de la llamada puede almacenar el nombre de la instancia especificada en InstanceIndex. Si ScsiPortWmiSetInstanceCount no puede asignar suficiente memoria para el nombre de instancia, o si el WNODE contenido en el contexto de la solicitud no es de tipo WNODE_ALL_DATA, ScsiPortWmiSetData devuelve NULL.
Comentarios
El minidriver debe llamar a ScsiPortWmiSetInstanceCount antes de llamar a ScsiPortWmiSetInstanceName.
El parámetro RequestContext apunta a una estructura de contexto de solicitud, SCSIWMI_REQUEST_CONTEXT, que contiene información asociada a un bloque de solicitud SCSI (SRB) de Instrumental de administración de Windows (WMI). La estructura de contexto de solicitud, a su vez, contiene una de las estructuras de WMI WNODE_XXX usadas por el sistema WMI para pasar datos entre consumidores de datos en modo de usuario y proveedores de datos en modo kernel, como controladores.
La rutina ScsiPortWmiSetInstanceName requiere la estructura WNODE definida dentro del contexto de solicitud para que sea de tipo WNODE_ALL_DATA. Esto se debe a que ScsiPortWmiSetInstanceName puede reservar un área de nombre de instancia para cualquiera de las instancias asociadas a un bloque de datos WMI. A diferencia de la estructura WNODE_SINGLE_INSTANCE que contiene información sobre una sola instancia, la estructura WNODE_ALL_DATA contiene una matriz de punteros a áreas de búfer para diferentes instancias y ScsiPortWmiSetInstanceCount inicializa esta matriz, de modo que se pueda tener acceso individual a cada búfer de datos de instancia.
La memoria asignada para el contexto de solicitud debe permanecer válida hasta que el controlador de miniporte llame a ScsiPortWmiPostProcess y ScsiPortWmiPostProcess devuelva el estado final de SRB y el tamaño del búfer. Si la SRB puede estar en lápiz, se debe asignar la memoria del contexto de solicitud desde la extensión SRB. Si la SRB no se puede lápiz, la memoria se puede asignar desde un marco de pila que no sale del ámbito.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Escritorio |
Encabezado | scsiwmi.h (incluye Miniport.h, Scsi.h) |