structure STORAGE_REQUEST_BLOCK (srb.h)

Le STORAGE_REQUEST_BLOCK est la structure SRB (SCSI Request Block) de format étendu. La structure permet l’ajout de données étendues associées à une fonction SRB.

Notes

Les modèles de pilote de port SCSI et de pilote miniport SCSI peuvent être modifiés ou indisponibles à l’avenir. Utilisez plutôt les modèles de pilote Storport et de pilote Storport miniport .

Syntaxe

typedef struct _STORAGE_REQUEST_BLOCK {
  USHORT                               Length;
  UCHAR                                Function;
  UCHAR                                SrbStatus;
  ULONG                                ReservedUlong1;
  ULONG                                Signature;
  ULONG                                Version;
  ULONG                                SrbLength;
  ULONG                                SrbFunction;
  ULONG                                SrbFlags;
  ULONG                                ReservedUlong2;
  ULONG                                RequestTag;
  USHORT                               RequestPriority;
  USHORT                               RequestAttribute;
  ULONG                                TimeOutValue;
  union {
    ULONG SystemStatus;
    ULONG RequestTagHigh4Bytes;
  } DUMMYUNIONNAME;
  ULONG                                SystemStatus;
  ULONG                                ZeroGuard1;
  ULONG                                AddressOffset;
  ULONG                                NumSrbExData;
  ULONG                                DataTransferLength;
  PVOID POINTER_ALIGN                  DataBuffer;
  PVOID POINTER_ALIGN                  ZeroGuard2;
  PVOID POINTER_ALIGN                  OriginalRequest;
  PVOID POINTER_ALIGN                  ClassContext;
  PVOID POINTER_ALIGN                  PortContext;
  PVOID POINTER_ALIGN                  MiniportContext;
  _STORAGE_REQUEST_BLOCK POINTER_ALIGN *NextSrb;
  struct                               _STORAGE_REQUEST_BLOCK;
  ULONG                                SrbExDataOffset[ANYSIZE_ARRAY];
} STORAGE_REQUEST_BLOCK, *PSTORAGE_REQUEST_BLOCK;

Membres

Length

Spécifie la taille de l’en-tête SRB pour la compatibilité avec la structure SCSI_REQUEST_BLOCK . Cette valeur est égale au décalage du membre signature de cette structure.

Function

Définissez sur SRB_FUNCTION_STORAGE_REQUEST_BLOCK pour indiquer qu’il s’agit d’un SRB étendu. Contrairement à SCSI_REQUEST_BLOCK, l’identificateur de fonction SRB se trouve plutôt dans le membre SrbFunction .

SrbStatus

Retourne le status de la demande terminée. Ce membre doit être défini par le pilote miniport avant d’informer le pilote spécifique au système d’exploitation que la demande a été effectuée en appelant ScsiPortNotification avec RequestComplete. La valeur de ce membre peut être l’une des suivantes :

