PSCSIWMI_QUERY_DATABLOCK fonction de rappel (scsiwmi.h)
La routine HwScsiWmiQueryDataBlock d’un pilote miniport est appelée pour obtenir une seule instance ou toutes les instances d’un bloc de données. Cette routine est obligatoire.
Syntaxe
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
)
{...}
Paramètres
[in] Context
Pointe vers la valeur de contexte définie par le pilote miniport passée à ScsiPortWmiDispatchFunction.
[in] DispatchContext
Pointe vers la structure SCSIWMI_REQUEST_CONTEXT que le pilote miniport a transmise à ScsiPortWmiDispatchFunction.
[in] GuidIndex
Spécifie le bloc de données par son index dans la liste des GUID de la structure SCSI_WMILIB_CONTEXT que le pilote miniport a transmise à ScsiPortWmiDispatchFunction.
[in] InstanceIndex
Si HwScsiWmiQueryDataBlock est appelé en réponse à une demande de IRP_MN_QUERY_SINGLE_INSTANCE, InstanceIndex spécifie le instance à interroger. Si HwScsiWmiQueryDataBlock est appelé en réponse à une requête IRP_MN_QUERY_ALL_DATA, InstanceIndex est égal à zéro.
[in] InstanceCount
Si HwScsiWmiQueryDataBlock est appelé en réponse à une demande de IRP_MN_QUERY_SINGLE_INSTANCE, InstanceCount est 1. Si HwScsiWmiQueryDataBlock est appelé en réponse à une requête IRP_MN_QUERY_ALL_DATA, InstanceCount correspond au nombre d’instances à retourner.
[in, out] InstanceLengthArray
Pointe vers un tableau d’ULONG qui indique la longueur de chaque instance du bloc de données à retourner. Ce tableau contient des éléments InstanceCount . Cette valeur peut être NULL lorsqu’il n’y a pas suffisamment d’espace dans la mémoire tampon de sortie pour répondre à la demande.
[in] BufferAvail
Spécifie le nombre maximal d’octets disponibles pour recevoir des données dans la mémoire tampon dans La mémoire tampon.
[out] Buffer
Pointe vers la mémoire tampon pour recevoir instance données. Si la mémoire tampon est suffisamment grande pour recevoir toutes les données, le pilote miniport écrit instance données dans la mémoire tampon avec chaque instance aligné sur une limite de 8 octets. Si la mémoire tampon est trop petite pour recevoir toutes les données, le pilote miniport appelle ScsiPortWmiPostProcess avec une status de SRB_STATUS_DATA_OVERRUN et définit BufferUsed sur la taille de la mémoire tampon de sortie nécessaire pour répondre à la demande.
Valeur retournée
HwScsiWmiQueryDataBlock retourne SRB_STATUS_PENDING si la requête est en attente ou une valeur SRB status différente de zéro si la demande a été effectuée. La valeur de status SRB retournée par cette routine est identique à ce qui a été passé à ScsiPortWmiPostProcess. Bien que le type de données de la valeur de retour soit BOOLEAN, la routine HwScsiWmiQueryDataBlock retourne en fait une valeur de status SRB.
Remarques
Lorsqu’un pilote miniport reçoit un SRB dans lequel le membre function est défini sur SRB_FUNCTION_WMI, il appelle ScsiPortWmiDispatchFunction avec un pointeur vers une structure SCSI_WMILIB_CONTEXT initialisée et MinorFunction défini sur Srb-WmiSubFunction>. Le pilote de port SCSI appelle la routine HwScsiWmiQueryDataBlock du pilote miniport si MinorFunction indique une demande d’obtention d’un seul instance ou de toutes les instances d’un bloc de données.
Le pilote miniport écrit instance données dans la mémoire tampon. Pour les demandes qui ne sont pas suspendus, le pilote miniport appelle ScsiPortWmiPostProcess avec une valeur SrbStatus appropriée avant de retourner à partir de HwScsiWmiQueryDataBlock. Si la requête est interrompue, le pilote miniport appelle ScsiPortWmiPostProcess une fois la demande terminée.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | scsiwmi.h (inclure Scsiwmi.h) |