Partager via


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 d’un IRP contient certains membres courants et certains 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

Le code de fonction principal 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 vérifient si ce membre est défini avec SL_OVERRIDE_VERIFY_VOLUME pour les demandes de lecture afin de déterminer s’il faut poursuivre l’opération de lecture même si les indicateurs de de l’objet de périphérique sont définis avec DO_VERIFY_VOLUME. Les pilotes intermédiaires superposés sur un pilote de périphérique de support amovible doivent copier ce membre dans l’emplacement de la 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 indicateurs de pour IRP_MJ_CREATE, consultezIRP_MJ_CREATE (IFS).

Les valeurs d’indicateur possibles sont les suivantes :

Drapeau Valeur Description
SL_KEY_SPECIFIED 0x01 Indique que le IO_STACK_LOCATION.Parameters.Read(OrWrite).Key contient la copie d’un secteur donné à lire lorsque la redondance est activée. Aujourd’hui, cet indicateur est utilisé uniquement avec les opérations de IRP_MJ_READ.
SL_OVERRIDE_VERIFY_VOLUME 0x02 Cet indicateur est utilisé pour déterminer s’il faut poursuivre l’opération de lecture même si les indicateurs de de l’objet appareil sont définis avec DO_VERIFY_VOLUME.
SL_WRITE_THROUGH 0x04 Cet indicateur informe le pilote de stockage de définir les indicateurs appropriés afin que le disque contourne le cache d’écriture afin de forcer l’écriture du disque dans 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é à l’utilisation du système.
SL_FORCE_DIRECT_WRITE 0x10 Cet indicateur permet aux pilotes en mode noyau d’écrire dans des zones de volume auxquelles 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 système de fichiers et de la couche de pile de stockage. Pour plus d’informations sur le blocage d’écriture directe, consultez Blocage des opérations d’écriture directe sur des volumes et des disques.
SL_REALTIME_STREAM 0x20 Cet indicateur indique que l’E/S est destinée 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 READ/WRITE à une vitesse garantie pour le streaming en temps réel. Cet indicateur est valide uniquement avec un support optique.
SL_PERSISTENT_MEMORY_FIXED_MAPPING 0x20 Le mappage de mémoire persistante des octets de la demande d’écriture ne peut pas changer lors de la gestion de cette demande d’écriture. Cet indicateur est valide uniquement avec un appareil de mémoire persistante et IRP_MJ_WRITE.

Pour les périphériques de mémoire persistante, l’une des raisons de la remappation (modification de l’adresse physique d’un LBA donné) sur les appareils de mémoire persistante consiste à fournir une atomicité de niveau secteur efficace. Si l’indicateur n’est pas défini, le remapping est autorisé en particulier s’il aboutit à l’atomicité du secteur. Les systèmes de fichiers (ou le demandeur) préfèrent qu’un pilote de périphérique de mémoire persistante fournit l’atomicité du secteur. Si l’indicateur est défini, un pilote de mémoire persistante ne remappe pas les adresses physiques correspondant aux LBA. Si cela signifie que l’atomicité du secteur ne peut pas être fournie, c’est-à-dire. Toutefois, le pilote est plus que bienvenu pour fournir l’atomicité du secteur tant qu’il n’y a pas de remapping.

Control

Les pilotes peuvent vérifier ce membre pour déterminer s’il est défini avec SL_PENDING_RETURNED et dans quelles conditions la CompletionRoutine est appelée. 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 de fonction IRP principales et mineures contenues dans MajorFunction et MinorFunction. Le tableau suivant indique quels irps utilisent les membres individuels des paramètres union.

Nom du membre IRPs qui utilisent ce membre
Créer IRP_MJ_CREATE
lecture 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 adresses IP virtuelles mineures 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 fo 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 de IRP_MN_QUERY_DEVICE_RELATIONS.

Parameters.QueryDeviceRelations.Type

Parameters.QueryInterface

Paramètres de IRP_MN_QUERY_INTERFACE.

