função de retorno de chamada PSCSIWMI_QUERY_DATABLOCK (scsiwmi.h)
A rotina HwScsiWmiQueryDataBlock de um driver de miniport é chamada para obter uma única instância ou todas as instâncias de um bloco de dados. Essa rotina é necessária.
Sintaxe
PSCSIWMI_QUERY_DATABLOCK PscsiwmiQueryDatablock;
BOOLEAN PscsiwmiQueryDatablock(
[in] PVOID Context,
[in] PSCSIWMI_REQUEST_CONTEXT DispatchContext,
[in] ULONG GuidIndex,
[in] ULONG InstanceIndex,
[in] ULONG InstanceCount,
[in, out] PULONG InstanceLengthArray,
[in] ULONG BufferAvail,
[out] PUCHAR Buffer
)
{...}
Parâmetros
[in] Context
Aponta para o valor de contexto definido pelo miniporto definido pelo driver passado para ScsiPortWmiDispatchFunction.
[in] DispatchContext
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 HwScsiWmiQueryDataBlock for chamado em resposta a uma solicitação de IRP_MN_QUERY_SINGLE_INSTANCE, InstanceIndex especificará a instância a ser consultada. Se HwScsiWmiQueryDataBlock for chamado em resposta a um IRP_MN_QUERY_ALL_DATA REQUEST, InstanceIndex será zero.
[in] InstanceCount
Se HwScsiWmiQueryDataBlock for chamado em resposta a uma solicitação de IRP_MN_QUERY_SINGLE_INSTANCE, InstanceCount será 1. Se HwScsiWmiQueryDataBlock for chamado em resposta a um IRP_MN_QUERY_ALL_DATA REQUEST, InstanceCount será o número de instâncias a serem retornadas.
[in, out] InstanceLengthArray
Aponta para uma matriz de ULONGs que indicam o comprimento de cada instância do bloco de dados a ser retornado. Essa matriz tem elementos InstanceCount . Esse valor pode ser NULL quando não há espaço suficiente no buffer de saída para atender à solicitação.
[in] BufferAvail
Especifica o número máximo de bytes disponíveis para receber dados no buffer em Buffer.
[out] Buffer
Aponta para o buffer para receber dados da instância. Se o buffer for grande o suficiente para receber todos os dados, o driver de miniporto gravará dados de instância no buffer com cada instância alinhada em um limite de 8 bytes. Se o buffer for muito pequeno para receber todos os dados, o driver de miniporto chamará ScsiPortWmiPostProcess com um status de SRB_STATUS_DATA_OVERRUN e definirá BufferUsed para o tamanho do buffer de saída necessário para atender à solicitação.
Retornar valor
HwScsiWmiQueryDataBlock 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 HwScsiWmiQueryDataBlock 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 HwScsiWmiQueryDataBlock do driver de miniporte se MinorFunction indicar uma solicitação para obter uma única instância ou todas as instâncias de um bloco de dados.
O driver de miniporto grava dados da instância no buffer. Para solicitações que não estão pendentes, o driver de miniporto chama ScsiPortWmiPostProcess com um valor SrbStatus apropriado antes de retornar de HwScsiWmiQueryDataBlock. Se a solicitação for pendente, o driver de miniporto chamará ScsiPortWmiPostProcess quando a solicitação for concluída.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Área de Trabalho |
Cabeçalho | scsiwmi.h (inclua Scsiwmi.h) |