次の方法で共有


IO_STACK_LOCATION 構造体 (wdm.h)

IO_STACK_LOCATION構造体は、I/O スタックの場所を定義します。これは、各 IRP に関連付けられている I/O スタック内のエントリです。 IRP の各 I/O スタックの場所には、一部の共通メンバーと、要求の種類固有のメンバーがあります。

構文

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;

メンバー

MajorFunction

実行する I/O 操作の種類を示す IRP の主要な関数コード

MinorFunction

MajorFunction のサブ関数コード。 PnP マネージャー、電源マネージャー、ファイル システム ドライバー、SCSI クラス ドライバーは、一部の要求に対してこのメンバーを設定します。

Flags

要求の種類固有の値は、ファイル システム ドライバーによってほとんど排他的に使用されます。 リムーバブル メディア デバイス ドライバーは、デバイス オブジェクトの Flags が DO_VERIFY_VOLUME で設定されている場合でも読み取り操作を続行するかどうかを判断するために、読み取り要求に対してこのメンバーがSL_OVERRIDE_VERIFY_VOLUMEで設定されているかどうかをチェックします。 リムーバブル メディア デバイス ドライバー上に階層化された中間ドライバーは、すべての受信IRP_MJ_READ要求で、次の下位ドライバーの I/O スタックの場所にこのメンバー コピーする必要があります。

IRP_MJ_CREATEのその他 SL_* のフラグのドキュメントについては、「 IRP_MJ_CREATE (IFS)」を参照してください。

使用可能なフラグ値は次のとおりです。

フラグ 説明
SL_KEY_SPECIFIED 0x01 冗長性が有効になっている場合に IO_STACK_LOCATION.Parameters.Read(OrWrite).Key 読み取る必要がある特定のセクターのコピーが が 含まれていることを示します。 現在、このフラグはIRP_MJ_READ操作でのみ使用されます。
SL_OVERRIDE_VERIFY_VOLUME 0x02 このフラグは、デバイス オブジェクトの Flags が DO_VERIFY_VOLUME で設定されている場合でも、読み取り操作を続行するかどうかを判断するために使用されます。
SL_WRITE_THROUGH 0x04 このフラグは、ディスクが永続的なストレージ メディアに書き込みを強制的に行うために、ディスクが書き込みキャッシュをバイパスするように、適切なフラグを設定するようにストレージ ドライバーに通知します。 このフラグはデバイス固有です。すべてのディスク ドライブでディスク キャッシュのバイパスがサポートされているわけではありません。
SL_FT_SEQUENTIAL_WRITE 0x08 システムで使用するために予約されています。
SL_FORCE_DIRECT_WRITE 0x10 このフラグを使用すると、カーネル モード ドライバーは、ファイル システムとストレージ ドライバー スタックで直接書き込みをブロックするため、通常は書き込むことができないボリューム領域に書き込むことができます。 直接書き込みブロックは、セキュリティの向上に役立ちます。 このフラグは、ファイル システム レイヤーとストレージ スタック レイヤーの両方でチェックされます。 直接書き込みブロックの詳細については、「 ボリュームとディスクへの直接書き込み操作のブロック」を参照してください。
SL_REALTIME_STREAM 0x20 このフラグは、IO が CD-ROM クラス ドライバーへのリアルタイム ストリーミング要求用であることを示します。 これにより、リアルタイム ストリーミングの保証された速度で読み取り/書き込み操作を実行するようにドライバーが示唆されます。 このフラグは、光ディスク・メディアでのみ有効です。
SL_PERSISTENT_MEMORY_FIXED_MAPPING 0x20 書き込み要求のバイトの永続メモリ マッピングは、この書き込み要求の処理中に変更できません。 このフラグは、永続メモリ デバイスとIRP_MJ_WRITEでのみ有効です。

永続メモリ デバイスの場合、永続メモリ デバイスで再マッピング (特定の LBA の物理アドレスを変更) する理由の 1 つは、効率的なセクター レベルの原子性を提供することです。 フラグが設定されていない場合、特にドライバーがセクター原子性を提供する場合は、再マップが許可されます。 ファイル システム (またはリクエスター) は、永続メモリ デバイス ドライバーがセクターの原子性を提供することを好みます。 フラグが設定されている場合、永続メモリ ドライバーは、LBA に対応する物理アドレスを再マップすることはできません。 それがセクターの原子性を提供できないことを意味する場合は、そうである。 ただし、再マッピングがない限り、ドライバーはセクターの原子性を提供することは歓迎以上です。

