Compartir a través de


PSCSIWMI_EXECUTE_METHOD función de devolución de llamada (scsiwmi.h)

Se llama a la rutina HwScsiWmiExecuteMethod del controlador de miniporte para ejecutar un método asociado a un bloque de datos. Esta rutina es opcional.

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

Sintaxis

PSCSIWMI_EXECUTE_METHOD PscsiwmiExecuteMethod;

BOOLEAN PscsiwmiExecuteMethod(
  [in]      PVOID DeviceContext,
  [in]      PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in]      ULONG GuidIndex,
  [in]      ULONG InstanceIndex,
  [in]      ULONG MethodId,
  [in]      ULONG InBufferSize,
  [in]      ULONG OutBufferSize,
  [in, out] PUCHAR Buffer
)
{...}

Parámetros

[in] DeviceContext

Apunta al valor de contexto definido por el controlador miniport pasado a ScsiPortWmiDispatchFunction.

[in] RequestContext

Apunta a la estructura SCSIWMI_REQUEST_CONTEXT que el controlador de miniporte pasó a ScsiPortWmiDispatchFunction.

[in] GuidIndex

Especifica el bloque de datos por su índice en la lista de GUID de la estructura SCSI_WMILIB_CONTEXT que el controlador de miniporte pasó a ScsiPortWmiDispatchFunction.

[in] InstanceIndex

Si el bloque especificado por GuidIndex tiene varias instancias, InstanceIndex especifica la instancia.

[in] MethodId

Especifica el identificador del método que se va a ejecutar. El controlador de minipuerto define el identificador de método como un elemento de un bloque de datos.

[in] InBufferSize

Indica el tamaño en bytes de los datos de entrada. Si no hay datos de entrada, InBufferSize es cero.

[in] OutBufferSize

Indica el número de bytes disponibles en el búfer para los datos de salida.

[in, out] Buffer

Apunta a un búfer que contiene los datos de entrada y recibe los datos de salida, si los hay, del método . Si el búfer es demasiado pequeño para recibir toda la salida, el controlador de miniporta llama a ScsiPortWmiPostProcess con SRB_STATUS_DATA_OVERRUN y el tamaño necesario.

Valor devuelto

HwScsiWmiExecuteMethod devuelve SRB_STATUS_PENDING si la solicitud está pendiente o un valor de estado de SRB distinto de cero si se completó la solicitud. El valor de estado de SRB devuelto por esta rutina es el mismo que lo que se pasó a ScsiPortWmiPostProcess. Aunque el tipo de datos de valor devuelto es BOOLEAN, la rutina HwScsiWmiExecuteMethod devuelve realmente un valor de estado SRB.

Comentarios

Cuando un controlador de miniporte recibe un SRB en el que el miembro Function se establece en SRB_FUNCTION_WMI, llama a ScsiPortWmiDispatchFunction con un puntero a una estructura de SCSI_WMILIB_CONTEXT inicializada y MinorFunction establecida en Srb-WmiSubFunction>. El controlador de puerto SCSI llama a la rutina HwScsiWmiExecuteMethod del controlador de miniporte si MinorFunction indica una solicitud para ejecutar un método.

Si un controlador de minipuerto no implementa una rutina HwScsiWmiExecuteMethod , debe establecer ExecuteWmiMethod en NULL en el SCSI_WMILIB_CONTEXT el controlador de miniport pasa a ScsiPortWmiDispatchFunction. En este caso, el controlador de puerto devuelve SRB_STATUS_ERROR al autor de la llamada.

Si el método genera la salida, el controlador de minipuerto debe comprobar el tamaño del búfer de salida en OutBufferSize antes de realizar cualquier operación que pueda tener efectos secundarios o que no se deben realizar dos veces. Por ejemplo, si un método devuelve los valores de un grupo de contadores y, a continuación, restablece los contadores, el controlador de miniporte debe comprobar el tamaño del búfer antes de restablecer los contadores. Esto garantiza que el controlador de puerto pueda volver a enviar la solicitud de forma segura con un búfer mayor. Si el búfer es demasiado pequeño, el controlador de minipuerto debe llamar a ScsiPortWmiPostProcess con SRB_STATUS_DATA_OVERRUN y el tamaño del búfer de salida necesario para cumplir la solicitud.

El controlador de miniporte ejecuta el método y escribe la salida, si existe, en el búfer. Antes de volver desde HwScsiWmiExecuteMethod, el controlador de miniporta llama a ScsiPortWmiPostProcess con un valor SrbStatus adecuado y el número de bytes usados en el búfer de salida.

Requisitos

Requisito Value
Plataforma de destino Escritorio
Encabezado scsiwmi.h (incluya Scsiwmi.h)

Consulte también

SCSIWMI_REQUEST_CONTEXT

SCSI_WMILIB_CONTEXT

ScsiPortWmiDispatchFunction

ScsiPortWmiPostProcess