estructura de IO_STACK_LOCATION (wdm.h)

La estructura de IO_STACK_LOCATION define una ubicación de pila de E /S, que es una entrada de la pila de E/S asociada a cada IRP. Cada ubicación de pila de E/S de un IRP tiene algunos miembros comunes y algunos miembros específicos del tipo de solicitud.

Sintaxis

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;

Miembros

MajorFunction

Código de función principal de IRP que indica el tipo de operación de E/S que se va a realizar.

MinorFunction

Código de subfunción para MajorFunction. El administrador de PnP, el administrador de energía, los controladores de sistema de archivos y los controladores de clase SCSI establecen este miembro para algunas solicitudes.

Flags

Valores específicos del tipo de solicitud usados casi exclusivamente por los controladores del sistema de archivos. Los controladores de dispositivos multimedia extraíbles comprueban si este miembro está establecido con SL_OVERRIDE_VERIFY_VOLUME para las solicitudes de lectura para determinar si se debe continuar con la operación de lectura incluso si las marcas del objeto de dispositivo se establecen con DO_VERIFY_VOLUME. Los controladores intermedios en capas sobre un controlador de dispositivo multimedia extraíble deben copiar este miembro en la ubicación de la pila de E/S del controlador inferior siguiente en todas las solicitudes de IRP_MJ_READ entrantes.

Para obtener documentación de otras SL_* marcas para IRP_MJ_CREATE, consulte IRP_MJ_CREATE (IFS).

Entre los valores de marca posibles se incluyen:

Marca Value Descripción
SL_KEY_SPECIFIED 0x01 Indica que contiene IO_STACK_LOCATION.Parameters.Read(OrWrite).Key qué copia de un sector determinado se debe leer cuando se habilita la redundancia. Hoy en día, esta marca solo se usa con IRP_MJ_READ operaciones.
SL_OVERRIDE_VERIFY_VOLUME 0x02 Esta marca se usa para determinar si se va a continuar con la operación de lectura incluso si las marcas del objeto de dispositivo se establecen con DO_VERIFY_VOLUME.
SL_WRITE_THROUGH 0x04 Esta marca informa al controlador de almacenamiento para establecer las marcas adecuadas para que el disco omita la memoria caché de escritura para forzar que el disco escriba en sus medios de almacenamiento persistentes. Esta marca es específica del dispositivo; no todas las unidades de disco admiten el paso de la memoria caché de disco.
SL_FT_SEQUENTIAL_WRITE 0x08 Reservado para uso del sistema.
SL_FORCE_DIRECT_WRITE 0x10 Esta marca permite que los controladores en modo kernel escriban en áreas de volumen en las que normalmente no pueden escribir debido al bloqueo de escritura directa en el sistema de archivos y en la pila de controladores de almacenamiento. El bloqueo de escritura directa ayuda a mejorar la seguridad. Esta marca se comprueba tanto en la capa del sistema de archivos como en la capa de pila de almacenamiento. Para obtener más información sobre el bloqueo de escritura directa, consulte Bloqueo de operaciones de escritura directa en volúmenes y discos.
SL_REALTIME_STREAM 0x20 Esta marca indica que la E/S es para las solicitudes de streaming en tiempo real a un controlador de clase CD-ROM. Esto indica al controlador que realice operaciones de lectura y escritura a una velocidad garantizada para el streaming en tiempo real. Esta marca solo es válida con medios ópticos.
SL_PERSISTENT_MEMORY_FIXED_MAPPING 0x20 La asignación de memoria persistente de los bytes de la solicitud de escritura no puede cambiar al controlar esta solicitud de escritura. Esta marca solo es válida con un dispositivo de memoria persistente y IRP_MJ_WRITE.

En el caso de los dispositivos de memoria persistente, una de las razones para reasignar (modificar la dirección física de un LBA determinado) en dispositivos de memoria persistente es proporcionar una atomicidad de nivel de sector eficaz. Si no se establece la marca, la reasignación se permite especialmente si da como resultado que el controlador proporcione atomicidad del sector. Los sistemas de archivos (o el solicitante) prefieren que un controlador de dispositivo de memoria persistente proporcione atomicidad del sector. Si se establece la marca, un controlador de memoria persistente no reasignará las direcciones físicas correspondientes a los LBA. Si eso significa que no se puede proporcionar atomicidad del sector, así que sea. Sin embargo, el controlador es más que bienvenido a proporcionar atomicidad del sector siempre y cuando no haya ninguna reasignación.

Control

Los controladores pueden comprobar este miembro para determinar si se establece con SL_PENDING_RETURNED y en qué condiciones se llama a CompletionRoutine . Los controladores tienen acceso de solo lectura a este miembro. Los controladores llaman a IoSetCompletionRoutine o IoSetCompletionRoutineEx para especificar estas condiciones.

Parameters

