structure IO_STACK_LOCATION (wdm.h)

La structure IO_STACK_LOCATION définit un emplacement de pile d’E/S, qui est une entrée dans la pile d’E/S associée à chaque IRP. Chaque emplacement de pile d’E/S dans un IRP a des membres communs et des membres spécifiques au type de requête.

Syntaxe

typedef struct _IO_STACK_LOCATION {
  UCHAR                  MajorFunction;
  UCHAR                  MinorFunction;
  UCHAR                  Flags;
  UCHAR                  Control;
  union {
    struct {
      PIO_SECURITY_CONTEXT     SecurityContext;
      ULONG                    Options;
      USHORT POINTER_ALIGNMENT FileAttributes;
      USHORT                   ShareAccess;
      ULONG POINTER_ALIGNMENT  EaLength;
    } Create;
    struct {
      PIO_SECURITY_CONTEXT          SecurityContext;
      ULONG                         Options;
      USHORT POINTER_ALIGNMENT      Reserved;
      USHORT                        ShareAccess;
      PNAMED_PIPE_CREATE_PARAMETERS Parameters;
    } CreatePipe;
    struct {
      PIO_SECURITY_CONTEXT        SecurityContext;
      ULONG                       Options;
      USHORT POINTER_ALIGNMENT    Reserved;
      USHORT                      ShareAccess;
      PMAILSLOT_CREATE_PARAMETERS Parameters;
    } CreateMailslot;
    struct {
      ULONG                   Length;
      ULONG POINTER_ALIGNMENT Key;
      ULONG                   Flags;
      LARGE_INTEGER           ByteOffset;
    } Read;
    struct {
      ULONG                   Length;
      ULONG POINTER_ALIGNMENT Key;
      ULONG                   Flags;
      LARGE_INTEGER           ByteOffset;
    } Write;
    struct {
      ULONG                   Length;
      PUNICODE_STRING         FileName;
      FILE_INFORMATION_CLASS  FileInformationClass;
      ULONG POINTER_ALIGNMENT FileIndex;
    } QueryDirectory;
    struct {
      ULONG                   Length;
      ULONG POINTER_ALIGNMENT CompletionFilter;
    } NotifyDirectory;
    struct {
      ULONG                                                Length;
      ULONG POINTER_ALIGNMENT                              CompletionFilter;
      DIRECTORY_NOTIFY_INFORMATION_CLASS POINTER_ALIGNMENT DirectoryNotifyInformationClass;
    } NotifyDirectoryEx;
    struct {
      ULONG                                    Length;
      FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
    } QueryFile;
    struct {
      ULONG                                    Length;
      FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
      PFILE_OBJECT                             FileObject;
      union {
        struct {
          BOOLEAN ReplaceIfExists;
          BOOLEAN AdvanceOnly;
        };
        ULONG  ClusterCount;
        HANDLE DeleteHandle;
      };
    } SetFile;
    struct {
      ULONG                   Length;
      PVOID                   EaList;
      ULONG                   EaListLength;
      ULONG POINTER_ALIGNMENT EaIndex;
    } QueryEa;
    struct {
      ULONG Length;
    } SetEa;
    struct {
      ULONG                                  Length;
      FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
    } QueryVolume;
    struct {
      ULONG                                  Length;
      FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
    } SetVolume;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   Type3InputBuffer;
    } FileSystemControl;
    struct {
      PLARGE_INTEGER          Length;
      ULONG POINTER_ALIGNMENT Key;
      LARGE_INTEGER           ByteOffset;
    } LockControl;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT IoControlCode;
      PVOID                   Type3InputBuffer;
    } DeviceIoControl;
    struct {
      SECURITY_INFORMATION    SecurityInformation;
      ULONG POINTER_ALIGNMENT Length;
    } QuerySecurity;
    struct {
      SECURITY_INFORMATION SecurityInformation;
      PSECURITY_DESCRIPTOR SecurityDescriptor;
    } SetSecurity;
    struct {
      PVPB           Vpb;
      PDEVICE_OBJECT DeviceObject;
      ULONG          OutputBufferLength;
    } MountVolume;
    struct {
      PVPB           Vpb;
      PDEVICE_OBJECT DeviceObject;
    } VerifyVolume;
    struct {
      struct _SCSI_REQUEST_BLOCK *Srb;
    } Scsi;
    struct {
      ULONG                       Length;
      PSID                        StartSid;
      PFILE_GET_QUOTA_INFORMATION SidList;
      ULONG                       SidListLength;
    } QueryQuota;
    struct {
      ULONG Length;
    } SetQuota;
    struct {
      DEVICE_RELATION_TYPE Type;
    } QueryDeviceRelations;
    struct {
      const GUID *InterfaceType;
      USHORT     Size;
      USHORT     Version;
      PINTERFACE Interface;
      PVOID      InterfaceSpecificData;
    } QueryInterface;
    struct {
      PDEVICE_CAPABILITIES Capabilities;
    } DeviceCapabilities;
    struct {
      PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
    } FilterResourceRequirements;
    struct {
      ULONG                   WhichSpace;
      PVOID                   Buffer;
      ULONG                   Offset;
      ULONG POINTER_ALIGNMENT Length;
    } ReadWriteConfig;
    struct {
      BOOLEAN Lock;
    } SetLock;
    struct {
      BUS_QUERY_ID_TYPE IdType;
    } QueryId;
    struct {
      DEVICE_TEXT_TYPE       DeviceTextType;
      LCID POINTER_ALIGNMENT LocaleId;
    } QueryDeviceText;
    struct {
      BOOLEAN                                          InPath;
      BOOLEAN                                          Reserved[3];
      DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
    } UsageNotification;
    struct {
      SYSTEM_POWER_STATE PowerState;
    } WaitWake;
    struct {
      PPOWER_SEQUENCE PowerSequence;
    } PowerSequence;