Valeur Signification
SRB_STATUS_PENDING (0x00) Indique que la demande est en cours. Le pilote de port spécifique au système d’exploitation initialise SrbStatus à cette valeur.
SRB_STATUS_SUCCESS (0x01) Indique que la demande a été effectuée avec succès.
SRB_STATUS_ABORTED (0x02) Indique que la requête a été abandonnée comme indiqué par le pilote de port. Un pilote miniport définit cette status dans le membre NextSrb pour une demande de SRB_FUNCTION_ABORT_COMMAND réussie.
SRB_STATUS_ABORT_FAILED (0x03) Indique qu’une tentative d’abandon de la demande a échoué. Retournez cette status pour une demande de SRB_FUNCTION_ABORT_COMMAND lorsque la demande spécifiée ne peut pas être trouvée.
SRB_STATUS_ERROR (0x04) Indique que la demande a été effectuée avec une erreur dans le bus SCSI status.
SRB_STATUS_BUSY (0x05) Indique que le pilote miniport ou l’appareil cible n’a pas pu accepter la demande pour le moment. Le pilote de port spécifique au système d’exploitation présentera de nouveau la demande ultérieurement.
SRB_STATUS_INVALID_REQUEST (0x06) Indique que le pilote miniport ne prend pas en charge la demande donnée.
SRB_STATUS_INVALID_PATH_ID (0x07) Indique que le PathId spécifié dans le SRB n’existe pas.
SRB_STATUS_NO_DEVICE (0x08) Indique que l’appareil n’a pas répondu.
SRB_STATUS_TIMEOUT (0x09) Indique que la requête a expiré.
SRB_STATUS_SELECTION_TIMEOUT (0x0A) Indique que le délai de sélection de l’appareil SCSI a expiré.
SRB_STATUS_COMMAND_TIMEOUT (0x0B) Indique que la cible n’a pas terminé la commande dans le délai imparti.
SRB_STATUS_MESSAGE_REJECTED (0x0D) Indique que la cible a rejeté un message. Cette valeur est normalement retournée uniquement pour les requêtes de type message telles que SRB_FUNCTION_TERMINATE_IO.
SRB_STATUS_BUS_RESET (0x0E) Indique qu’une réinitialisation de bus s’est produite pendant l’exécution de cette requête.
SRB_STATUS_PARITY_ERROR (0x0F) Indique qu’une erreur de parité s’est produite sur le bus SCSI et qu’une nouvelle tentative a échoué.
SRB_STATUS_REQUEST_SENSE_FAILED (0x10) Indique que la commande request-sense a échoué. Cela est retourné uniquement si l’adaptateur de bus hôte (HBA) exécute l’affichage automatique des requêtes et si le pilote miniport a défini AutoRequestSense sur TRUE dans le PORT_CONFIGURATION_INFORMATION pour cet adaptateur HBA.
SRB_STATUS_NO_HBA (0x11) Indique que l’adaptateur HBA ne répond pas.
SRB_STATUS_DATA_OVERRUN (0x12) Indique qu’une erreur de dépassement ou de sous-exécution de données s’est produite. Le pilote miniport doit également mettre à jour le membre DataTransferLength du SRB pour indiquer la quantité de données réellement transférées en cas de sous-exécution.
SRB_STATUS_UNEXPECTED_BUS_FREE (0x13) Indique que la cible est déconnectée de manière inattendue.
SRB_STATUS_PHASE_SEQUENCE_FAILURE (0x14) Indique que l’adaptateur HBA a détecté une erreur d’échec de séquence de phase non valide.
SRB_STATUS_BAD_SRB_BLOCK_LENGTH (0x15) Indique que la demande a échoué, car la longueur du SRB n’était pas valide.
SRB_STATUS_REQUEST_FLUSHED (0x16) Indique que la demande de status a été arrêtée.
SRB_STATUS_INVALID_LUN (0x20) Indique que la valeur lun dans le SRB n’est pas valide.
SRB_STATUS_INVALID_TARGET_ID (0x21) Indique que la valeur TargetID dans le SRB n’est pas valide.
SRB_STATUS_BAD_FUNCTION (0x22) Indique que le code de la fonction SRB n’est pas pris en charge.
SRB_STATUS_ERROR_RECOVERY (0x23) Indique que la demande a été effectuée avec une erreur dans le bus SCSI status et que le message SCSI INITIATE RECOVERY a été reçu.
SRB_STATUS_NOT_POWERED (0x24) Indique que la requête a échoué, car la cible n’est pas sous tension. Pour les requêtes avec SRB_FLAGS_NO_KEEP_AWAKE définie dans SrbFlags, les requêtes envoyées aux LUN sous tension échouent avec cette status.
SRB_STATUS_LINK_DOWN (0x25) Indique que la demande a échoué, car le lien est arrêté.
SRB_STATUS_INTERNAL_ERROR (0x30) Indique que le pilote Storport n’a pas pu remettre la demande au pilote miniport ou au périphérique cible. Dans ce cas, status est enregistré dans InternalStatus.
SRB_STATUS_QUEUE_FROZEN (0x40) Un pilote miniport ne doit jamais définir le membre SrbStatus sur cette valeur. Le pilote de port Windows peut définir cette valeur pour informer un pilote de classe de stockage que sa file d’attente de requêtes pour un périphérique particulier a été figée.
SRB_STATUS_AUTOSENSE_VALID (0x80) Indique que les informations retournées dans SenseInfoBuffer sont valides.