Unión que depende de los valores de código de función IRP principal y secundario contenidos en MajorFunction y MinorFunction. En la tabla siguiente se muestra qué IRP usan los miembros individuales de la unión Parameters .

Nombre del miembro IRP que usan este miembro
Crear IRP_MJ_CREATE
Lectura IRP_MJ_READ
Escritura IRP_MJ_WRITE
QueryFile IRP_MJ_QUERY_INFORMATION
SetFile IRP_MJ_SET_INFORMATION
QueryVolume IRP_MJ_QUERY_VOLUME_INFORMATION
DeviceIoControl IRP_MJ_DEVICE_CONTROL y 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 y 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 y IRP_MN_QUERY_POWER
StartDevice IRP_MN_START_DEVICE
WMI IRP secundarias de WMI
Otros IRP específicos del controlador

Para más información, consulte Códigos de función principales de IRP.

Parameters.Create

Parámetros de servicio del sistema para NtCreateFile.

Parameters.Create.SecurityContext

Parameters.Create.Options

Parameters.Create.FileAttributes

Parameters.Create.ShareAccess

Parameters.Create.EaLength

Parameters.CreatePipe

Parámetros del servicio del sistema fo NtCreateNamedPipeFile.

Parameters.CreatePipe.SecurityContext

Parameters.CreatePipe.Options

Parameters.CreatePipe.Reserved

Parameters.CreatePipe.ShareAccess

Parameters.CreatePipe.Parameters

Parameters.CreateMailslot

Parámetros de servicio del sistema para NtCreateMailslotFile.

Parameters.CreateMailslot.SecurityContext

Parameters.CreateMailslot.Options

Parameters.CreateMailslot.Reserved

Parameters.CreateMailslot.ShareAccess

Parameters.CreateMailslot.Parameters

Parameters.Read

Parámetros de servicio del sistema para NtReadFile.

Parameters.Read.Length

Parameters.Read.Key

Parameters.Read.Flags

Parameters.Read.ByteOffset

Parameters.Write

Parámetros de servicio del sistema para NtWriteFile.

Parameters.Write.Length

Parameters.Write.Key

Parameters.Write.Flags

Parameters.Write.ByteOffset

Parameters.QueryDirectory

Parámetros de servicio del sistema para NtQueryDirectoryFile.

Parameters.QueryDirectory.Length

Parameters.QueryDirectory.FileName

Parameters.QueryDirectory.FileInformationClass

Parameters.QueryDirectory.FileIndex

Parameters.NotifyDirectory

Parámetros de servicio del sistema para NtNotifyChangeDirectoryFile.

Parameters.NotifyDirectory.Length

Parameters.NotifyDirectory.CompletionFilter

Parameters.NotifyDirectoryEx

Parámetros de servicio del sistema para NtNotifyChangeDirectoryFileEx.

Parameters.NotifyDirectoryEx.Length

Parameters.NotifyDirectoryEx.CompletionFilter

Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass

Parameters.QueryFile

Parámetros de servicio del sistema para NtQueryInformationFile.

Parameters.QueryFile.Length

Parameters.QueryFile.FileInformationClass

Parameters.SetFile

Parámetros de servicio del 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 servicio del sistema para NtQueryEaFile.

Parameters.QueryEa.Length

Parameters.QueryEa.EaList

Parameters.QueryEa.EaListLength

Parameters.QueryEa.EaIndex

Parameters.SetEa

Parámetros de servicio del sistema para NtSetEaFile.

Parameters.SetEa.Length

Parameters.QueryVolume

Parámetros de servicio del sistema para NtQueryVolumeInformationFile.

Parameters.QueryVolume.Length

Parameters.QueryVolume.FsInformationClass

Parameters.SetVolume

Parámetros de servicio del sistema para NtSetVolumeInformationFile.

Parameters.SetVolume.Length

Parameters.SetVolume.FsInformationClass

Parameters.FileSystemControl

Parámetros de servicio del sistema para NtFsControlFile.

Parameters.FileSystemControl.OutputBufferLength

Parameters.FileSystemControl.InputBufferLength

Parameters.FileSystemControl.FsControlCode

Parameters.FileSystemControl.Type3InputBuffer

Parameters.LockControl

Parámetros de servicio del sistema para LockFile/NtUnlockFile.

Parameters.LockControl.Length

Parameters.LockControl.Key

Parameters.LockControl.ByteOffset

Parameters.DeviceIoControl

Parámetros de servicio del sistema para NtDeviceIoControlFile.

Parameters.DeviceIoControl.OutputBufferLength

Parameters.DeviceIoControl.InputBufferLength

Parameters.DeviceIoControl.IoControlCode

Parameters.DeviceIoControl.Type3InputBuffer

Parameters.QuerySecurity

Parámetros de servicio del sistema para NtQuerySecurityObject.

