estrutura IO_STACK_LOCATION (wdm.h)

A estrutura IO_STACK_LOCATION define um local de pilha de E/S, que é uma entrada na pilha de E/S associada a cada IRP. Cada local de pilha de E/S em um IRP tem alguns membros comuns e alguns membros específicos do tipo de solicitação.

Sintaxe

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;

Membros

MajorFunction

O código de função principal do IRP que indica o tipo de operação de E/S a ser executada.

MinorFunction

Um código de subfunção para MajorFunction. O gerenciador PnP, o power manager, os drivers do sistema de arquivos e os drivers de classe SCSI definem esse membro para algumas solicitações.

Flags

Valores específicos do tipo de solicitação usados quase exclusivamente por drivers do sistema de arquivos. Os drivers de dispositivo de mídia removível marcar se esse membro está definido com SL_OVERRIDE_VERIFY_VOLUME para solicitações de leitura para determinar se deseja continuar a operação de leitura mesmo se os Sinalizadores do objeto do dispositivo estiverem definidos com DO_VERIFY_VOLUME. Os drivers intermediários colocados em camadas sobre um driver de dispositivo de mídia removível devem copiar esse membro para o local da pilha de E/S do driver mais baixo em todas as solicitações de IRP_MJ_READ de entrada.

Para obter a documentação de outros SL_* sinalizadores para IRP_MJ_CREATE, consulte IRP_MJ_CREATE (IFS).

Os valores de sinalizador possíveis incluem:

Sinalizador Valor Descrição
SL_KEY_SPECIFIED 0x01 Indica que o IO_STACK_LOCATION.Parameters.Read(OrWrite).Key contém qual cópia de um determinado setor deve ser lida quando a redundância está habilitada. Hoje esse sinalizador é usado apenas com operações de IRP_MJ_READ.
SL_OVERRIDE_VERIFY_VOLUME 0x02 Esse sinalizador é usado para determinar se deseja continuar a operação de leitura mesmo se os Sinalizadores do objeto do dispositivo estiverem definidos com DO_VERIFY_VOLUME.
SL_WRITE_THROUGH 0x04 Esse sinalizador informa ao driver de armazenamento para definir sinalizadores apropriados para que o disco ignore o cache de gravação para forçar o disco a gravar em sua mídia de armazenamento persistente. Esse sinalizador é específico do dispositivo; nem todas as unidades de disco dão suporte a ignorar o cache de disco.
SL_FT_SEQUENTIAL_WRITE 0x08 Reservado para uso do sistema.
SL_FORCE_DIRECT_WRITE 0x10 Esse sinalizador permite que os drivers do modo kernel sejam gravados em áreas de volume em que normalmente não podem gravar devido ao bloqueio de gravação direta no sistema de arquivos e na pilha do driver de armazenamento. O bloqueio de gravação direta ajuda a melhorar a segurança. Esse sinalizador é verificado na camada do sistema de arquivos e na camada de pilha de armazenamento. Para obter mais informações sobre o bloqueio direto de gravação, consulte Bloqueando operações de gravação direta em volumes e discos.
SL_REALTIME_STREAM 0x20 Esse sinalizador indica que a E/S é para solicitações de streaming em tempo real para um driver de classe CD-ROM. Isso sugere que o driver execute operações DE LEITURA/GRAVAção em uma velocidade garantida para streaming em tempo real. Esse sinalizador é válido apenas com mídia óptica.
SL_PERSISTENT_MEMORY_FIXED_MAPPING 0x20 O mapeamento de memória persistente dos bytes na solicitação de gravação não pode ser alterado durante o tratamento dessa solicitação de gravação. Esse sinalizador é válido apenas com um dispositivo de memória persistente e IRP_MJ_WRITE.

Para dispositivos de memória persistente, um dos motivos para remapear (modificar o endereço físico de um determinado LBA) em dispositivos de memória persistente é fornecer atomicidade eficiente no nível do setor. Se o sinalizador não estiver definido, a remapeamento será permitida especialmente se resultar no driver que fornece atomicidade do setor. Os sistemas de arquivos (ou o solicitante) preferem que um driver de dispositivo de memória persistente forneça atomicidade do setor. Se o sinalizador estiver definido, um driver de memória persistente não deverá remapear os endereços físicos correspondentes aos LBAs. Se isso significa que a atomicidade do setor não pode ser fornecida, que assim seja. No entanto, o driver é mais do que bem-vindo para fornecer atomicidade do setor, desde que não haja remapeamento.