ReservedUlong1

Réservé. Définit la valeur 0.

Signature

Signature du format SRB étendu. Cette valeur est définie sur SRB_SIGNATURE.

Version

Version de la structure utilisée. La version actuelle est STORAGE_REQUEST_BLOCK_VERSION_1.

SrbLength

Longueur de ce SRB étendu, en octets, y compris cette structure, cette adresse et toutes les données étendues SRB.

SrbFunction

Spécifie l’opération à effectuer, qui peut être l’une des valeurs suivantes :

Valeur Signification
SRB_FUNCTION_EXECUTE_SCSI (0x00) Une demande d’E/S d’appareil SCSI doit être exécutée sur l’unité logique cible. Lorsque NumSrbExData> 0, une ou plusieurs des structures de blocs de requêtes étendues suivantes se trouvent aux décalages spécifiés dans SrbExDataOffset : SRBEX_DATA_SCSI_CDB16, SRBEX_DATA_SCSI_CDB32, SRBEX_DATA_SCSI_CDB_VAR, SRBEX_DATA_BIDIRECTIONAL, SRBEX_DATA_IO_INFO
SRB_FUNCTION_IO_CONTROL (0x02) La demande est une demande de contrôle d’E/S, provenant d’une application en mode utilisateur avec un HBA dédié. Le DataBuffer SRB pointe vers un en-tête SRB_IO_CONTROL suivi de la zone de données. La valeur dans DataBuffer peut être utilisée par le pilote, quelle que soit la valeur de MapBuffers. Seuls les membres SRB Function, SrbFlags, TimeOutValue, DataBuffer et DataTransferLength sont valides, ainsi que le membre SrbExtension si le pilote miniport a demandé des extensions SRB lors de l’initialisation. Si un pilote miniport contrôle un HBA dédié à l’application afin qu’il prenne en charge cette requête, le pilote miniport doit exécuter la demande et notifier le pilote de port spécifique au système d’exploitation lorsque le SRB est terminé, en utilisant le mécanisme normal d’appels à ScsiPortNotification avec RequestComplete et NextRequest.
SRB_FUNCTION_RECEIVE_EVENT (0x03) L’adaptateur HBA doit être prêt à recevoir une notification d’événement asynchrone de la cible adressée. Le membre SRB DataBuffer indique où les données doivent être placées. REMARQUE : Cette fonction n’est pas envoyée au miniport par Storport.
SRB_FUNCTION_SHUTDOWN (0x07) Le système est en cours d’arrêt. Un pilote miniport peut recevoir plusieurs de ces notifications avant que toute activité système ne s’arrête réellement. Toutefois, la dernière notification d’arrêt se produit après la dernière E/S de démarrage. Les données SRB étendues ne sont pas requises pour cette fonction.
SRB_FUNCTION_FLUSH (0x08) Le pilote miniport doit vider toutes les données mises en cache pour l’appareil cible. Cette requête est envoyée au pilote miniport uniquement s’il a défini CachesData sur TRUE dans le PORT_CONFIGURATION_INFORMATION pour l’adaptateur HBA. Les données SRB étendues ne sont pas requises pour cette fonction.
SRB_FUNCTION_ABORT_COMMAND (0x10) Un message SCSIMESS_ABORT doit être envoyé pour annuler la demande pointée par le membre NextSrb . S’il s’agit d’une demande de file d’attente marquée, un message SCSIMESS_ABORT_WITH_TAG doit être utilisé à la place. Si la demande indiquée a été effectuée, cette demande doit être effectuée normalement. Les données SRB étendues ne sont pas requises pour cette fonction. REMARQUE : Cette fonction n’est pas envoyée au miniport par Storport.
SRB_FUNCTION_RELEASE_RECOVERY (0x11) Un message SCSIMESS_RELEASE_RECOVERY doit être envoyé au contrôleur cible. Les données SRB étendues ne sont pas requises pour cette fonction. REMARQUE : Cette fonction n’est pas envoyée au miniport par Storport.
SRB_FUNCTION_RESET_BUS (0x12) Le bus SCSI doit être réinitialisé à l’aide du message SCSIMESS_BUS_DEVICE_RESET. Un pilote miniport ne reçoit cette demande que si une demande donnée a expiré et qu’une demande ultérieure d’abandon de la demande de délai d’expiration a également expiré. Les données SRB étendues ne sont pas requises pour cette fonction.
SRB_FUNCTION_TERMINATE_IO (0x14) Un message SCSIMESS_TERMINATE_IO_PROCESS doit être envoyé pour annuler la demande pointée par le membre NextSrb . Si la demande indiquée est déjà terminée, cette demande doit être effectuée normalement. Les données SRB étendues ne sont pas requises pour cette fonction. REMARQUE : Cette fonction n’est pas envoyée au miniport par Storport.
SRB_FUNCTION_RESET_DEVICE (0x16) Le contrôleur cible SCSI doit être réinitialisé à l’aide du message SCSIMESS_BUS_DEVICE_RESET. Le pilote miniport doit effectuer toutes les requêtes actives pour le contrôleur cible. Les données SRB étendues ne sont pas requises pour cette fonction.
SRB_FUNCTION_WMI (0x17) La demande est une demande d’alimentation étendue mise en forme en tant que structure SRBEX_DATA_WMI . Le décalage vers les données de requête étendues se trouve dans SrbExDataOffset[0].
SRB_FUNCTION_LOCK_QUEUE (0x18) Contient les requêtes qui sont mises en file d’attente par le pilote de port pour une unité logique particulière, généralement pendant le traitement d’une demande d’alimentation. Seuls les membres SRB Length, Function, SrbFlags et OriginalRequest sont valides. Lorsque la file d’attente est verrouillée, seules les demandes avec SrbFlags ORed avec SRB_FLAGS_BYPASS_LOCKED_QUEUE sont traitées. Les pilotes miniport SCSI ne traitent pas les requêtes SRB_FUNCTION_LOCK_QUEUE .
SRB_FUNCTION_UNLOCK_QUEUE (0x19) Libère la file d’attente du pilote de port pour une unité logique précédemment verrouillée avec SRB_FUNCTION_LOCK_QUEUE. Les SrbFlags de la demande de déverrouillage doivent être ORed avec SRB_FLAGS_BYPASS_LOCKED_QUEUE. Seuls les membres SRB Length, Function, SrbFlags et OriginalRequest sont valides. Les pilotes miniport SCSI ne traitent pas les requêtes SRB_FUNCTION_UNLOCK_QUEUE .
SRB_FUNCTION_QUIESCE_DEVICE (0x1A) La requête se trouve uniquement entre une classe de stockage et un pilote de port de stockage et n’est pas envoyée au miniport. Cette fonction sert d’attente par le pilote de classe pour que le pilote de port termine toutes les E/S en suspens.
SRB_FUNCTION_RESET_LOGICAL_UNIT (0x20) L’unité logique doit être réinitialisée, si possible. Le pilote miniport HBA doit effectuer toutes les demandes actives pour l’unité logique. Les données SRB étendues ne sont pas requises pour cette fonction. Storport prend en charge ce type de réinitialisation, mais pas le port SCSI.
SRB_FUNCTION_POWER (0x24) La demande est une demande d’alimentation étendue mise en forme en tant que structure SRBEX_DATA_POWER . Le décalage vers les données de requête étendues se trouve dans SrbExDataOffset[0].
SRB_FUNCTION_PNP (0x25) La requête est une requête étendue PnP mise en forme comme une structure SRBEX_DATA_PNP . Le décalage vers les données de requête étendues se trouve dans SrbExDataOffset[0].
SRB_FUNCTION_DUMP_POINTERS (0x26) Une requête avec cette fonction est envoyée à un pilote de miniport Storport qui est utilisé pour contrôler le disque qui contient les données de vidage sur incident. La demande collecte les informations nécessaires au pilote miniport pour prendre en charge le vidage sur incident et la mise en veille prolongée. Consultez la structure MINIPORT_DUMP_POINTERS . Un pilote de miniport physique doit définir l’indicateur STOR_FEATURE_DUMP_POINTERS dans le membre FeatureSupport de son HW_INITIALIZATION_DATA pour recevoir une demande avec cette fonction.
SRB_FUNCTION_FREE_DUMP_POINTERS (0x27) Une demande avec cette fonction est envoyée à un pilote de miniport Storport pour libérer toutes les ressources allouées lors d’une demande précédente pour SRB_FUNCTION_DUMP_POINTERS.