Parameters.QuerySecurity.SecurityInformation

Parameters.QuerySecurity.Length

Parameters.SetSecurity

Parámetros de servicio del sistema para NtSetSecurityObject.

Parameters.SetSecurity.SecurityInformation

Parameters.SetSecurity.SecurityDescriptor

Parameters.MountVolume

Parámetros de servicio del sistema para MountVolume.

Parameters.MountVolume.Vpb

Parameters.MountVolume.DeviceObject

Parameters.MountVolume.OutputBufferLength

Parameters.VerifyVolume

Parámetros de servicio del sistema para VerifyVolume.

Parameters.VerifyVolume.Vpb

Parameters.VerifyVolume.DeviceObject

Parameters.Scsi

Parámetros para Scsi con control de dispositivo interno.

Parameters.Scsi.Srb

Parameters.QueryQuota

Parámetros de servicio del sistema para NtQueryQuotaInformationFile.

Parameters.QueryQuota.Length

Parameters.QueryQuota.StartSid

Parameters.QueryQuota.SidList

Parameters.QueryQuota.SidListLength

Parameters.SetQuota

Parámetros de servicio del 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 de 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 y 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 y 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 IRP de WMI.

Parameters.WMI.ProviderId

Parameters.WMI.DataPath

Parameters.WMI.BufferSize

Parameters.WMI.Buffer

Parameters.Others

Parámetros para otras operaciones específicas del controlador.

Parameters.Others.Argument1

Parameters.Others.Argument2

Parameters.Others.Argument3

Parameters.Others.Argument4

DeviceObject

Puntero a la estructura de DEVICE_OBJECT creada por el controlador que representa el dispositivo físico, lógico o virtual de destino para el que este controlador va a controlar el IRP.

FileObject

Puntero a una estructura de FILE_OBJECT que representa el objeto de archivo, si existe, que está asociado con el puntero DeviceObject .

CompletionRoutine

Rutina de finalización que se invoca en función de las marcas del campo Control de esta estructura.

Context

Contexto definido por el controlador que se usa para almacenar la dirección del parámetro de contexto que se pasa a CompletionRoutine.

Comentarios

Para cada IRP, hay una estructura IO_STACK_LOCATION para cada controlador de una pila de controladores. Cada conjunto de ubicaciones de pila de E/S de IRP se anexa al IRP, siguiendo la estructura IRP .

Cada controlador de nivel superior es responsable de configurar la ubicación de la pila de E/S para el controlador inferior siguiente en cada IRP. Un controlador debe llamar a IoGetCurrentIrpStackLocation para obtener un puntero a su propia ubicación de pila para cada IRP. Los controladores de nivel superior pueden llamar a IoGetNextIrpStackLocation para obtener un puntero a la ubicación de pila del controlador inferior siguiente.

El controlador de nivel superior debe configurar el contenido de la ubicación de la pila antes de llamar a IoCallDriver para pasar un IRP al controlador de nivel inferior. Si el controlador pasará el IRP de entrada al siguiente controlador de nivel inferior, la rutina de distribución debe llamar a IoSkipCurrentIrpStackLocation o IoCopyCurrentIrpStackLocationToNext para configurar la ubicación de pila de E/S del controlador inferior siguiente.

Una llamada de controlador de nivel superior a IoCallDriver establece el miembro DeviceObject en el objeto de dispositivo de destino del controlador de nivel inferior siguiente, en la ubicación de la pila de E/S del controlador inferior. El administrador de E/S pasa cada rutina ioCompletion del controlador de nivel superior a un puntero a su propio objeto de dispositivo cuando se llama a la rutina ioCompletion al finalizar el IRP.

Si un controlador de nivel superior asigna IRP para realizar solicitudes propias, su rutina de IoCompletion se pasa un puntero DeviceObjectNULL si ese controlador no asigna una ubicación de pila para sí misma ni configura el puntero DeviceObject en su propia ubicación de pila del IRP recién asignado.

En algunos casos, un controlador de nivel superior en capas sobre un controlador de dispositivo de almacenamiento masivo es responsable de dividir las solicitudes de transferencia grandes para el controlador de dispositivo subyacente. En concreto, los controladores de clase SCSI deben comprobar parameters.Read.Length y Parameters.Write.Length, determinar si el tamaño de la transferencia solicitada supera las capacidades de transferencia del HBA subyacente y, si es así, dividir la longitud de la solicitud original en una secuencia de transferencias parciales para satisfacer el IRP original.

Requisitos

Requisito Valor
Header wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)

Consulte también

IO_STATUS_BLOCK

IRP

IoCallDriver

IoCopyCurrentIrpStackLocationToNext

IoGetCurrentIrpStackLocation

IoGetNextIrpStackLocation

IoSetCompletionRoutine

IoSetNextIrpStackLocation

IoSkipCurrentIrpStackLocation