Condividi tramite


struttura IO_STACK_LOCATION (wdm.h)

La struttura IO_STACK_LOCATION definisce un percorso dello stack di I/O , ovvero una voce nello stack di I/O associata a ogni IRP. Ogni posizione dello stack di I/O in un IRP include alcuni membri comuni e alcuni membri specifici del tipo di richiesta.

Sintassi

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;

Membri

MajorFunction

Il codice della funzione principale IRP che indica il tipo di operazione di I/O da eseguire.

MinorFunction

Codice di sottofunzione per MajorFunction. Il gestore PnP, il risparmio energia, i driver del file system e i driver di classe SCSI impostano questo membro per alcune richieste.

Flags

Valori specifici del tipo di richiesta usati quasi esclusivamente dai driver del file system. I driver di dispositivo rimovibili controllano se questo membro è impostato con SL_OVERRIDE_VERIFY_VOLUME per le richieste di lettura per determinare se continuare l'operazione di lettura anche se l'oggetto dispositivo Flag è impostato con DO_VERIFY_VOLUME. I driver intermedi sovrapposti a un driver di dispositivo multimediale rimovibile devono copiare questo membro nella posizione dello stack di I/O del driver inferiore successivo in tutte le richieste di IRP_MJ_READ in ingresso.

Per la documentazione di altri flag di SL_* per IRP_MJ_CREATE, vedere IRP_MJ_CREATE (IFS).

I valori dei flag possibili includono:

Bandiera Valore Descrizione
SL_KEY_SPECIFIED 0x01 Indica che il IO_STACK_LOCATION.Parameters.Read(OrWrite).Key contiene la copia di un determinato settore da leggere quando la ridondanza è abilitata. Attualmente questo flag viene usato solo con le operazioni di IRP_MJ_READ.
SL_OVERRIDE_VERIFY_VOLUME 0x02 Questo flag viene usato per determinare se continuare l'operazione di lettura anche se l' flag dell'oggetto dispositivo è impostato con DO_VERIFY_VOLUME.
SL_WRITE_THROUGH 0x04 Questo flag informa il driver di archiviazione di impostare flag appropriati in modo che il disco ignori la cache di scrittura per forzare la scrittura del disco nel supporto di archiviazione permanente. Questo flag è specifico del dispositivo; non tutte le unità disco supportano il bypass della cache su disco.
SL_FT_SEQUENTIAL_WRITE 0x08 Riservato per l'uso del sistema.
SL_FORCE_DIRECT_WRITE 0x10 Questo flag consente ai driver in modalità kernel di scrivere nelle aree del volume in cui normalmente non possono scrivere a causa del blocco della scrittura diretta nello stack di driver di archiviazione e del file system. Il blocco diretto della scrittura consente di migliorare la sicurezza. Questo flag viene controllato sia a livello di file system che di stack di archiviazione. Per altre informazioni sul blocco diretto della scrittura, vedere Blocco delle operazioni di scrittura diretta nei volumi e nei dischi.
SL_REALTIME_STREAM 0x20 Questo flag indica che l'I/O è per le richieste di streaming in tempo reale a un driver di classe CD-ROM. Questo hint indica al driver di eseguire operazioni di lettura/scrittura a una velocità garantita per lo streaming in tempo reale. Questo flag è valido solo con supporti ottici.
SL_PERSISTENT_MEMORY_FIXED_MAPPING 0x20 Il mapping di memoria persistente dei byte nella richiesta di scrittura non può cambiare durante la gestione di questa richiesta di scrittura. Questo flag è valido solo con un dispositivo di memoria persistente e IRP_MJ_WRITE.