SrbFlags

Indique différents paramètres et options pour la demande. SrbFlags est en lecture seule, sauf lorsque SRB_FLAGS_UNSPECIFIED_DIRECTION est défini et que les pilotes miniport des adaptateurs DMA subordonnés sont nécessaires pour mettre à jour SRB_FLAGS_DATA_IN ou SRB_FLAGS_DATA_OUT. Un ou plusieurs de ces indicateurs peuvent être définis pour ce membre.

Indicateur Signification
SRB_FLAGS_NO_DATA_TRANSFER (0x00000000) 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_QUEUE_ACTION_ENABLE (0x00000002) Indique que les actions de file d’attente marquées doivent être activées.
SRB_FLAGS_DISABLE_DISCONNECT (0x00000004) Indique que l’adaptateur HBA ne doit pas autoriser la cible à se déconnecter du bus SCSI pendant le traitement de cette requête.
SRB_FLAGS_DISABLE_SYNCH_TRANSFER (0x00000008) 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_BYPASS_FROZEN_QUEUE (0x00000010) Ce drapeau n’est pas pertinent pour les pilotes de miniport.
SRB_FLAGS_DISABLE_AUTOSENSE (0x00000020) Indique que les informations de sens de requête ne doivent pas être retournées.
SRB_FLAGS_DATA_IN (0x00000040) Indique que les données seront transférées de l’appareil vers le système.
SRB_FLAGS_DATA_OUT (0x00000080) Indique que les données seront transférées du système vers l’appareil.
SRB_FLAGS_UNSPECIFIED_DIRECTION (SRB_FLAGS_DATA_IN | SRB_FLAGS_DATA_OUT) Défini pour la compatibilité descendante avec les interfaces SCSI ASPI/CAM, cet indicateur indique que la direction de transfert peut être l’une des précédentes, car les deux indicateurs précédents sont définis. Si cet indicateur est défini, un pilote miniport doit déterminer la direction du transfert en examinant la phase de données de la cible sur le bus SCSI.
SRB_FLAGS_NO_QUEUE_FREEZE (0x00000100) Ce drapeau n’est pas pertinent pour les pilotes de miniport.
SRB_FLAGS_ADAPTER_CACHE_ENABLE (0x00000200) Indique que l’adaptateur peut mettre en cache des données.
SRB_FLAGS_FREE_SENSE_BUFFER (0x00000400) Indique que le port ou le pilote miniport a alloué une mémoire tampon pour les données sense. Cela informe le pilote de classe qu’il doit libérer la mémoire tampon de données sense après l’extraction des données.
SRB_FLAGS_D3_PROCESSING (0x00000800) Indique que la requête fait partie du traitement D3. Les miniports qui prennent en charge le contrôle d’alimentation du runtime ne doivent pas appeler StorPortPoFxActivateComponent ou StorPortPoFxIdleComponent avec ces demandes.
SRB_FLAGS_SEQUENTIAL_REQUIRED (0x00001000) Indique que la plage DBA se situe dans la zone d’écriture séquentielle requise.
SRB_FLAGS_IS_ACTIVE (0x00010000) Ce drapeau n’est pas pertinent pour les pilotes de miniport.
SRB_FLAGS_ALLOCATED_FROM_ZONE (0x00020000) Cet indicateur n’est pas pertinent pour les pilotes miniport et est obsolète pour les nouveaux pilotes de classe Windows. Pour un pilote de classe héritée Windows, cela indique si le SRB a été alloué à partir d’une mémoire tampon de zone. Si cet indicateur est défini, le pilote de classe doit appeler ExInterlockedFreeToZone pour libérer le SRB ; sinon, il doit appeler ExFreePool. Les nouveaux pilotes de classe doivent utiliser des listes de lookaside plutôt que des mémoires tampons de zone.
SRB_FLAGS_SGLIST_FROM_POOL (0x00040000) Ce drapeau n’est pas pertinent pour les pilotes de miniport. Pour le pilote de classe, cela indique que la mémoire d’une liste de points/regroupements a été allouée à partir d’un pool non paginé. Si cet indicateur est défini, le pilote de classe doit appeler ExFreePool pour libérer la mémoire une fois le SRB terminé.
SRB_FLAGS_BYPASS_LOCKED_QUEUE (0x00080000) Ce drapeau n’est pas pertinent pour les pilotes de miniport. Pour le pilote de port, cet indicateur indique que la demande doit être traitée, que la file d’attente d’unités logiques soit verrouillée ou non. Un pilote de niveau supérieur doit définir cet indicateur pour envoyer une demande de SRB_FUNCTION_UNLOCK_QUEUE .
SRB_FLAGS_NO_KEEP_AWAKE (0x00100000) Ce drapeau n’est pas pertinent pour les pilotes de miniport. Un pilote de classe Windows utilise cet indicateur pour indiquer au pilote de port d’échouer la requête au lieu de mettre sous tension l’appareil pour gérer cette requête.
SRB_FLAGS_PORT_DRIVER_ALLOCSENSE (0x00200000) Le pilote de port doit allouer la mémoire tampon sense pour le SRB.
SRB_FLAGS_PORT_DRIVER_SENSEHASPORT (0x00400000) Déprécié ; ne pas utiliser.
SRB_FLAGS_DONT_START_NEXT_PACKET (0x00800000) Déprécié ; ne pas utiliser.
SRB_FLAGS_PORT_DRIVER_RESERVED (0x0F000000) Réservé pour le système.
SRB_FLAGS_CLASS_DRIVER_RESERVED (0xF0000000) Réservé pour le système.