#if ...
    struct {
      union {
        ULONG                      SystemContext;
        SYSTEM_POWER_STATE_CONTEXT SystemPowerStateContext;
      };
      POWER_STATE_TYPE POINTER_ALIGNMENT Type;
      POWER_STATE POINTER_ALIGNMENT      State;
      POWER_ACTION POINTER_ALIGNMENT     ShutdownType;
    } Power;
#else
    struct {
      ULONG                              SystemContext;
      POWER_STATE_TYPE POINTER_ALIGNMENT Type;
      POWER_STATE POINTER_ALIGNMENT      State;
      POWER_ACTION POINTER_ALIGNMENT     ShutdownType;
    } Power;
#endif
    struct {
      PCM_RESOURCE_LIST AllocatedResources;
      PCM_RESOURCE_LIST AllocatedResourcesTranslated;
    } StartDevice;
    struct {
      ULONG_PTR ProviderId;
      PVOID     DataPath;
      ULONG     BufferSize;
      PVOID     Buffer;
    } WMI;
    struct {
      PVOID Argument1;
      PVOID Argument2;
      PVOID Argument3;
      PVOID Argument4;
    } Others;
  } Parameters;
  PDEVICE_OBJECT         DeviceObject;
  PFILE_OBJECT           FileObject;
  PIO_COMPLETION_ROUTINE CompletionRoutine;
  PVOID                  Context;
} IO_STACK_LOCATION, *PIO_STACK_LOCATION;

Membres

MajorFunction

Code de fonction principale IRP indiquant le type d’opération d’E/S à effectuer.

MinorFunction

Code de sous-fonction pour MajorFunction. Le gestionnaire PnP, le gestionnaire d’alimentation, les pilotes de système de fichiers et les pilotes de classe SCSI définissent ce membre pour certaines demandes.

Flags

Valeurs spécifiques au type de requête utilisées presque exclusivement par les pilotes de système de fichiers. Les pilotes de périphérique de support amovible case activée si ce membre est défini avec SL_OVERRIDE_VERIFY_VOLUME pour les demandes de lecture afin de déterminer s’il faut continuer l’opération de lecture même si les indicateurs de l’objet d’appareil sont définis avec DO_VERIFY_VOLUME. Les pilotes intermédiaires superposés sur un pilote de périphérique amovible doivent copier ce membre dans l’emplacement de pile d’E/S du pilote inférieur suivant dans toutes les demandes de IRP_MJ_READ entrantes.

Pour obtenir de la documentation sur d’autres SL_* indicateurs pour IRP_MJ_CREATE, consultez IRP_MJ_CREATE (IFS).

Les valeurs d’indicateur possibles sont les suivantes :