Control

Os drivers podem marcar esse membro para determinar se ele está definido com SL_PENDING_RETURNED e em quais condições a CompletionRoutine é chamada. Os drivers têm acesso somente leitura a esse membro. Os drivers chamam IoSetCompletionRoutine ou IoSetCompletionRoutineEx para especificar essas condições.

Parameters

Uma união que depende dos valores de código de função IRP principais e secundários contidos em MajorFunction e MinorFunction. A tabela a seguir mostra quais IRPs usam os membros individuais da união Parâmetros .

Nome do membro IRPs que usam esse membro
Criar IRP_MJ_CREATE
Leitura IRP_MJ_READ
Gravar IRP_MJ_WRITE
QueryFile IRP_MJ_QUERY_INFORMATION
SetFile IRP_MJ_SET_INFORMATION
QueryVolume IRP_MJ_QUERY_VOLUME_INFORMATION
DeviceIoControl IRP_MJ_DEVICE_CONTROL e 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 e 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
Energia IRP_MN_SET_POWER e IRP_MN_QUERY_POWER
StartDevice IRP_MN_START_DEVICE
WMI IRPs secundários do WMI
Others IRPs específicos do driver

Para obter mais informações, consulte Códigos de função principais do IRP.

Parameters.Create

Parâmetros de serviço do sistema para NtCreateFile.

Parameters.Create.SecurityContext

Parameters.Create.Options

Parameters.Create.FileAttributes

Parameters.Create.ShareAccess

Parameters.Create.EaLength

Parameters.CreatePipe

Parâmetros de serviço do sistema para NtCreateNamedPipeFile.

Parameters.CreatePipe.SecurityContext

Parameters.CreatePipe.Options

Parameters.CreatePipe.Reserved

Parameters.CreatePipe.ShareAccess

Parameters.CreatePipe.Parameters

Parameters.CreateMailslot

Parâmetros de serviço do sistema para NtCreateMailslotFile.

Parameters.CreateMailslot.SecurityContext

Parameters.CreateMailslot.Options

Parameters.CreateMailslot.Reserved

Parameters.CreateMailslot.ShareAccess

Parameters.CreateMailslot.Parameters

Parameters.Read

Parâmetros de serviço do sistema para NtReadFile.

Parameters.Read.Length

Parameters.Read.Key

Parameters.Read.Flags

Parameters.Read.ByteOffset

Parameters.Write

Parâmetros de serviço do sistema para NtWriteFile.

Parameters.Write.Length

Parameters.Write.Key

Parameters.Write.Flags

Parameters.Write.ByteOffset

Parameters.QueryDirectory

Parâmetros de serviço do sistema para NtQueryDirectoryFile.

Parameters.QueryDirectory.Length

Parameters.QueryDirectory.FileName

Parameters.QueryDirectory.FileInformationClass

Parameters.QueryDirectory.FileIndex

Parameters.NotifyDirectory

Parâmetros de serviço do sistema para NtNotifyChangeDirectoryFile.

Parameters.NotifyDirectory.Length

Parameters.NotifyDirectory.CompletionFilter

Parameters.NotifyDirectoryEx

Parâmetros de serviço do sistema para NtNotifyChangeDirectoryFileEx.

Parameters.NotifyDirectoryEx.Length

Parameters.NotifyDirectoryEx.CompletionFilter

Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass

Parameters.QueryFile

Parâmetros de serviço do sistema para NtQueryInformationFile.

Parameters.QueryFile.Length

Parameters.QueryFile.FileInformationClass

Parameters.SetFile

Parâmetros de serviço do sistema para NtSetInformationFile.

Parameters.SetFile.Length

Parameters.SetFile.FileInformationClass

Parameters.SetFile.FileObject

Parameters.SetFile.ReplaceIfExists

Parameters.SetFile.AdvanceOnly

Parameters.SetFile.ClusterCount

Parameters.SetFile.DeleteHandle

Parameters.QueryEa

Parâmetros de serviço do sistema para NtQueryEaFile.

Parameters.QueryEa.Length

Parameters.QueryEa.EaList

Parameters.QueryEa.EaListLength

Parameters.QueryEa.EaIndex

Parameters.SetEa

Parâmetros de serviço do sistema para NtSetEaFile.

Parameters.SetEa.Length

Parameters.QueryVolume