ReservedUlong2

Réservé. Définit la valeur 0.

RequestTag

Contient la valeur de balise de file d’attente affectée par le pilote de port spécifique au système d’exploitation. Si ce membre est utilisé pour la mise en file d’attente balisée, l’adaptateur HBA prend en charge la mise en file d’attente interne des requêtes aux unités logiques (LU) et le pilote miniport définit TaggedQueueing sur TRUE dans le PORT_CONFIGURATION_INFORMATION pour cet adaptateur HBA.

RequestPriority

Affectation de priorité pour le SRB. Il s’agit de l’une des valeurs _STOR_IO_PRIORITY_HINT suivantes :

Valeur Signification
StorIoPriorityVeryLow (0) Priorité très faible.
StorIoPriorityLow (1) Priorité basse.
StorIoPriorityNormal (2) Priorité normale.
StorIoPriorityHigh (3) Haute priorité.
StorIoPriorityCritical (4) Priorité critique.

RequestAttribute

Indique le message de mise en file d’attente marquée à utiliser lorsque l’indicateur SRB_FLAGS_QUEUE_ACTION_ENABLE est défini. La valeur peut être l’une des suivantes : SRB_SIMPLE_TAG_REQUEST, SRB_HEAD_OF_QUEUE_TAG_REQUEST ou SRB_ORDERED_QUEUE_TAG_REQUEST.

