PSCSIWMI_FUNCTION_CONTROL fonction de rappel (scsiwmi.h)
La routine 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 a 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 a transmise à ScsiPortWmiDispatchFunction.
[in] GuidIndex
Spécifie le bloc par son index dans la liste des GUID de la structure SCSI_WMILIB_CONTEXT que le pilote miniport a transmise à 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 qui a été inscrit comme coûteux à collecter (autrement dit, un bloc pour lequel le pilote miniport défini WMIREG_FLAG_EXPENSIVE dans Indicateurs 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 FALSE pour le désactiver.
Valeur retournée
HwScsiWmiFunctionControl 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 HwScsiWmiFunctionControl 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 HwScsiWmiFunctionControl d’un pilote miniport si MinorFunction indique une demande d’activation ou de désactivation d’un événement, ou d’activation ou de désactivation de 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 n’est pas nécessaire pour le pilote miniport de case activée 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 seule demande de désactivation lorsque le dernier consommateur de données désactive le bloc. Le pilote de port n’appellera pas HwScsiWmiFunctionControl plus d’une 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 SrbStatus approprié. Si le pilote miniport pend ce SRB, il doit appeler ScsiPortWmiPostProcess lorsque le SRB est terminé et avant de terminer le SRB.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Desktop (Expérience utilisateur) |
En-tête | scsiwmi.h (inclure Scsiwmi.h) |