Parameters.QueryInterface.InterfaceType

Parameters.QueryInterface.Size

Parameters.QueryInterface.Version

Parameters.QueryInterface.Interface

Parameters.QueryInterface.InterfaceSpecificData

Parameters.DeviceCapabilities

Paramètres de IRP_MN_QUERY_CAPABILITIES.

Parameters.DeviceCapabilities.Capabilities

Parameters.FilterResourceRequirements

Paramètres de IRP_MN_FILTER_RESOURCE_REQUIREMENTS.

Parameters.FilterResourceRequirements.IoResourceRequirementList

Parameters.ReadWriteConfig

Paramètres de IRP_MN_READ_CONFIG et de IRP_MN_WRITE_CONFIG.

Parameters.ReadWriteConfig.WhichSpace

Parameters.ReadWriteConfig.Buffer

Parameters.ReadWriteConfig.Offset

Parameters.ReadWriteConfig.Length

Parameters.SetLock

Paramètres de IRP_MN_SET_LOCK.

Parameters.SetLock.Lock

Parameters.QueryId

Paramètres de IRP_MN_QUERY_ID.

Parameters.QueryId.IdType

Parameters.QueryDeviceText

Paramètres de IRP_MN_QUERY_DEVICE_TEXT.

Parameters.QueryDeviceText.DeviceTextType

Parameters.QueryDeviceText.LocaleId

Parameters.UsageNotification

Paramètres de IRP_MN_DEVICE_USAGE_NOTIFICATION.

Parameters.UsageNotification.InPath

Parameters.UsageNotification.Reserved[3]

Parameters.UsageNotification.Type

Parameters.WaitWake

Paramètres de IRP_MN_WAIT_WAKE.

Parameters.WaitWake.PowerState

Parameters.PowerSequence

Paramètre pour IRP_MN_POWER_SEQUENCE.

Parameters.PowerSequence.PowerSequence

Parameters.Power

Paramètres de IRP_MN_SET_POWER et de IRP_MN_QUERY_POWER.

Parameters.Power.SystemContext

Parameters.Power.SystemPowerStateContext

Parameters.Power.Type

Parameters.Power.State

Parameters.Power.ShutdownType

Parameters.StartDevice

Paramètres de StartDevice.

Parameters.StartDevice.AllocatedResources

Parameters.StartDevice.AllocatedResourcesTranslated

Parameters.WMI

Paramètres des adresses IP virtuelles WMI.

Parameters.WMI.ProviderId

Parameters.WMI.DataPath

Parameters.WMI.BufferSize

Parameters.WMI.Buffer

Parameters.Others

Paramètres 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 de DEVICE_OBJECT créée par le pilote représentant le périphérique 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 de fichier, le cas échéant, associé à pointeur DeviceObject.

CompletionRoutine

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

Context

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

Remarques

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

Chaque pilote de niveau supérieur est chargé de configurer 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 la 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 un IRP au pilote de niveau inférieur. Si le pilote passe l’IRP d’entrée au pilote de niveau inférieur suivant, la routine de distribution doit appeler IoSkipCurrentIrpStackLocation ou IoCopyCurrentIrpStackLocationToNext pour configurer l’emplacement de la pile d’E/S du pilote inférieur suivant.

L’appel d’un pilote de niveau supérieur à IoCallDriver définit le membre DeviceObject à l’objet périphérique 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 passe chaque IoCompletion de niveau supérieur routine 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 irPs pour effectuer des demandes de lui-même, sa routine IoCompletion est passée un pointeur NULLDeviceObject 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 en couches sur un pilote de périphérique de stockage en 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 vérifier les Parameters.Read.Length et Parameters.Write.Length, déterminer si la taille du transfert demandé dépasse les fonctionnalités de transfert du HBA sous-jacentes et, le cas échéant, fractionner la longueur de la requête d’origine en une séquence de transferts partiels pour satisfaire les capacités de transfert d’origine.

Exigences

Exigence Valeur
d’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