IO_STACK_LOCATION 구조체(wdm.h)
IO_STACK_LOCATION 구조체는 각 IRP와 연결된 I/O 스택의 항목인 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;
} 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
요청 유형별 값은 파일 시스템 드라이버에서 거의 독점적으로 사용됩니다. 이동식 미디어 디바이스 드라이버는 이 멤버가 읽기 요청에 대해 SL_OVERRIDE_VERIFY_VOLUME 설정되어 있는지 확인하여 디바이스 개체의 플래그 가 DO_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 |
이 플래그는 디바이스 개체의 플래그 가 DO_VERIFY_VOLUME 설정된 경우에도 읽기 작업을 계속할지 여부를 결정하는 데 사용됩니다. |
| SL_WRITE_THROUGH | 0x04 |
이 플래그는 디스크가 영구 스토리지 미디어에 쓰기를 강제하기 위해 디스크가 쓰기 캐시를 무시하도록 적절한 플래그를 설정하도록 스토리지 드라이버에 알릴 수 있습니다. 이 플래그는 디바이스에 따라 다릅니다. 모든 디스크 드라이브가 디스크 캐시 무시를 지원하지는 않습니다. |
| SL_FT_SEQUENTIAL_WRITE | 0x08 |
시스템에서 사용하도록 예약되었습니다. |
| SL_FORCE_DIRECT_WRITE | 0x10 |
이 플래그를 사용하면 커널 모드 드라이버가 파일 시스템 및 스토리지 드라이버 스택에서 직접 쓰기를 차단하여 일반적으로 쓸 수 없는 볼륨 영역에 쓸 수 있습니다. 이 플래그는 Windows Vista에서 도입되었습니다.
참고 Windows Vista에 도입된 직접 쓰기 차단은 보안을 개선하는 데 도움이 됩니다. 이 플래그는 파일 시스템 계층과 스토리지 스택 계층 모두에서 확인됩니다. 직접 쓰기 차단에 대한 자세한 내용은 볼륨 및 디스크에 대한 직접 쓰기 작업 차단을 참조하세요.
|
| SL_REALTIME_STREAM | 0x20 |
이 플래그는 IO가 CD-ROM 클래스 드라이버에 대한 실시간 스트리밍 요청에 대한 것임을 암시합니다. 이는 드라이버가 실시간 스트리밍을 위해 보장된 속도로 읽기/쓰기 작업을 수행하도록 암시합니다. 이 플래그는 광학 미디어에서만 유효합니다. |
| SL_PERSISTENT_MEMORY_FIXED_MAPPING | 0x20 |
쓰기 요청에서 바이트의 영구 메모리 매핑은 이 쓰기 요청을 처리하는 동안 변경할 수 없습니다. 이 플래그는 영구 메모리 디바이스 및 IRP_MJ_WRITE 경우에만 유효합니다. |
Control
드라이버는 이 멤버를 확인하여 SL_PENDING_RETURNED 사용하여 설정되었는지 여부를 확인할 수 있습니다. 드라이버는 이 멤버에 대한 읽기 전용 액세스 권한을 갖습니다.
Parameters
MajorFunction 및 MinorFunction에 포함된 주 및 부 IRP 함수 코드 값에 의존하는 공용 구조체입니다. 다음 표에서는 매개 변수 공용 구조체의 개별 멤버를 사용하는 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_CONTROL 및 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 및 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 및 IRP_MN_QUERY_POWER |
| StartDevice | IRP_MN_START_DEVICE |
| WMI | WMI 부 IRP |
| 기타 | 드라이버별 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.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
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
이전 플래그 필드의 플래그에 따라 호출되는 완료 루틴입니다.
Context
CompletionRoutine에 전달되는 컨텍스트 매개 변수의 주소를 저장하는 데 사용되는 드라이버 정의 컨텍스트입니다.
설명
각 IRP에 대해 드라이버 스택의 각 드라이버에 대해 하나의 IO_STACK_LOCATION 구조가 있습니다. IRP 구조에 따라 각 IRP의 I/O 스택 위치 집합이 IRP 에 추가됩니다.
모든 상위 수준 드라이버는 각 IRP에서 다음 하위 드라이버에 대한 I/O 스택 위치를 설정하는 역할을 담당합니다. 드라이버는 IoGetCurrentIrpStackLocation 을 호출하여 각 IRP에 대한 자체 스택 위치에 대한 포인터를 가져와야 합니다. 상위 수준 드라이버는 IoGetNextIrpStackLocation 을 호출하여 다음으로 낮은 드라이버의 스택 위치에 대한 포인터를 가져올 수 있습니다.
상위 수준 드라이버는 IRP를 하위 수준 드라이버에 전달하기 위해 IoCallDriver 를 호출하기 전에 스택 위치 콘텐츠를 설정해야 합니다. 드라이버가 다음 하위 수준 드라이버에 입력 IRP를 전달하는 경우 디스패치 루틴은 IoSkipCurrentIrpStackLocation 또는 IoCopyCurrentIrpStackLocationToNext 를 호출하여 다음 하위 드라이버의 I/O 스택 위치를 설정해야 합니다.
IoCallDriver에 대한 상위 수준 드라이버 호출은 DeviceObject 멤버를 하위 드라이버의 I/O 스택 위치에 있는 다음 하위 수준 드라이버의 대상 디바이스 개체로 설정합니다. I/O 관리자는 IRP 완료 시 IoCompletion 루틴이 호출될 때 각 상위 수준 드라이버의 IoCompletion 루틴을 자체 디바이스 개체에 대한 포인터로 전달합니다.
상위 수준 드라이버가 자체 요청을 수행하도록 IRP를 할당하는 경우 해당 드라이버가 자체적으로 스택 위치를 할당하거나 새로 할당된 IRP의 자체 스택 위치에 DeviceObject 포인터를 설정하지 않으면 해당 IoCompletion 루틴이 NULL DeviceObject 포인터에 전달됩니다.
경우에 따라 대용량 스토리지 디바이스 드라이버 위에 계층화된 상위 수준 드라이버는 기본 디바이스 드라이버에 대한 대규모 전송 요청을 분할해야 합니다. 특히 SCSI 클래스 드라이버는 Parameters.Read.Length 및 Parameters.Write.Length를 확인하고 요청된 전송 크기가 기본 HBA의 전송 기능을 초과하는지 여부를 확인하고, 이 경우 원래 요청의 길이 를 부분 전송 시퀀스로 분할하여 원래 IRP를 충족해야 합니다.
요구 사항
| 헤더 | wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함) |
참고 항목
피드백
다음에 대한 사용자 의견 제출 및 보기