Per i dispositivi di memoria persistente, uno dei motivi per cui viene eseguito il mapping (modifica dell'indirizzo fisico di un determinato LBA) nei dispositivi di memoria persistente consiste nel fornire un'atomicità efficiente a livello di settore. Se il flag non è impostato, il mapping è consentito soprattutto se il driver fornisce l'atomicità del settore. I file system (o il richiedente) preferiscono che un driver di dispositivo di memoria persistente fornisca l'atomicità del settore. Se il flag è impostato, un driver di memoria persistente non eseguirà nuovamente il mapping degli indirizzi fisici corrispondenti agli LBA. Se ciò significa che l'atomicità del settore non può essere fornita, quindi è vero. Tuttavia, il conducente è più che benvenuto a fornire l'atomicità del settore, purché non vi sia un nuovo mapping.

Control

I driver possono controllare questo membro per determinare se è impostato con SL_PENDING_RETURNED e in quali condizioni viene chiamato il CompletionRoutine . I driver hanno accesso in sola lettura a questo membro. I driver chiamano IoSetCompletionRoutine o IoSetCompletionRoutineEx per specificare queste condizioni.

Parameters

Unione che dipende dai valori di codice della funzione IRP principale e secondaria contenuti in MajorFunction e MinorFunction. Nella tabella seguente vengono illustrati i criteri di integrazione che usano i singoli membri dell'unione Parameters.

Nome membro IRP che usano questo membro
Creare IRP_MJ_CREATE
lettura IRP_MJ_READ
write 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
Power IRP_MN_SET_POWER e IRP_MN_QUERY_POWER
StartDevice IRP_MN_START_DEVICE
WMI irP secondari WMI
altri Runtime di integrazione specifici del driver

Per altre informazioni, vedere codici di funzione principali IRP.

Parameters.Create

Parametri del servizio di sistema per NtCreateFile.

Parameters.Create.SecurityContext

Parameters.Create.Options

Parameters.Create.FileAttributes

Parameters.Create.ShareAccess

Parameters.Create.EaLength

Parameters.CreatePipe

Parametri del servizio di sistema per NtCreateNamedPipeFile.

Parameters.CreatePipe.SecurityContext

Parameters.CreatePipe.Options

Parameters.CreatePipe.Reserved

Parameters.CreatePipe.ShareAccess

Parameters.CreatePipe.Parameters

Parameters.CreateMailslot

Parametri del servizio di sistema per NtCreateMailslotFile.

Parameters.CreateMailslot.SecurityContext

Parameters.CreateMailslot.Options

Parameters.CreateMailslot.Reserved

Parameters.CreateMailslot.ShareAccess

Parameters.CreateMailslot.Parameters

Parameters.Read

Parametri del servizio di sistema per NtReadFile.

Parameters.Read.Length

Parameters.Read.Key

Parameters.Read.Flags

Parameters.Read.ByteOffset

Parameters.Write

Parametri del servizio di sistema per NtWriteFile.

Parameters.Write.Length

Parameters.Write.Key

Parameters.Write.Flags

Parameters.Write.ByteOffset

Parameters.QueryDirectory

Parametri del servizio di sistema per NtQueryDirectoryFile.

Parameters.QueryDirectory.Length

Parameters.QueryDirectory.FileName

Parameters.QueryDirectory.FileInformationClass

Parameters.QueryDirectory.FileIndex

Parameters.NotifyDirectory

Parametri del servizio di sistema per NtNotifyChangeDirectoryFile.

Parameters.NotifyDirectory.Length

Parameters.NotifyDirectory.CompletionFilter

Parameters.NotifyDirectoryEx

Parametri del servizio di sistema per NtNotifyChangeDirectoryFileEx.

Parameters.NotifyDirectoryEx.Length

Parameters.NotifyDirectoryEx.CompletionFilter

Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass

Parameters.QueryFile

Parametri del servizio di sistema per NtQueryInformationFile.

Parameters.QueryFile.Length

Parameters.QueryFile.FileInformationClass

Parameters.SetFile

Parametri del servizio di sistema per NtSetInformationFile.

Parameters.SetFile.Length

Parameters.SetFile.FileInformationClass

Parameters.SetFile.FileObject

Parameters.SetFile.ReplaceIfExists

Parameters.SetFile.AdvanceOnly

Parameters.SetFile.ClusterCount

Parameters.SetFile.DeleteHandle

Parameters.QueryEa

Parametri del servizio di sistema per NtQueryEaFile.

Parameters.QueryEa.Length

Parameters.QueryEa.EaList

Parameters.QueryEa.EaListLength

Parameters.QueryEa.EaIndex

Parameters.SetEa

Parametri del servizio di sistema per NtSetEaFile.

Parameters.SetEa.Length

Parameters.QueryVolume

Parametri del servizio di sistema per NtQueryVolumeInformationFile.

Parameters.QueryVolume.Length

Parameters.QueryVolume.FsInformationClass

Parameters.SetVolume

Parametri del servizio di sistema per NtSetVolumeInformationFile.

Parameters.SetVolume.Length

Parameters.SetVolume.FsInformationClass

Parameters.FileSystemControl

Parametri del servizio di sistema per NtFsControlFile.

Parameters.FileSystemControl.OutputBufferLength

Parameters.FileSystemControl.InputBufferLength

Parameters.FileSystemControl.FsControlCode

Parameters.FileSystemControl.Type3InputBuffer

Parameters.LockControl

Parametri del servizio di sistema per LockFile/NtUnlockFile.

Parameters.LockControl.Length

Parameters.LockControl.Key

Parameters.LockControl.ByteOffset

Parameters.DeviceIoControl

Parametri del servizio di sistema per NtDeviceIoControlFile.

Parameters.DeviceIoControl.OutputBufferLength

Parameters.DeviceIoControl.InputBufferLength

Parameters.DeviceIoControl.IoControlCode

Parameters.DeviceIoControl.Type3InputBuffer

Parameters.QuerySecurity

Parametri del servizio di sistema per NtQuerySecurityObject.

Parameters.QuerySecurity.SecurityInformation

Parameters.QuerySecurity.Length

Parameters.SetSecurity

Parametri del servizio di sistema per NtSetSecurityObject.

Parameters.SetSecurity.SecurityInformation

Parameters.SetSecurity.SecurityDescriptor

Parameters.MountVolume

Parametri del servizio di sistema per MountVolume.

Parameters.MountVolume.Vpb

Parameters.MountVolume.DeviceObject

Parameters.MountVolume.OutputBufferLength

Parameters.VerifyVolume

Parametri del servizio di sistema per VerifyVolume.

Parameters.VerifyVolume.Vpb

Parameters.VerifyVolume.DeviceObject

Parameters.Scsi

Parametri per Scsi con controllo del dispositivo interno.

Parameters.Scsi.Srb

Parameters.QueryQuota

Parametri del servizio di sistema per NtQueryQuotaInformationFile.

Parameters.QueryQuota.Length

Parameters.QueryQuota.StartSid

Parameters.QueryQuota.SidList

Parameters.QueryQuota.SidListLength

Parameters.SetQuota

Parametri del servizio di sistema per NtSetQuotaInformationFile.

Parameters.SetQuota.Length

Parameters.QueryDeviceRelations

Parametri per IRP_MN_QUERY_DEVICE_RELATIONS.

Parameters.QueryDeviceRelations.Type

Parameters.QueryInterface

Parametri per IRP_MN_QUERY_INTERFACE.

Parameters.QueryInterface.InterfaceType

Parameters.QueryInterface.Size

Parameters.QueryInterface.Version

Parameters.QueryInterface.Interface

Parameters.QueryInterface.InterfaceSpecificData

Parameters.DeviceCapabilities

Parametri per IRP_MN_QUERY_CAPABILITIES.

Parameters.DeviceCapabilities.Capabilities

Parameters.FilterResourceRequirements

Parametri per IRP_MN_FILTER_RESOURCE_REQUIREMENTS.

Parameters.FilterResourceRequirements.IoResourceRequirementList

Parameters.ReadWriteConfig

Parametri per IRP_MN_READ_CONFIG e IRP_MN_WRITE_CONFIG.

Parameters.ReadWriteConfig.WhichSpace

Parameters.ReadWriteConfig.Buffer

Parameters.ReadWriteConfig.Offset

Parameters.ReadWriteConfig.Length

Parameters.SetLock

Parametri per IRP_MN_SET_LOCK.

Parameters.SetLock.Lock

Parameters.QueryId

Parametri per IRP_MN_QUERY_ID.

Parameters.QueryId.IdType

Parameters.QueryDeviceText

Parametri per IRP_MN_QUERY_DEVICE_TEXT.

Parameters.QueryDeviceText.DeviceTextType

Parameters.QueryDeviceText.LocaleId

Parameters.UsageNotification

Parametri per IRP_MN_DEVICE_USAGE_NOTIFICATION.

Parameters.UsageNotification.InPath

Parameters.UsageNotification.Reserved[3]

Parameters.UsageNotification.Type

Parameters.WaitWake

Parametri per IRP_MN_WAIT_WAKE.

Parameters.WaitWake.PowerState

Parameters.PowerSequence

Parametro per IRP_MN_POWER_SEQUENCE.

Parameters.PowerSequence.PowerSequence

Parameters.Power

Parametri per 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

Parametri per StartDevice.

Parameters.StartDevice.AllocatedResources

Parameters.StartDevice.AllocatedResourcesTranslated

Parameters.WMI

Parametri per i runtime di integrazione WMI.

Parameters.WMI.ProviderId

Parameters.WMI.DataPath

Parameters.WMI.BufferSize

Parameters.WMI.Buffer

Parameters.Others

Parametri per altre operazioni specifiche del driver.

Parameters.Others.Argument1

Parameters.Others.Argument2

Parameters.Others.Argument3

Parameters.Others.Argument4

DeviceObject

Puntatore alla struttura di DEVICE_OBJECT creata dal driver che rappresenta il dispositivo fisico, logico o virtuale di destinazione per il quale questo driver deve gestire l'IRP.

FileObject

Puntatore a una struttura FILE_OBJECT che rappresenta l'oggetto file, se presente, associato al puntatore DeviceObject .

CompletionRoutine

Routine di completamento richiamata a seconda dei flag nel campo Control di questa struttura.

Context

Contesto definito dal driver usato per archiviare l'indirizzo del parametro di contesto passato a CompletionRoutine.

Osservazioni

Per ogni IRP è presente una struttura IO_STACK_LOCATION per ogni driver in uno stack di driver . Ogni set di percorsi dello stack I/O di ogni IRP viene aggiunto all'IRP, seguendo la struttura di IRP .

Ogni driver di livello superiore è responsabile della configurazione della posizione dello stack di I/O per il driver inferiore successivo in ogni IRP. Un driver deve chiamare IoGetCurrentIrpStackLocation per ottenere un puntatore alla propria posizione dello stack per ogni IRP. I driver di livello superiore possono chiamare IoGetNextIrpStackLocation per ottenere un puntatore alla posizione dello stack del driver inferiore successivo.

Il driver di livello superiore deve configurare il contenuto della posizione dello stack prima di chiamare IoCallDriver per passare un IRP al driver di livello inferiore. Se il driver passerà l'IRP di input al driver di livello inferiore successivo, la routine dispatch deve chiamare IoSkipCurrentIrpStackLocation o IoCopyCurrentIrpStackLocationToNext per configurare la posizione dello stack di I/O del driver inferiore successivo.

Una chiamata di driver di livello superiore a IoCallDriver imposta il membro DeviceObject sull'oggetto dispositivo di destinazione del driver di livello inferiore successivo, nella posizione dello stack di I/O del driver inferiore. Gestione I/O passa ogni driver di livello superiore IoCompletion routine un puntatore al proprio oggetto dispositivo quando viene chiamata la routine IoCompletion al completamento dell'IRP.

Se un driver di livello superiore alloca i runtime di integrazione per effettuare richieste proprie, la routine IoCompletion viene passata una routine NULLDeviceObject se tale driver non alloca né alloca una posizione dello stack per se stessa né configura il puntatore DeviceObject nella propria posizione dello stack dell'IRP appena allocato.

In alcuni casi, un driver di livello superiore su un driver di dispositivo di archiviazione di massa è responsabile della suddivisione di richieste di trasferimento di grandi dimensioni per il driver di dispositivo sottostante. In particolare, i driver di classe SCSI devono controllare il Parameters.Read.Length e Parameters.Write.Length, determinare se le dimensioni del trasferimento richiesto superano le funzionalità di trasferimento dell'HBA sottostante e, in tal caso, suddividere la Lunghezza della richiesta originale in una sequenza di trasferimenti parziali per soddisfare l'IRP originale.

Fabbisogno

Requisito Valore
intestazione wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)

Vedere anche

IO_STATUS_BLOCK

IRP

IoCallDriver

IoCopyCurrentIrpStackLocationToNext

IoGetCurrentIrpStackLocation

IoGetNextIrpStackLocation

IoSetCompletionRoutine

IoSetNextIrpStackLocation

IoSkipCurrentIrpStackLocation