Indicateur Valeur Description
SL_KEY_SPECIFIED 0x01 Indique que contient la IO_STACK_LOCATION.Parameters.Read(OrWrite).Key copie d’un secteur donné à lire lorsque la redondance est activée. Aujourd’hui, cet indicateur est utilisé uniquement avec les opérations IRP_MJ_READ.
SL_OVERRIDE_VERIFY_VOLUME 0x02 Cet indicateur permet de déterminer s’il faut poursuivre l’opération de lecture même si les indicateurs de l’objet d’appareil sont définis avec DO_VERIFY_VOLUME.
SL_WRITE_THROUGH 0x04 Cet indicateur indique au pilote de stockage de définir les indicateurs appropriés afin que le disque contourne le cache d’écriture afin de forcer le disque à écrire sur son support de stockage persistant. Cet indicateur est spécifique à l’appareil ; tous les lecteurs de disque ne prennent pas en charge le contournement du cache de disque.
SL_FT_SEQUENTIAL_WRITE 0x08 Réservé pour le système.
SL_FORCE_DIRECT_WRITE 0x10 Cet indicateur permet aux pilotes en mode noyau d’écrire dans des zones de volume qu’ils ne peuvent normalement pas écrire en raison du blocage de l’écriture directe dans le système de fichiers et la pile des pilotes de stockage. Le blocage d’écriture directe permet d’améliorer la sécurité. Cet indicateur est vérifié à la fois au niveau de la couche de système de fichiers et de la couche de pile de stockage. Pour plus d’informations sur le blocage de l’écriture directe, consultez Blocage des opérations d’écriture directe sur des volumes et des disques.
SL_REALTIME_STREAM 0x20 Cet indicateur indique que les E/S sont destinées aux demandes de diffusion en continu en temps réel vers un pilote de classe CD-ROM. Cela indique au pilote d’effectuer des opérations DE LECTURE/ÉCRITURE à une vitesse garantie pour la diffusion en temps réel. Cet indicateur est valide uniquement avec le support optique.
SL_PERSISTENT_MEMORY_FIXED_MAPPING 0x20 Le mappage de mémoire persistant des octets de la demande d’écriture ne peut pas être modifié lors de la gestion de cette demande d’écriture. Cet indicateur est valide uniquement avec un périphérique de mémoire persistant et IRP_MJ_WRITE.

Pour les appareils de mémoire persistants, l’une des raisons de la réappingation (modification de l’adresse physique d’un LBA donné) sur des périphériques de mémoire persistants est de fournir une atomicité efficace au niveau du secteur. Si l’indicateur n’est pas défini, le remapping est autorisé, en particulier si le pilote fournit l’atomicité de secteur. Les systèmes de fichiers (ou le demandeur) préfèrent qu’un pilote de périphérique de mémoire persistant fournisse une atomicité de secteur. Si l’indicateur est défini, un pilote de mémoire persistant ne doit pas remapcher les adresses physiques correspondant aux LBA. Si cela signifie que l’atomicité du secteur ne peut pas être fournie, ainsi soit-il. Cependant, le pilote est plus que bienvenu pour fournir l’atomicité du secteur tant qu’il n’y a pas de réapping.

Control

Les pilotes peuvent case activée ce membre pour déterminer s’il est défini avec SL_PENDING_RETURNED et dans quelles conditions le CompletionRoutine est appelé. Les pilotes ont un accès en lecture seule à ce membre. Les pilotes appellent IoSetCompletionRoutine ou IoSetCompletionRoutineEx pour spécifier ces conditions.

Parameters

Union qui dépend des valeurs de code des fonctions IRP principales et mineures contenues dans MajorFunction et MinorFunction. Le tableau suivant montre quels IRP utilisent les membres individuels de l’union Parameters .