Control

ドライバーは、このメンバーをチェックして、SL_PENDING_RETURNED で設定されているかどうかと、CompletionRoutine が呼び出される条件を判断できます。 ドライバーには、このメンバーへの読み取り専用アクセス権があります。 ドライバーは 、これらの条件を指定するために IoSetCompletionRoutine または IoSetCompletionRoutineEx を呼び出します。

Parameters

MajorFunction および MinorFunction に含まれるメジャーおよびマイナー IRP 関数コード値に依存する共用体。 次の表は、 Parameters 共用体の個々のメンバーを使用する IRP を示しています。

メンバー名 このメンバーを使用する IRP
作成 IRP_MJ_CREATE
読み取り IRP_MJ_READ
書き込み IRP_MJ_WRITE
QueryFile IRP_MJ_QUERY_INFORMATION
SetFile IRP_MJ_SET_INFORMATION
QueryVolume IRP_MJ_QUERY_VOLUME_INFORMATION
DeviceIoControl IRP_MJ_DEVICE_CONTROLIRP_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_CONFIGIRP_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
電源 IRP_MN_SET_POWERIRP_MN_QUERY_POWER
StartDevice IRP_MN_START_DEVICE
WMI WMI マイナー IRP
Others ドライバー固有の IRP

詳細については、「 IRP の主要な関数コード」を参照してください。

Parameters.Create

NtCreateFile のシステム サービス パラメーター。

Parameters.Create.SecurityContext

Parameters.Create.Options

Parameters.Create.FileAttributes

Parameters.Create.ShareAccess

Parameters.Create.EaLength

Parameters.CreatePipe

NtCreateNamedPipeFile のシステム サービス パラメーター。

Parameters.CreatePipe.SecurityContext

Parameters.CreatePipe.Options

Parameters.CreatePipe.Reserved

Parameters.CreatePipe.ShareAccess

Parameters.CreatePipe.Parameters

Parameters.CreateMailslot

NtCreateMailslotFile のシステム サービス パラメーター。

Parameters.CreateMailslot.SecurityContext

Parameters.CreateMailslot.Options

Parameters.CreateMailslot.Reserved

Parameters.CreateMailslot.ShareAccess

Parameters.CreateMailslot.Parameters

Parameters.Read

NtReadFile のシステム サービス パラメーター。

Parameters.Read.Length

Parameters.Read.Key

Parameters.Read.Flags

Parameters.Read.ByteOffset

Parameters.Write

NtWriteFile のシステム サービス パラメーター。

Parameters.Write.Length

Parameters.Write.Key

Parameters.Write.Flags

Parameters.Write.ByteOffset

Parameters.QueryDirectory

NtQueryDirectoryFile のシステム サービス パラメーター。

Parameters.QueryDirectory.Length

Parameters.QueryDirectory.FileName

Parameters.QueryDirectory.FileInformationClass

Parameters.QueryDirectory.FileIndex

Parameters.NotifyDirectory

NtNotifyChangeDirectoryFile のシステム サービス パラメーター。

Parameters.NotifyDirectory.Length

Parameters.NotifyDirectory.CompletionFilter

Parameters.NotifyDirectoryEx

NtNotifyChangeDirectoryFileEx のシステム サービス パラメーター。

Parameters.NotifyDirectoryEx.Length

Parameters.NotifyDirectoryEx.CompletionFilter

Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass

Parameters.QueryFile

NtQueryInformationFile のシステム サービス パラメーター。

Parameters.QueryFile.Length

Parameters.QueryFile.FileInformationClass

Parameters.SetFile

NtSetInformationFile のシステム サービス パラメーター。

Parameters.SetFile.Length

Parameters.SetFile.FileInformationClass

Parameters.SetFile.FileObject

Parameters.SetFile.ReplaceIfExists

Parameters.SetFile.AdvanceOnly

Parameters.SetFile.ClusterCount

Parameters.SetFile.DeleteHandle

Parameters.QueryEa

NtQueryEaFile のシステム サービス パラメーター。

Parameters.QueryEa.Length

Parameters.QueryEa.EaList

Parameters.QueryEa.EaListLength

Parameters.QueryEa.EaIndex

Parameters.SetEa

NtSetEaFile のシステム サービス パラメーター。

Parameters.SetEa.Length

Parameters.QueryVolume