TimeOutValue

Indique l’intervalle, en secondes, pendant lequel la demande 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à.

DUMMYUNIONNAME

Union incorporée.

DUMMYUNIONNAME.SystemStatus

Permet de stocker des informations sur les défaillances du système status dans les conditions d’échec de SrbStatus (par exemple, SRB_STATUS_INTERNAL_ERROR).

DUMMYUNIONNAME.RequestTagHigh4Bytes

Permet de stocker quatre octets élevés de balise unique si la fonctionnalité de balise unique est activée.

SystemStatus

Utilisé par le pilote Storport, au lieu de SrbStatus, pour signaler la status de la demande terminée chaque fois que la demande ne peut pas être remise au pilote miniport. Dans ce cas, SrbStatus est défini sur SRB_STATUS_INTERNAL_ERROR. Ce membre est utilisé exclusivement pour la communication entre le Storport et le pilote de classe et ne doit pas être utilisé par les pilotes miniport.

ZeroGuard1

Zone de protection contre les conducteurs qui interprètent cette structure comme SCSI_REQUEST_BLOCK. Définit la valeur 0.

AddressOffset

Décalage de l’adresse de la demande de stockage à partir du début de cette structure. Ce décalage localise une structure STOR_ADDRESS qui contient l’adresse de la demande.