Nom du membre IrPs qui utilisent ce membre
Créer IRP_MJ_CREATE
Lire IRP_MJ_READ
Écrire IRP_MJ_WRITE
QueryFile IRP_MJ_QUERY_INFORMATION
SetFile IRP_MJ_SET_INFORMATION
QueryVolume IRP_MJ_QUERY_VOLUME_INFORMATION
DeviceIoControl IRP_MJ_DEVICE_CONTROL et IRP_MJ_INTERNAL_DEVICE_CONTROL
MountVolume IRP_MN_MOUNT_VOLUME
VerifyVolume IRP_MN_VERIFY_VOLUME
Scsi IRP_MJ_INTERNAL_DEVICE_CONTROL (SCSI)
QueryDeviceRelations IRP_MN_QUERY_DEVICE_RELATIONS
QueryInterface IRP_MN_QUERY_INTERFACE
DeviceCapabilities IRP_MN_QUERY_CAPABILITIES
FilterResourceRequirements IRP_MN_FILTER_RESOURCE_REQUIREMENTS
ReadWriteConfig IRP_MN_READ_CONFIG et IRP_MN_WRITE_CONFIG
SetLock IRP_MN_SET_LOCK
QueryId IRP_MN_QUERY_ID
QueryDeviceText IRP_MN_QUERY_DEVICE_TEXT
UsageNotification IRP_MN_DEVICE_USAGE_NOTIFICATION
WaitWake IRP_MN_WAIT_WAKE
PowerSequence IRP_MN_POWER_SEQUENCE
Power IRP_MN_SET_POWER et IRP_MN_QUERY_POWER
StartDevice IRP_MN_START_DEVICE
WMI IDP secondaires WMI
Autres IRPs spécifiques au pilote

Pour plus d’informations, consultez Codes de fonction principaux IRP.

Parameters.Create

Paramètres de service système pour NtCreateFile.

Parameters.Create.SecurityContext

Parameters.Create.Options

Parameters.Create.FileAttributes

Parameters.Create.ShareAccess

Parameters.Create.EaLength

Parameters.CreatePipe

Paramètres de service système pour NtCreateNamedPipeFile.

Parameters.CreatePipe.SecurityContext

Parameters.CreatePipe.Options

Parameters.CreatePipe.Reserved

Parameters.CreatePipe.ShareAccess

Parameters.CreatePipe.Parameters

Parameters.CreateMailslot

Paramètres de service système pour NtCreateMailslotFile.

Parameters.CreateMailslot.SecurityContext

Parameters.CreateMailslot.Options

Parameters.CreateMailslot.Reserved

Parameters.CreateMailslot.ShareAccess

Parameters.CreateMailslot.Parameters

Parameters.Read

Paramètres de service système pour NtReadFile.

Parameters.Read.Length

Parameters.Read.Key

Parameters.Read.Flags

Parameters.Read.ByteOffset

Parameters.Write

Paramètres de service système pour NtWriteFile.

Parameters.Write.Length

Parameters.Write.Key

Parameters.Write.Flags

Parameters.Write.ByteOffset

Parameters.QueryDirectory

Paramètres de service système pour NtQueryDirectoryFile.

Parameters.QueryDirectory.Length

Parameters.QueryDirectory.FileName

Parameters.QueryDirectory.FileInformationClass

Parameters.QueryDirectory.FileIndex

Parameters.NotifyDirectory

Paramètres de service système pour NtNotifyChangeDirectoryFile.

Parameters.NotifyDirectory.Length

Parameters.NotifyDirectory.CompletionFilter

Parameters.NotifyDirectoryEx

Paramètres de service système pour NtNotifyChangeDirectoryFileEx.

Parameters.NotifyDirectoryEx.Length

Parameters.NotifyDirectoryEx.CompletionFilter

Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass

Parameters.QueryFile

Paramètres de service système pour NtQueryInformationFile.

Parameters.QueryFile.Length

Parameters.QueryFile.FileInformationClass

Parameters.SetFile

Paramètres de service système pour NtSetInformationFile.

Parameters.SetFile.Length

Parameters.SetFile.FileInformationClass

Parameters.SetFile.FileObject

Parameters.SetFile.ReplaceIfExists

Parameters.SetFile.AdvanceOnly

Parameters.SetFile.ClusterCount

Parameters.SetFile.DeleteHandle

Parameters.QueryEa

Paramètres de service système pour NtQueryEaFile.

Parameters.QueryEa.Length

Parameters.QueryEa.EaList

Parameters.QueryEa.EaListLength

Parameters.QueryEa.EaIndex

Parameters.SetEa

Paramètres de service système pour NtSetEaFile.

Parameters.SetEa.Length

Parameters.QueryVolume

Paramètres de service système pour NtQueryVolumeInformationFile.

Parameters.QueryVolume.Length

Parameters.QueryVolume.FsInformationClass

Parameters.SetVolume

Paramètres de service système pour NtSetVolumeInformationFile.

Parameters.SetVolume.Length

Parameters.SetVolume.FsInformationClass