NtQueryVolumeInformationFile のシステム サービス パラメーター。

Parameters.QueryVolume.Length

Parameters.QueryVolume.FsInformationClass

Parameters.SetVolume

NtSetVolumeInformationFile のシステム サービス パラメーター。

Parameters.SetVolume.Length

Parameters.SetVolume.FsInformationClass

Parameters.FileSystemControl

NtFsControlFile のシステム サービス パラメーター。

Parameters.FileSystemControl.OutputBufferLength

Parameters.FileSystemControl.InputBufferLength

Parameters.FileSystemControl.FsControlCode

Parameters.FileSystemControl.Type3InputBuffer

Parameters.LockControl

LockFile/NtUnlockFile のシステム サービス パラメーター。

Parameters.LockControl.Length

Parameters.LockControl.Key

Parameters.LockControl.ByteOffset

Parameters.DeviceIoControl

NtDeviceIoControlFile のシステム サービス パラメーター。

Parameters.DeviceIoControl.OutputBufferLength

Parameters.DeviceIoControl.InputBufferLength

Parameters.DeviceIoControl.IoControlCode

Parameters.DeviceIoControl.Type3InputBuffer

Parameters.QuerySecurity

NtQuerySecurityObject のシステム サービス パラメーター。

Parameters.QuerySecurity.SecurityInformation

Parameters.QuerySecurity.Length

Parameters.SetSecurity

NtSetSecurityObject のシステム サービス パラメーター。

Parameters.SetSecurity.SecurityInformation

Parameters.SetSecurity.SecurityDescriptor

Parameters.MountVolume

MountVolume のシステム サービス パラメーター。

Parameters.MountVolume.Vpb

Parameters.MountVolume.DeviceObject

Parameters.MountVolume.OutputBufferLength

Parameters.VerifyVolume

VerifyVolume のシステム サービス パラメーター。

Parameters.VerifyVolume.Vpb

Parameters.VerifyVolume.DeviceObject

Parameters.Scsi

内部デバイス制御を使用した Scsi のパラメーター。

Parameters.Scsi.Srb

Parameters.QueryQuota

NtQueryQuotaInformationFile のシステム サービス パラメーター。

Parameters.QueryQuota.Length

Parameters.QueryQuota.StartSid

Parameters.QueryQuota.SidList

Parameters.QueryQuota.SidListLength

Parameters.SetQuota

NtSetQuotaInformationFile のシステム サービス パラメーター。

Parameters.SetQuota.Length

Parameters.QueryDeviceRelations

IRP_MN_QUERY_DEVICE_RELATIONSのパラメーター。

Parameters.QueryDeviceRelations.Type

Parameters.QueryInterface

IRP_MN_QUERY_INTERFACEのパラメーター。

Parameters.QueryInterface.InterfaceType

Parameters.QueryInterface.Size

Parameters.QueryInterface.Version

Parameters.QueryInterface.Interface

Parameters.QueryInterface.InterfaceSpecificData

Parameters.DeviceCapabilities

IRP_MN_QUERY_CAPABILITIESのパラメーター。

Parameters.DeviceCapabilities.Capabilities

Parameters.FilterResourceRequirements

IRP_MN_FILTER_RESOURCE_REQUIREMENTSのパラメーター。

Parameters.FilterResourceRequirements.IoResourceRequirementList

Parameters.ReadWriteConfig

IRP_MN_READ_CONFIGとIRP_MN_WRITE_CONFIGのパラメーター。

Parameters.ReadWriteConfig.WhichSpace

Parameters.ReadWriteConfig.Buffer

Parameters.ReadWriteConfig.Offset

Parameters.ReadWriteConfig.Length

Parameters.SetLock

IRP_MN_SET_LOCKのパラメーター。

Parameters.SetLock.Lock

Parameters.QueryId

IRP_MN_QUERY_IDのパラメーター。

Parameters.QueryId.IdType

Parameters.QueryDeviceText

IRP_MN_QUERY_DEVICE_TEXTのパラメーター。

Parameters.QueryDeviceText.DeviceTextType

Parameters.QueryDeviceText.LocaleId

Parameters.UsageNotification

IRP_MN_DEVICE_USAGE_NOTIFICATIONのパラメーター。

Parameters.UsageNotification.InPath

Parameters.UsageNotification.Reserved[3]

Parameters.UsageNotification.Type

Parameters.WaitWake

IRP_MN_WAIT_WAKEのパラメーター。

