Compartilhar via


função de retorno de chamada PSCSIWMI_EXECUTE_METHOD (scsiwmi.h)

A rotina HwScsiWmiExecuteMethod de um driver de miniport é chamada para executar um método associado a um bloco de dados. Essa rotina é opcional.

Nota Os modelos de driver de porta SCSI e driver de miniporto SCSI podem ser alterados ou indisponíveis no futuro. Em vez disso, recomendamos usar os modelos de driver do Storport e do driver de miniporto storport .
 

Sintaxe

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

Aponta para o valor de contexto definido pelo miniporto definido pelo driver passado para ScsiPortWmiDispatchFunction.

[in] RequestContext

Aponta para a estrutura SCSIWMI_REQUEST_CONTEXT que o driver de miniporto passou para ScsiPortWmiDispatchFunction.

[in] GuidIndex

Especifica o bloco de dados por seu índice na lista de GUIDs na estrutura SCSI_WMILIB_CONTEXT que o driver de miniporto passou para ScsiPortWmiDispatchFunction.

[in] InstanceIndex

Se o bloco especificado por GuidIndex tiver várias instâncias, InstanceIndex especificará a instância.

[in] MethodId

Especifica a ID do método a ser executado. O driver de miniporto define a ID do método como um item em um bloco de dados.

[in] InBufferSize

Indica o tamanho em bytes dos dados de entrada. Se não houver dados de entrada, InBufferSize será zero.

[in] OutBufferSize

Indica o número de bytes disponíveis no buffer para dados de saída.

[in, out] Buffer

Aponta para um buffer que contém os dados de entrada e recebe os dados de saída, se houver, do método . Se o buffer for muito pequeno para receber toda a saída, o driver de miniporto chamará ScsiPortWmiPostProcess com SRB_STATUS_DATA_OVERRUN e o tamanho necessário.

Retornar valor

HwScsiWmiExecuteMethod retornará SRB_STATUS_PENDING se a solicitação estiver pendente ou um valor de status SRB diferente de zero se a solicitação tiver sido concluída. O valor de status SRB retornado por essa rotina é o mesmo que foi passado para ScsiPortWmiPostProcess. Embora o tipo de dados de valor retornado seja BOOLEAN, a rotina HwScsiWmiExecuteMethod realmente retorna um valor de status SRB.

Comentários

Quando um driver de miniporto recebe um SRB no qual o membro function é definido como SRB_FUNCTION_WMI, ele chama ScsiPortWmiDispatchFunction com um ponteiro para uma estrutura de SCSI_WMILIB_CONTEXT inicializada e MinorFunction definido como Srb-WmiSubFunction>. O driver de porta SCSI chama a rotina HwScsiWmiExecuteMethod do driver de miniport, se MinorFunction indicar uma solicitação para executar um método.

Se um driver de miniporto não implementar uma rotina HwScsiWmiExecuteMethod , ele deverá definir ExecuteWmiMethod como NULL no SCSI_WMILIB_CONTEXT o driver de miniporto passa para ScsiPortWmiDispatchFunction. Nesse caso, o driver de porta retorna SRB_STATUS_ERROR para o chamador.

Se o método gerar saída, o driver de miniporte deverá marcar o tamanho do buffer de saída em OutBufferSize antes de executar qualquer operação que possa ter efeitos colaterais ou que não deve ser executada duas vezes. Por exemplo, se um método retornar os valores de um grupo de contadores e redefinir os contadores, o driver de miniporte deverá marcar o tamanho do buffer antes de redefinir os contadores. Isso garante que o driver de porta possa reenviar a solicitação com segurança com um buffer maior. Se o buffer for muito pequeno, o driver de miniporto deverá chamar ScsiPortWmiPostProcess com SRB_STATUS_DATA_OVERRUN e o tamanho do buffer de saída necessário para atender à solicitação.

O driver de miniporte executa o método e grava a saída, se houver, no buffer. Antes de retornar de HwScsiWmiExecuteMethod, o driver de miniporto chama ScsiPortWmiPostProcess com um valor SrbStatus apropriado e o número de bytes usados no buffer de saída.

Requisitos

Requisito Valor
Plataforma de Destino Área de Trabalho
Cabeçalho scsiwmi.h (inclua Scsiwmi.h)

Confira também

SCSIWMI_REQUEST_CONTEXT

SCSI_WMILIB_CONTEXT

ScsiPortWmiDispatchFunction

ScsiPortWmiPostProcess