Parameters.FileSystemControl

Paramètres de service système pour NtFsControlFile.

Parameters.FileSystemControl.OutputBufferLength

Parameters.FileSystemControl.InputBufferLength

Parameters.FileSystemControl.FsControlCode

Parameters.FileSystemControl.Type3InputBuffer

Parameters.LockControl

Paramètres de service système pour LockFile/NtUnlockFile.

Parameters.LockControl.Length

Parameters.LockControl.Key

Parameters.LockControl.ByteOffset

Parameters.DeviceIoControl

Paramètres de service système pour NtDeviceIoControlFile.

Parameters.DeviceIoControl.OutputBufferLength

Parameters.DeviceIoControl.InputBufferLength

Parameters.DeviceIoControl.IoControlCode

Parameters.DeviceIoControl.Type3InputBuffer

Parameters.QuerySecurity

Paramètres de service système pour NtQuerySecurityObject.

Parameters.QuerySecurity.SecurityInformation

Parameters.QuerySecurity.Length

Parameters.SetSecurity

Paramètres de service système pour NtSetSecurityObject.

Parameters.SetSecurity.SecurityInformation

Parameters.SetSecurity.SecurityDescriptor

Parameters.MountVolume

Paramètres de service système pour MountVolume.

Parameters.MountVolume.Vpb

Parameters.MountVolume.DeviceObject

Parameters.MountVolume.OutputBufferLength

Parameters.VerifyVolume

Paramètres de service système pour VerifyVolume.

Parameters.VerifyVolume.Vpb

Parameters.VerifyVolume.DeviceObject

Parameters.Scsi

Paramètres pour Scsi avec contrôle d’appareil interne.

Parameters.Scsi.Srb

Parameters.QueryQuota

Paramètres de service système pour NtQueryQuotaInformationFile.

Parameters.QueryQuota.Length

Parameters.QueryQuota.StartSid

Parameters.QueryQuota.SidList

Parameters.QueryQuota.SidListLength

Parameters.SetQuota

Paramètres de service système pour NtSetQuotaInformationFile.

Parameters.SetQuota.Length

Parameters.QueryDeviceRelations

Paramètres pour IRP_MN_QUERY_DEVICE_RELATIONS.

Parameters.QueryDeviceRelations.Type

Parameters.QueryInterface

Paramètres pour IRP_MN_QUERY_INTERFACE.

Parameters.QueryInterface.InterfaceType

Parameters.QueryInterface.Size

Parameters.QueryInterface.Version

Parameters.QueryInterface.Interface

Parameters.QueryInterface.InterfaceSpecificData

Parameters.DeviceCapabilities

Paramètres pour IRP_MN_QUERY_CAPABILITIES.

Parameters.DeviceCapabilities.Capabilities

Parameters.FilterResourceRequirements

Paramètres pour IRP_MN_FILTER_RESOURCE_REQUIREMENTS.

Parameters.FilterResourceRequirements.IoResourceRequirementList

Parameters.ReadWriteConfig

Paramètres pour IRP_MN_READ_CONFIG et IRP_MN_WRITE_CONFIG.

Parameters.ReadWriteConfig.WhichSpace

Parameters.ReadWriteConfig.Buffer

Parameters.ReadWriteConfig.Offset

Parameters.ReadWriteConfig.Length

Parameters.SetLock

Paramètres pour IRP_MN_SET_LOCK.

Parameters.SetLock.Lock

Parameters.QueryId

Paramètres pour IRP_MN_QUERY_ID.

Parameters.QueryId.IdType

Parameters.QueryDeviceText

Paramètres pour IRP_MN_QUERY_DEVICE_TEXT.

Parameters.QueryDeviceText.DeviceTextType

Parameters.QueryDeviceText.LocaleId

Parameters.UsageNotification

Paramètres pour IRP_MN_DEVICE_USAGE_NOTIFICATION.

Parameters.UsageNotification.InPath

Parameters.UsageNotification.Reserved[3]

Parameters.UsageNotification.Type

Parameters.WaitWake

Paramètres pour IRP_MN_WAIT_WAKE.

Parameters.WaitWake.PowerState

Parameters.PowerSequence

Paramètre pour IRP_MN_POWER_SEQUENCE.

Parameters.PowerSequence.PowerSequence

Parameters.Power

Paramètres pour IRP_MN_SET_POWER et IRP_MN_QUERY_POWER.

