Partager via


PSCSIWMI_EXECUTE_METHOD fonction de rappel (scsiwmi.h)

La routine HwScsiWmiExecuteMethod d’un pilote miniport est appelée pour exécuter une méthode associée à un bloc de données. Cette routine est facultative.

Note Les modèles de pilote de port SCSI et de pilote miniport SCSI peuvent être modifiés ou indisponibles à l’avenir. Au lieu de cela, nous vous recommandons d’utiliser les modèles de pilote Storport et de pilote Miniport Storport .
 

Syntaxe

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
)
{...}

Paramètres

[in] DeviceContext

Pointe vers la valeur de contexte définie par le pilote miniport passée à ScsiPortWmiDispatchFunction.

[in] RequestContext

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 le bloc spécifié par GuidIndex a plusieurs instances, InstanceIndex spécifie le instance.

[in] MethodId

Spécifie l’ID de la méthode à exécuter. Le pilote miniport définit l’ID de méthode en tant qu’élément dans un bloc de données.

[in] InBufferSize

Indique la taille en octets des données d’entrée. S’il n’existe aucune donnée d’entrée, InBufferSize est égal à zéro.

[in] OutBufferSize

Indique le nombre d’octets disponibles dans la mémoire tampon pour les données de sortie.

[in, out] Buffer

Pointe vers une mémoire tampon qui contient les données d’entrée et reçoit les données de sortie, le cas échéant, de la méthode . Si la mémoire tampon est trop petite pour recevoir toute la sortie, le pilote miniport appelle ScsiPortWmiPostProcess avec SRB_STATUS_DATA_OVERRUN et la taille requise.

Valeur retournée

HwScsiWmiExecuteMethod retourne SRB_STATUS_PENDING si la requête est en attente, ou une valeur SRB différente de zéro status 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 HwScsiWmiExecuteMethod 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 HwScsiWmiExecuteMethod du pilote miniport si MinorFunction indique une demande d’exécution d’une méthode.

Si un pilote miniport n’implémente pas de routine HwScsiWmiExecuteMethod , il doit définir ExecuteWmiMethod sur NULL dans le SCSI_WMILIB_CONTEXT le pilote miniport passe à ScsiPortWmiDispatchFunction. Dans ce cas, le pilote de port retourne SRB_STATUS_ERROR à l’appelant.

Si la méthode génère une sortie, le pilote miniport doit case activée la taille de la mémoire tampon de sortie dans OutBufferSize avant d’effectuer une opération qui peut avoir des effets secondaires ou qui ne doit pas être effectuée deux fois. Par exemple, si une méthode retourne les valeurs d’un groupe de compteurs, puis réinitialise les compteurs, le pilote miniport doit case activée la taille de la mémoire tampon avant de réinitialiser les compteurs. Cela garantit que le pilote de port peut renvoyer la demande en toute sécurité avec une mémoire tampon plus grande. Si la mémoire tampon est trop petite, le pilote miniport doit appeler ScsiPortWmiPostProcess avec SRB_STATUS_DATA_OVERRUN et la taille de la mémoire tampon de sortie nécessaire pour répondre à la demande.

Le pilote miniport exécute la méthode et écrit la sortie, le cas échéant, dans la mémoire tampon. Avant de retourner à partir de HwScsiWmiExecuteMethod, le pilote miniport appelle ScsiPortWmiPostProcess avec une valeur SrbStatus appropriée et le nombre d’octets utilisés dans la mémoire tampon de sortie.

Configuration requise

Condition requise Valeur
Plateforme cible Desktop (Expérience utilisateur)
En-tête scsiwmi.h (inclure Scsiwmi.h)

Voir aussi

SCSIWMI_REQUEST_CONTEXT

SCSI_WMILIB_CONTEXT

ScsiPortWmiDispatchFunction

ScsiPortWmiPostProcess