Parameters.WaitWake.PowerState

Parameters.PowerSequence

IRP_MN_POWER_SEQUENCEのパラメーター。

Parameters.PowerSequence.PowerSequence

Parameters.Power

IRP_MN_SET_POWERとIRP_MN_QUERY_POWERのパラメーター。

Parameters.Power.SystemContext

Parameters.Power.SystemPowerStateContext

Parameters.Power.Type

Parameters.Power.State

Parameters.Power.ShutdownType

Parameters.StartDevice

StartDevice のパラメーター。

Parameters.StartDevice.AllocatedResources

Parameters.StartDevice.AllocatedResourcesTranslated

Parameters.WMI

WMI IRP のパラメーター。

Parameters.WMI.ProviderId

Parameters.WMI.DataPath

Parameters.WMI.BufferSize

Parameters.WMI.Buffer

Parameters.Others

他のドライバー固有の操作のパラメーター。

Parameters.Others.Argument1

Parameters.Others.Argument2

Parameters.Others.Argument3

Parameters.Others.Argument4

DeviceObject

このドライバーが IRP を処理する対象の物理、論理、または仮想デバイスを表すドライバーによって作成された DEVICE_OBJECT 構造体へのポインター。

FileObject

DeviceObject ポインターに関連付けられているファイル オブジェクト (存在する場合) を表すFILE_OBJECT構造体へのポインター。

CompletionRoutine

この構造体の Control フィールドのフラグに応じて呼び出される完了ルーチン。

Context

CompletionRoutine に渡されるコンテキスト パラメーターのアドレスを格納するために使用されるドライバー定義のコンテキスト。

注釈

IRP ごとに、ドライバー スタック内のドライバーごとに 1 つのIO_STACK_LOCATION構造があります。 各 IRP の I/O スタックの場所のセットは、 IRP 構造体の後に IRP に追加されます。

上位レベルのドライバーはすべて、各 IRP の次の下位ドライバーの I/O スタックの場所を設定する必要があります。 ドライバーは、各 IRP の独自のスタックの場所へのポインターを取得する IoGetCurrentIrpStackLocation を呼び出す必要があります。 上位レベルのドライバーは 、IoGetNextIrpStackLocation を呼び出して、次の下位ドライバーのスタック位置へのポインターを取得できます。

上位レベルのドライバーは、下位レベルのドライバーに IRP を渡すために IoCallDriver を呼び出す前に、スタックの場所の内容を設定する必要があります。 ドライバーが入力 IRP を次の下位レベルのドライバーに渡す場合、ディスパッチ ルーチンは IoSkipCurrentIrpStackLocation または IoCopyCurrentIrpStackLocationToNext を呼び出して、次の下位ドライバーの I/O スタックの場所を設定する必要があります。

IoCallDriver に対する上位レベルドライバーの呼び出しは、下位ドライバーの I/O スタックの場所で、次の下位レベルのドライバーのターゲット デバイス オブジェクトに DeviceObject メンバーを設定します。 I/O マネージャーは、IRP の完了時に IoCompletion ルーチンが呼び出されたときに、上位レベルのドライバーの IoCompletion ルーチンに独自のデバイス オブジェクトへのポインターを渡します。

上位レベルのドライバーが IRP を割り当てて独自の要求を行う場合、そのドライバーがそれ自体のスタックの場所を割り当てず、新しく割り当てられた IRP の独自のスタック位置に DeviceObject ポインターを設定しない場合、その IoCompletion ルーチンは NULLDeviceObject ポインターを渡します。

場合によっては、大容量ストレージ デバイス ドライバーに階層化された上位レベルのドライバーが、基になるデバイス ドライバーの大きな転送要求を分割する役割を担います。 特に、SCSI クラス ドライバーは Parameters.Read.LengthParameters.Write.Length をチェックし、要求された転送のサイズが基になる HBA の転送機能を超えているかどうかを判断し、存在する場合は、元の IRP を満たすために元の要求の長さを一連の部分転送に分割する必要があります。

要件

要件
Header wdm.h (Wdm.h、Ntddk.h、Ntifs.h を含む)

こちらもご覧ください

IO_STATUS_BLOCK

Irp

IoCallDriver

IoCopyCurrentIrpStackLocationToNext

IoGetCurrentIrpStackLocation

IoGetNextIrpStackLocation

IoSetCompletionRoutine

IoSetNextIrpStackLocation

IoSkipCurrentIrpStackLocation