PSCSIWMI_FUNCTION_CONTROL fonction de rappel (scsiwmi.h)
Une routine de HwScsiWmiFunctionControl d’un pilote miniport est appelée pour activer ou désactiver la notification des événements. Il est également appelé pour activer ou désactiver la collecte de données pour les blocs de données que le pilote miniport désigné comme coûteux à collecter. Cette routine est facultative.
Syntaxe
PSCSIWMI_FUNCTION_CONTROL PscsiwmiFunctionControl;
BOOLEAN PscsiwmiFunctionControl(
[in] PVOID DeviceContext,
[in] PSCSIWMI_REQUEST_CONTEXT RequestContext,
[in] ULONG GuidIndex,
[in] SCSIWMI_ENABLE_DISABLE_CONTROL Function,
[in] BOOLEAN Enable
)
{...}
Paramètres
[in] DeviceContext
Pointe vers la valeur de contexte définie par le pilote miniport passée à ScsiPortWmiDispatchFunction.
[in] RequestContext
Pointe vers une valeur contenant une valeur d’énumérateur de type SCSIWMI_REQUEST_CONTEXT que le pilote miniport passé à ScsiPortWmiDispatchFunction.
[in] GuidIndex
Spécifie le bloc par son index dans la liste des GUID dans la structure SCSI_WMILIB_CONTEXT que le pilote miniport passé à ScsiPortWmiDispatchFunction.
[in] Function
Spécifie ScsiWmiEventControl pour activer ou désactiver un événement, ou ScsiWmiDataBlockControl pour activer ou désactiver la collecte de données pour un bloc enregistré comme coûteux à collecter (autrement dit, un bloc pour lequel le pilote miniport défini WMIREG_FLAG_EXPENSIVE dans Flags de la structure SCSIWMIGUIDREGINFO utilisée pour inscrire le bloc).
[in] Enable
Spécifie TRUE pour activer l’événement ou la collecte de données, ou FAUX pour le désactiver.
Valeur de retour
HwScsiWmiFunctionControl retourne SRB_STATUS_PENDING si la requête est en attente, ou une valeur d’état SRB différente de zéro si la demande a été terminée. La valeur d’état SRB retournée par cette routine est identique à ce qui a été passé à ScsiPortWmiPostProcess. Bien que le type de données de valeur de retour soit BOOLEAN, la routine HwScsiWmiFunctionControl retourne réellement une valeur d’état SRB.
Remarques
Lorsqu’un pilote miniport reçoit un SRB dans lequel le membre function de est défini sur SRB_FUNCTION_WMI, il appelle ScsiPortWmiDispatchFunction avec un pointeur vers une structure de SCSI_WMILIB_CONTEXT initialisée et MinorFunction défini sur Srb->WmiSubFunction. Le pilote de port SCSI appelle la routine HwScsiWmiFunctionControl de pilote miniport si MinorFunction indique une demande d’activation ou de désactivation d’un événement, ou pour activer ou désactiver la collecte d’un bloc de données que le pilote miniport inscrit comme coûteux à collecter.
Si un pilote miniport n’implémente pas de routine HwScsiWmiFunctionControl, il doit définir WmiFunctionControl sur NULL dans le SCSI_WMILIB_CONTEXT le pilote miniport passe à ScsiPortWmiDispatchFunction. Le pilote de port retourne SRB_STATUS_SUCCESS à l’appelant.
Il est inutile pour le pilote miniport de vérifier si les événements ou la collecte de données sont déjà activés pour un bloc, car le pilote de port envoie une demande d’activation unique lorsque le premier consommateur de données active le bloc et envoie une demande de désactivation unique lorsque le dernier consommateur de données désactive le bloc. Le pilote de port n’appelle pas HwScsiWmiFunctionControl plusieurs fois pour activer un bloc sans appel intermédiaire pour le désactiver.
Si le SRB est terminé dans le rappel HwScsiWmiFunctionControl, le pilote miniport appelle ScsiPortWmiPostProcess avec un SrbStatusapproprié. Si le pilote miniport pend ce SRB, il doit appeler ScsiPortWmiPostProcess lorsque le SRB est terminé et avant de terminer le SRB.
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Bureau |
d’en-tête | scsiwmi.h (include Scsiwmi.h) |