SCSI_WMI_REQUEST_BLOCK structure (srb.h)
Cette structure est une version spéciale d’un SCSI_REQUEST_BLOCK à utiliser avec des commandes WMI.
Syntaxe
typedef struct _SCSI_WMI_REQUEST_BLOCK {
USHORT Length;
UCHAR Function;
UCHAR SrbStatus;
UCHAR WMISubFunction;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR Reserved1;
UCHAR WMIFlags;
UCHAR Reserved2[2];
ULONG SrbFlags;
ULONG DataTransferLength;
ULONG TimeOutValue;
PVOID DataBuffer;
PVOID DataPath;
PVOID Reserved3;
PVOID OriginalRequest;
PVOID SrbExtension;
ULONG Reserved4;
ULONG Reserved6;
UCHAR Reserved5[16];
} SCSI_WMI_REQUEST_BLOCK, *PSCSI_WMI_REQUEST_BLOCK;
Membres
Length
Spécifie la taille en octets de cette structure.
Function
SRB_FUNCTION_WMI, qui spécifie que la demande est une requête WMI. Si ce membre n’est pas défini sur SRB_FUNCTION_WMI, le pilote miniport doit échouer la demande.
SrbStatus
Retourne la status de la demande terminée. Ce membre doit être défini par le pilote miniport avant qu’il informe le pilote spécifique au système d’exploitation que la demande est terminée en appelant ScsiPortNotification avec RequestComplete. La valeur de ce membre peut être n’importe quelle valeur répertoriée pour SrbStatus dans SCSI_REQUEST_BLOCK.
WMISubFunction
Indique l’action WMI à effectuer. Un pilote miniport appelle ScsiPortWmiDispatchFunction avec MinorFunction défini sur cette valeur. La valeur de la sous-fonction correspond au numéro IRP secondaire WMI qui identifie l’opération WMI.
PathId
Indique le port ou le bus SCSI pour la requête. Cette valeur est de base zéro. Si SRB_WMI_FLAGS_ADAPTER_REQUEST est défini dans WMIFlags, ce membre est réservé.
TargetId
Indique le contrôleur ou l’appareil cible sur le bus. Si SRB_WMI_FLAGS_ADAPTER_REQUEST est défini dans WMIFlags, ce membre est réservé.
Lun
Indique le numéro d’unité logique de l’appareil. Si SRB_WMI_FLAGS_ADAPTER_REQUEST est défini dans WMIFlags, ce membre est réservé.
Reserved1
Réservé à l’utilisation du système et non disponible pour une utilisation par les pilotes de miniport.
WMIFlags
Indique que la requête WMI concerne l’adaptateur si SRB_WMI_FLAGS_ADAPTER_REQUEST est défini et que PathId, TargetId et Lun sont réservés. Sinon, WMIFlags aura la valeur NULL, ce qui indique que la requête concerne l’appareil spécifié par PathId, TargetId et Lun.
Reserved2[2]
Réservé à l’utilisation du système et non disponible pour une utilisation par les pilotes de miniport.
SrbFlags
Indique différents paramètres et options concernant la requête. SrbFlags est en lecture seule. Ce membre sera défini sur un ou plusieurs des indicateurs ORed suivants :
SRB_FLAGS_DATA_IN
Indique que les données seront transférées de l’appareil vers le système.
SRB_FLAGS_DATA_OUT
Indique que les données seront transférées du système vers l’appareil.
SRB_FLAGS_NO_DATA_TRANSFER
Indique qu’aucun transfert de données n’est effectué avec cette demande. Si cette option est définie, les indicateurs SRB_FLAGS_DATA_OUT, SRB_FLAGS_DATA_IN et SRB_FLAGS_UNSPECIFIED_DIRECTION sont clairs.
SRB_FLAGS_DISABLE_SYNCH_TRANSFER
Indique que l’adaptateur HBA, si possible, doit effectuer des E/S asynchrones pour cette demande de transfert. Si les E/S synchrones ont été négociées précédemment, l’adaptateur HBA doit renégocier pour les E/S asynchrones avant d’effectuer le transfert.
SRB_FLAGS_DISABLE_DISCONNECT
Indique que l’adaptateur HBA ne doit pas autoriser la cible à se déconnecter du bus SCSI pendant le traitement de cette requête.
DataTransferLength
Indique la taille en octets de la mémoire tampon de données. Un pilote miniport appelle ScsiPortWmiDispatchFunction avec BufferSize défini sur cette valeur. Si une sous-exécution se produit, le pilote miniport doit mettre à jour ce membre en fonction du nombre d’octets réellement transférés.
TimeOutValue
Indique l’intervalle en secondes pendant lequel la requête peut s’exécuter avant que le pilote de port spécifique au système d’exploitation puisse considérer qu’elle a expiré. Les pilotes miniport ne sont pas tenus de chronomètrer les demandes, car le pilote de port le fait déjà.
DataBuffer
Pointe vers la mémoire tampon de données. Un pilote miniport appelle ScsiPortWmiDispatchFunction avec Buffer défini sur cette valeur. Les pilotes Miniport peuvent utiliser cette valeur comme pointeur de données, quelle que soit la valeur de MapBuffers dans le PORT_CONFIGURATION_INFORMATION pour l’adaptateur HBA. Un pilote miniport ne peut pas transférer des données directement dans la mémoire tampon à l’aide de DMA.
DataPath
Spécifie le chemin des données WMI pour cette requête. Un pilote miniport appelle ScsiPortWmiDispatchFunction avec DataPath défini sur cette valeur.
Reserved3
Réservé à l’utilisation du système et non disponible pour une utilisation par les pilotes de miniport.
OriginalRequest
Pointe vers l’IRP pour cette demande. Ce membre n’est pas pertinent pour les pilotes de miniport.
SrbExtension
Pointe vers l’extension Srb. Un pilote miniport ne doit pas utiliser ce membre s’il a défini SrbExtensionSize sur zéro dans le HW_INITIALIZATION_DATA. La mémoire sur SrbExtension n’est pas initialisée par le pilote de port spécifique au système d’exploitation, et les données déterminées par le pilote miniport sont accessibles directement par l’adaptateur HBA. L’adresse physique correspondante peut être obtenue en appelant ScsiPortGetPhysicalAddress avec le pointeur SrbExtension .
Reserved4
Réservé à l’utilisation du système et non disponible pour une utilisation par les pilotes de miniport.
Reserved6
Réservé à l’utilisation du système et non disponible pour une utilisation par les pilotes de miniport. Ce membre est valide à compter de Windows Server 2003 avec SP1.
Reserved5[16]
Réservé à l’utilisation du système et non disponible pour une utilisation par les pilotes de miniport.
Remarques
Les pilotes de filtre et de classe de stockage Windows NT peuvent envoyer des SDR WMI au pilote de port système. Le pilote de port système gère certaines requêtes WMI pour le compte des pilotes miniport. Si le pilote de port ne peut pas gérer une requête WMI, il la transfère au pilote miniport.
Un pilote miniport reçoit des requêtes WMI du pilote de port uniquement si le pilote miniport a défini WmiDataProvider dans la structure PORT_CONFIGURATION_INFORMATION. Si le pilote miniport prend en charge une requête, il doit la traiter et la terminer en appelant deux fois ScsiPortNotification , d’abord avec RequestComplete , puis avec NextRequest (ou NextLuRequest).
Pour plus d’informations sur la prise en charge de WMI dans les pilotes miniport, consultez Windows Management Instrumentation.
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | srb.h (inclure Storport.h, Srb.h, Storport.h, Minitape.h) |