NumSrbExData

Nombre de blocs de données SRB étendus pour cette demande.

DataTransferLength

Indique la taille, en octets, de la mémoire tampon de données. 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.

DataBuffer

Pointe vers la mémoire tampon de données. Les pilotes miniport ne doivent pas utiliser cette valeur comme pointeur de données, sauf si le pilote miniport a défini MapBuffers sur TRUE dans le PORT_CONFIGURATION_INFORMATION pour l’adaptateur HBA. Toutefois, dans le cas de requêtes SRB_FUNCTION_IO_CONTROL, les pilotes miniport peuvent utiliser cette valeur comme pointeur de données, quelle que soit la valeur de MapBuffers.

ZeroGuard2

Zone de protection contre les conducteurs qui interprètent cette structure comme SCSI_REQUEST_BLOCK. Définit la valeur 0.

OriginalRequest

Pointe vers l’IRP pour cette demande. Ce membre n’est pas pertinent pour les pilotes de miniport.

ClassContext

Pointe vers les données de contexte d’un pilote de classe pour cette demande. Ce membre n’est pas pertinent pour les pilotes de miniport.

PortContext

Pointe vers les données de contexte d’un pilote de port pour cette demande. Ce membre n’est pas pertinent pour les pilotes de miniport.

MiniportContext

Pointe vers l’extension Srb. Un pilote miniport ne doit pas utiliser ce membre s’il a défini SrbExtensionSize sur zéro dans HW_INITIALIZATION_DATA. La mémoire sur MiniportContext 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 MiniportContext .

NextSrb

Indique le STORAGE_REQUEST_BLOCK auquel cette demande s’applique. Seul un petit sous-ensemble de requêtes utilise un deuxième SRB, par exemple SRB_FUNCTION_ABORT_COMMAND.

_STORAGE_REQUEST_BLOCK

SrbExDataOffset[ANYSIZE_ARRAY]

Tableau de décalages spécifiant l’emplacement des blocs de données étendus pour le SRB. Ce tableau est vide si NumSrbExData = 0.

Remarques

À compter de Windows 8, un type SRB étendu est pris en charge avec l’utilisation de la structure STORAGE_REQUEST_BLOCK. STORAGE_REQUEST_BLOCK étend les fonctions SRB, ce qui permet d’ajouter des blocs de données étendus pour la fonction SRB à la requête. La prise en charge des demandes SRB à l’aide de la structure SCSI_REQUEST_BLOCK continue.

Si NumSrbExData> 0, les décalages des blocs de données étendus SRB se trouvent dans le tableau SrbExDataOffset . Chaque décalage est relatif au début de cette structure et pointe vers une structure SRBEX_DATA contenant le bloc de données étendu.

L’adresse de l’appareil cible pour le SRB se trouve dans une structure STOR_ADDRESS indiquée par AddressOffset.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 8
En-tête srb.h (y compris Storport.h, Srb.h, Minitape.h)

Voir aussi