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.

Nota Los modelos de controlador de puerto SCSI y controlador de minipuerto SCSI pueden modificarse o no estar disponibles en el futuro. En su lugar, se recomienda usar los modelos del controlador Storport y del controlador storport miniport .
 

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 :

ScsiPortWmiSetInstanceCount

ScsiPortWmiSetData

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)

Consulte también

SCSIWMI_REQUEST_CONTEXT

WNODE_ALL_DATA

WNODE_SINGLE_INSTANCE