Parameters.Power.SystemContext

Parameters.Power.SystemPowerStateContext

Parameters.Power.Type

Parameters.Power.State

Parameters.Power.ShutdownType

Parameters.StartDevice

Paramètres pour StartDevice.

Parameters.StartDevice.AllocatedResources

Parameters.StartDevice.AllocatedResourcesTranslated

Parameters.WMI

Paramètres pour les runtimes d’intégration WMI.

Parameters.WMI.ProviderId

Parameters.WMI.DataPath

Parameters.WMI.BufferSize

Parameters.WMI.Buffer

Parameters.Others

Paramètres pour d’autres opérations spécifiques au pilote.

Parameters.Others.Argument1

Parameters.Others.Argument2

Parameters.Others.Argument3

Parameters.Others.Argument4

DeviceObject

Pointeur vers la structure DEVICE_OBJECT créée par le pilote représentant l’appareil physique, logique ou virtuel cible pour lequel ce pilote doit gérer l’IRP.

FileObject

Pointeur vers une structure FILE_OBJECT qui représente l’objet file, le cas échéant, associé au pointeur DeviceObject .

CompletionRoutine

Routine d’achèvement appelée en fonction des indicateurs dans le champ Contrôle de cette structure.

Context

Contexte défini par le pilote utilisé pour stocker l’adresse du paramètre de contexte qui est passé à CompletionRoutine.

Remarques

Pour chaque IRP, il existe une structure IO_STACK_LOCATION pour chaque pilote dans une pile de pilotes. L’ensemble d’emplacements de pile d’E/S de chaque IRP est ajouté à l’IRP, en suivant la structure IRP .

Chaque pilote de niveau supérieur est responsable de la configuration de l’emplacement de la pile d’E/S pour le pilote inférieur suivant dans chaque IRP. Un pilote doit appeler IoGetCurrentIrpStackLocation pour obtenir un pointeur vers son propre emplacement de pile pour chaque IRP. Les pilotes de niveau supérieur peuvent appeler IoGetNextIrpStackLocation pour obtenir un pointeur vers l’emplacement de pile du pilote inférieur suivant.

Le pilote de niveau supérieur doit configurer le contenu de l’emplacement de la pile avant d’appeler IoCallDriver pour passer une IRP au pilote de niveau inférieur. Si le pilote transmet l’IRP d’entrée au pilote de niveau inférieur suivant, la routine de répartition doit appeler IoSkipCurrentIrpStackLocation ou IoCopyCurrentIrpStackLocationToNext pour configurer l’emplacement de pile d’E/S du pilote inférieur suivant.

Un appel de pilote de niveau supérieur à IoCallDriver définit le membre DeviceObject sur l’objet d’appareil cible du pilote de niveau inférieur suivant, à l’emplacement de la pile d’E/S du pilote inférieur. Le gestionnaire d’E/S transmet à la routine IoCompletion de chaque pilote de niveau supérieur un pointeur vers son propre objet d’appareil lorsque la routine IoCompletion est appelée à l’achèvement de l’IRP.

Si un pilote de niveau supérieur alloue des IRP pour effectuer ses propres requêtes, sa routine IoCompletion reçoit un pointeur DeviceObject NULL si ce pilote n’alloue pas d’emplacement de pile pour lui-même ni configure le pointeur DeviceObject dans son propre emplacement de pile de l’IRP nouvellement alloué.

Dans certains cas, un pilote de niveau supérieur superposé sur un pilote de périphérique de stockage de masse est responsable du fractionnement des demandes de transfert volumineuses pour le pilote de périphérique sous-jacent. En particulier, les pilotes de classe SCSI doivent case activée parameters.Read.Length et Parameters.Write.Length, déterminer si la taille du transfert demandé dépasse les capacités de transfert du HBA sous-jacent et, si c’est le cas, fractionner la longueur de la requête d’origine en une séquence de transferts partiels pour satisfaire l’IRP d’origine.

Configuration requise

Condition requise Valeur
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)

Voir aussi

IO_STATUS_BLOCK

IRP

IoCallDriver

IoCopyCurrentIrpStackLocationToNext

IoGetCurrentIrpStackLocation

IoGetNextIrpStackLocation

IoSetCompletionRoutine

IoSetNextIrpStackLocation

IoSkipCurrentIrpStackLocation