Parâmetros de serviço do sistema para NtQueryVolumeInformationFile.

Parameters.QueryVolume.Length

Parameters.QueryVolume.FsInformationClass

Parameters.SetVolume

Parâmetros de serviço do sistema para NtSetVolumeInformationFile.

Parameters.SetVolume.Length

Parameters.SetVolume.FsInformationClass

Parameters.FileSystemControl

Parâmetros de serviço do sistema para NtFsControlFile.

Parameters.FileSystemControl.OutputBufferLength

Parameters.FileSystemControl.InputBufferLength

Parameters.FileSystemControl.FsControlCode

Parameters.FileSystemControl.Type3InputBuffer

Parameters.LockControl

Parâmetros de serviço do sistema para LockFile/NtUnlockFile.

Parameters.LockControl.Length

Parameters.LockControl.Key

Parameters.LockControl.ByteOffset

Parameters.DeviceIoControl

Parâmetros de serviço do sistema para NtDeviceIoControlFile.

Parameters.DeviceIoControl.OutputBufferLength

Parameters.DeviceIoControl.InputBufferLength

Parameters.DeviceIoControl.IoControlCode

Parameters.DeviceIoControl.Type3InputBuffer

Parameters.QuerySecurity

Parâmetros de serviço do sistema para NtQuerySecurityObject.

Parameters.QuerySecurity.SecurityInformation

Parameters.QuerySecurity.Length

Parameters.SetSecurity

Parâmetros de serviço do sistema para NtSetSecurityObject.

Parameters.SetSecurity.SecurityInformation

Parameters.SetSecurity.SecurityDescriptor

Parameters.MountVolume

Parâmetros de serviço do sistema para MountVolume.

Parameters.MountVolume.Vpb

Parameters.MountVolume.DeviceObject

Parameters.MountVolume.OutputBufferLength

Parameters.VerifyVolume

Parâmetros de serviço do sistema para VerifyVolume.

Parameters.VerifyVolume.Vpb

Parameters.VerifyVolume.DeviceObject

Parameters.Scsi

Parâmetros para Scsi com controle de dispositivo interno.

Parameters.Scsi.Srb

Parameters.QueryQuota

Parâmetros de serviço do sistema para NtQueryQuotaInformationFile.

Parameters.QueryQuota.Length

Parameters.QueryQuota.StartSid

Parameters.QueryQuota.SidList

Parameters.QueryQuota.SidListLength

Parameters.SetQuota

Parâmetros de serviço do sistema para NtSetQuotaInformationFile.

Parameters.SetQuota.Length

Parameters.QueryDeviceRelations

Parâmetros para IRP_MN_QUERY_DEVICE_RELATIONS.

Parameters.QueryDeviceRelations.Type

Parameters.QueryInterface

Parâmetros para IRP_MN_QUERY_INTERFACE.

Parameters.QueryInterface.InterfaceType

Parameters.QueryInterface.Size

Parameters.QueryInterface.Version

Parameters.QueryInterface.Interface

Parameters.QueryInterface.InterfaceSpecificData

Parameters.DeviceCapabilities

Parâmetros para IRP_MN_QUERY_CAPABILITIES.

Parameters.DeviceCapabilities.Capabilities

Parameters.FilterResourceRequirements

Parâmetros para IRP_MN_FILTER_RESOURCE_REQUIREMENTS.

Parameters.FilterResourceRequirements.IoResourceRequirementList

Parameters.ReadWriteConfig

Parâmetros para IRP_MN_READ_CONFIG e IRP_MN_WRITE_CONFIG.

Parameters.ReadWriteConfig.WhichSpace

Parameters.ReadWriteConfig.Buffer

Parameters.ReadWriteConfig.Offset

Parameters.ReadWriteConfig.Length

Parameters.SetLock

Parâmetros para IRP_MN_SET_LOCK.

Parameters.SetLock.Lock

Parameters.QueryId

Parâmetros para IRP_MN_QUERY_ID.

Parameters.QueryId.IdType

Parameters.QueryDeviceText

Parâmetros para IRP_MN_QUERY_DEVICE_TEXT.

Parameters.QueryDeviceText.DeviceTextType

Parameters.QueryDeviceText.LocaleId

Parameters.UsageNotification

Parâmetros para IRP_MN_DEVICE_USAGE_NOTIFICATION.

Parameters.UsageNotification.InPath

Parameters.UsageNotification.Reserved[3]

Parameters.UsageNotification.Type

Parameters.WaitWake

Parâmetros para IRP_MN_WAIT_WAKE.

Parameters.WaitWake.PowerState

Parameters.PowerSequence

Parâmetro para IRP_MN_POWER_SEQUENCE.

Parameters.PowerSequence.PowerSequence

Parameters.Power

Parâmetros para IRP_MN_SET_POWER e IRP_MN_QUERY_POWER.

Parameters.Power.SystemContext

Parameters.Power.SystemPowerStateContext

Parameters.Power.Type

Parameters.Power.State

Parameters.Power.ShutdownType

Parameters.StartDevice

Parâmetros para StartDevice.

Parameters.StartDevice.AllocatedResources

Parameters.StartDevice.AllocatedResourcesTranslated

Parameters.WMI

Parâmetros para IRPs WMI.

Parameters.WMI.ProviderId

Parameters.WMI.DataPath

Parameters.WMI.BufferSize

Parameters.WMI.Buffer

Parameters.Others

Parâmetros para outras operações específicas do driver.

Parameters.Others.Argument1

Parameters.Others.Argument2

Parameters.Others.Argument3

Parameters.Others.Argument4

DeviceObject

Um ponteiro para a estrutura de DEVICE_OBJECT criada pelo driver que representa o dispositivo físico, lógico ou virtual de destino para o qual esse driver deve lidar com o IRP.

FileObject

Um ponteiro para uma estrutura FILE_OBJECT que representa o objeto de arquivo, se houver, associado ao ponteiro DeviceObject .

CompletionRoutine

A rotina de conclusão que é invocada dependendo dos sinalizadores no campo Controle dessa estrutura.

Context

Contexto definido pelo driver que é usado para armazenar o endereço do parâmetro de contexto que é passado para a CompletionRoutine.

Comentários

Para cada IRP, há uma estrutura IO_STACK_LOCATION para cada driver em uma pilha de driver. O conjunto de locais de pilha de E/S de cada IRP é acrescentado ao IRP, seguindo a estrutura IRP .

Cada driver de nível superior é responsável por configurar o local da pilha de E/S para o driver mais baixo em cada IRP. Um driver deve chamar IoGetCurrentIrpStackLocation para obter um ponteiro para seu próprio local de pilha para cada IRP. Drivers de nível superior podem chamar IoGetNextIrpStackLocation para obter um ponteiro para o local de pilha do próximo driver inferior.

O driver de nível superior deve configurar o conteúdo do local da pilha antes de chamar IoCallDriver para passar um IRP para o driver de nível inferior. Se o driver passar o IRP de entrada para o próximo driver de nível inferior, a rotina de expedição deverá chamar IoSkipCurrentIrpStackLocation ou IoCopyCurrentIrpStackLocationToNext para configurar o local da pilha de E/S do driver mais baixo.

Uma chamada de driver de nível superior para IoCallDriver define o membro DeviceObject como o objeto de dispositivo de destino do próximo driver de nível inferior, no local da pilha de E/S do driver inferior. O gerenciador de E/S passa a rotina IoCompletion de cada driver de nível superior um ponteiro para seu próprio objeto de dispositivo quando a rotina IoCompletion é chamada após a conclusão do IRP.

Se um driver de nível superior alocar IRPs para fazer solicitações próprias, sua rotina IoCompletion será passada um ponteiro DeviceObjectNULL se esse driver não alocar um local de pilha para si mesmo nem configurar o ponteiro DeviceObject em seu próprio local de pilha do IRP recém-alocado.

Em alguns casos, um driver de nível superior em camadas sobre um driver de dispositivo de armazenamento em massa é responsável por dividir grandes solicitações de transferência para o driver de dispositivo subjacente. Em particular, os drivers de classe SCSI devem marcar Parameters.Read.Length e Parameters.Write.Length, determinar se o tamanho da transferência solicitada excede os recursos de transferência do HBA subjacente e, nesse caso, dividir o Comprimento da solicitação original em uma sequência de transferências parciais para atender ao IRP original.

Requisitos

Requisito Valor
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)

Confira também

IO_STATUS_BLOCK

IRP

IoCallDriver

IoCopyCurrentIrpStackLocationToNext

IoGetCurrentIrpStackLocation

IoGetNextIrpStackLocation

IoSetCompletionRoutine

IoSetNextIrpStackLocation

IoSkipCurrentIrpStackLocation