HW_INITIALIZATION_DATA 구조체(storport.h)
HW_INITIALIZATION_DATA(Storport) 구조에는 각 미니포트 드라이버와 미니포트 드라이버가 관리하는 하드웨어에 특정한 정보가 포함됩니다.
구문
typedef struct _HW_INITIALIZATION_DATA {
ULONG HwInitializationDataSize;
INTERFACE_TYPE AdapterInterfaceType;
PHW_INITIALIZE HwInitialize;
PHW_STARTIO HwStartIo;
PHW_INTERRUPT HwInterrupt;
PVOID HwFindAdapter;
PHW_RESET_BUS HwResetBus;
PHW_DMA_STARTED HwDmaStarted;
PHW_ADAPTER_STATE HwAdapterState;
ULONG DeviceExtensionSize;
ULONG SpecificLuExtensionSize;
ULONG SrbExtensionSize;
ULONG NumberOfAccessRanges;
PVOID Reserved;
UCHAR MapBuffers;
BOOLEAN NeedPhysicalAddresses;
BOOLEAN TaggedQueuing;
BOOLEAN AutoRequestSense;
BOOLEAN MultipleRequestPerLu;
BOOLEAN ReceiveEvent;
USHORT VendorIdLength;
PVOID VendorId;
union {
USHORT ReservedUshort;
USHORT PortVersionFlags;
};
USHORT DeviceIdLength;
PVOID DeviceId;
PHW_ADAPTER_CONTROL HwAdapterControl;
PHW_BUILDIO HwBuildIo;
PHW_FREE_ADAPTER_RESOURCES HwFreeAdapterResources;
PHW_PROCESS_SERVICE_REQUEST HwProcessServiceRequest;
PHW_COMPLETE_SERVICE_IRP HwCompleteServiceIrp;
PHW_INITIALIZE_TRACING HwInitializeTracing;
PHW_CLEANUP_TRACING HwCleanupTracing;
PHW_TRACING_ENABLED HwTracingEnabled;
ULONG FeatureSupport;
ULONG SrbTypeFlags;
ULONG AddressTypeFlags;
ULONG Reserved1;
PHW_UNIT_CONTROL HwUnitControl;
} HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
멤버
HwInitializationDataSize
sizeof(HW_INITIALIZATION_DATA)에서 반환된 대로 이 구조체의 크기를 바이트 단위로 지정합니다. 실제로 이 멤버는 미니포트 드라이버에서 사용되는 이 구조체의 버전을 나타냅니다. 미니포트 드라이버의 DriverEntry 루틴은 포트 드라이버에 대해 이 멤버의 값을 설정해야 합니다.
AdapterInterfaceType
Storport 드라이버는 레거시 버스를 지원하지 않습니다. 따라서 SCSI 포트 드라이버와 함께 사용되는 대부분의 어댑터 인터페이스 형식은 Storport에 유효하지 않습니다. 특히 Isa, Eisa, MicroChannel 및 TurboChannel 은 지원되지 않습니다. 또한 SCSI 포트 사례와 달리 Storport 드라이버와 함께 작동하는 미니포트 드라이버는 VendorIdLength, VendorId, DeviceIdLength 및 DeviceId 멤버에 대한 값을 제공할 필요가 없습니다.
HwInitialize
모든 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwStorInitialize 루틴에 대한 포인터입니다.
HwStartIo
모든 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwStorStartIo 루틴에 대한 포인터입니다.
HwInterrupt
모든 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwStorInterrupt 루틴에 대한 포인터입니다.
HwFindAdapter
모든 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwStorFindAdapter 루틴에 대한 포인터입니다.
HwResetBus
모든 미니포트 드라이버에 필요한 진입점인 미니포트 드라이버의 HwStorResetBus 루틴에 대한 포인터입니다.
HwDmaStarted
Storport 드라이버는 하위 모드 DMA를 지원하지 않습니다. 따라서 이 멤버는 NULL이어야 합니다.
HwAdapterState
Storport 드라이버는 레거시 드라이버를 지원하지 않습니다. 따라서 이 멤버는 NULL이어야 합니다.
DeviceExtensionSize
미니포트 드라이버가 어댑터별 디바이스 확장에 필요한 크기(바이트)를 지정합니다. 미니포트 드라이버는 디바이스 확장을 HBA(드라이버 결정 호스트 버스 어댑터) 정보의 스토리지로 사용합니다. 운영 체제별 포트 드라이버는 먼저 확장을 할당하고 0으로 채울 때 각 디바이스 확장을 한 번 초기화합니다. 미니포트 드라이버에 대한 모든 호출에서 HBA 관련 디바이스 확장에 대한 포인터를 전달합니다. 지정된 크기에는 미니포트 드라이버 요청 논리 단위별 스토리지가 포함되지 않습니다. 논리 단위별 스토리지의 크기는 이 항목의 뒷부분에 설명된 SpecificLuExtensionSize 필드를 통해 지정됩니다.
SCSIPort는 어댑터가 중지될 때마다 디바이스 확장을 다시 초기화하므로 HwScsiFindAdapter 에 대한 후속 호출은 제로아웃 디바이스 확장을 수신하지만 Storport는 해당 모델을 따르지 않습니다. 대신 Storport는 디바이스 확장을 처음 할당된 경우에만 0으로 다시 설정하므로 지정된 어댑터에 대한 HwStorFindAdapter 에 대한 첫 번째 호출만 제로 아웃 디바이스 확장을 받습니다. HwStorFindAdapter 및 기타 미니포트 함수에 대한 후속 호출은 미니포트에서 마지막으로 수정한 디바이스 확장을 수신합니다. 이렇게 하면 미니포트 드라이버가 PnP(플러그 앤 플레이) 중지 및 다시 시작 사이의 어댑터 상태에 대한 지식을 유지할 수 있으므로 미니포트 드라이버가 초기화 절차를 최적화할 수 있습니다.
SpecificLuExtensionSize
미니포트 드라이버가 논리 단위별 스토리지(있는 경우)에 필요한 바이트 크기를 지정합니다. 미니포트 드라이버는 버스의 주변 장치에 대한 드라이버 결정 논리 단위 정보에 대한 스토리지로 LU 확장을 사용할 수 있습니다. Storport 드라이버는 할당하는 각 LU 확장을 0으로 초기화합니다. 미니포트 드라이버가 스토리지가 필요한 LU별 정보를 유지 관리하지 않는 경우 이 멤버를 0으로 설정합니다. 이 값은 컨트롤러가 실제로 지원할 수 있는 내용에 관계없이 HBA가 32비트 주소를 받을 수 있다는 가정을 기반으로 합니다. 64비트 주소를 처리하기 위해 LUN 또는 SRB 확장에 추가 공간이 필요한 경우 StorPortGetUncachedExtension과 같은 루틴과 함께 사용하기 전에 이 값을 적절하게 조정해야 합니다.
SrbExtensionSize
미니포트 드라이버가 요청당 스토리지에 필요한 크기(있는 경우)를 바이트 단위로 지정합니다. 미니포트 드라이버는 특정 요청을 처리하는 데 필요한 데이터와 같이 드라이버 결정 요청 관련 정보에 대한 스토리지로 SRB 확장을 사용할 수 있습니다. Storport 드라이버는 SRB 확장을 초기화하지 않지만 미니포트 드라이버에 보내는 각 SRB에서 이 스토리지에 대한 포인터를 설정합니다. SRB 확장은 HBA 하드웨어에서 안전하게 액세스할 수 있습니다. Storport 드라이버와 함께 작동하는 미니포트 드라이버는 분산/수집 목록을 지원해야 하며 SRB별 분산/수집 목록은 일반적으로 SRB 확장에 할당되므로 이 멤버는 거의 0이 아닙니다. 미니포트 드라이버가 스토리지가 필요한 SRB별 정보를 유지 관리하지 않는 경우 이 멤버를 0으로 설정합니다.
이 값은 컨트롤러가 실제로 지원할 수 있는 내용에 관계없이 HBA가 32비트 주소를 받을 수 있다는 가정을 기반으로 합니다. 64비트 주소를 처리하기 위해 LUN 또는 SRB 확장에 추가 공간이 필요한 경우 StorPortGetUncachedExtension과 같은 루틴과 함께 사용하기 전에 이 값을 적절하게 조정해야 합니다.
NumberOfAccessRanges
어댑터에서 사용하는 액세스 범위 수를 지정합니다. 각각은 메모리 주소 또는 I/O 포트 주소의 범위입니다.
Reserved
시스템 사용을 위해 예약되었으며 미니포트 드라이버에서 사용할 수 없습니다.
MapBuffers
Storport 드라이버가 SRB 데이터 버퍼 주소를 시스템 가상 주소에 매핑하는지 여부를 나타냅니다. MapBuffers 멤버는 다음 값 중 하나를 가질 수 있습니다.
값 | 의미 |
---|---|
STOR_MAP_NO_BUFFERS | SRB_FUNCTION_IO_CONTROL 및 SRB_FUNCTION_WMI 제외한 모든 SRB에 매핑하지 마세요. |
STOR_MAP_ALL_BUFFERS | 사용되지 않습니다. 이 값은 STOR_MAP_NON_READ_WRITE_BUFFERS 효과와 동일합니다. |
STOR_MAP_NON_READ_WRITE_BUFFERS | 읽기 또는 쓰기 요청을 제외한 모든 I/O에 대한 버퍼를 매핑합니다. |
STOR_MAP_ALL_BUFFERS_INCLUDING_READ_WRITE | 읽기 및 쓰기 요청을 포함하여 모든 I/O에 대한 버퍼를 매핑합니다. 이 값은 Windows 8 시작해도 유효합니다. |
NeedPhysicalAddresses
TRUE로 설정해야 합니다. TRUE 값은 미니포트 드라이버가 특정 유형의 주소를 실제 주소로 변환해야 했음을 나타냅니다. Storport 드라이버와 함께 작동하는 미니포트 드라이버는 버스 master DMA를 지원해야 하므로 항상 주소 변환을 수행해야 합니다.
TaggedQueuing
TRUE로 설정해야 합니다. TRUE 값은 미니포트 드라이버가 SCSI 태그가 지정된 큐를 지원한다는 것을 나타냅니다. Storport 드라이버와 함께 작동하는 모든 미니포트 드라이버는 태그가 지정된 큐를 지원해야 합니다.
AutoRequestSense
TRUE여야 합니다. TRUE 값은 명시적 요청 없이 HBA가 요청 센스 작업을 수행할 수 있음을 나타냅니다. Storport 드라이버와 함께 작동하는 모든 미니포트 드라이버는 SCSI 자동 요청 센스를 지원해야 합니다.
MultipleRequestPerLu
TRUE로 설정해야 합니다. TRUE 값은 미니포트 드라이버가 논리 단위당 여러 요청을 큐에 대기할 수 있음을 나타냅니다. Storport 드라이버와 함께 작동하는 미니포트 드라이버는 논리 단위당 여러 요청을 지원해야 합니다.
ReceiveEvent
Storport 드라이버는 이 멤버를 무시합니다.
VendorIdLength
Storport 드라이버와 함께 작동하는 미니포트 드라이버는 PnP를 지원해야 하므로 Storport 드라이버는 이 멤버를 무시합니다.
VendorId
Storport 드라이버와 함께 작동하는 미니포트 드라이버는 PnP를 지원해야 하므로 Storport 드라이버는 이 멤버를 무시합니다.
ReservedUshort
PortVersionFlags
지원되는 기능을 나타내는 플래그입니다.
DeviceIdLength
Storport 드라이버와 함께 작동하는 미니포트 드라이버는 PnP를 지원해야 하므로 Storport 드라이버는 이 멤버를 무시합니다.
DeviceId
Storport 드라이버와 함께 작동하는 미니포트 드라이버는 PnP를 지원해야 하므로 Storport 드라이버는 이 멤버를 무시합니다.
HwAdapterControl
미니포트 드라이버의 HwStorAdapterControl 루틴에 대한 포인터입니다. Storport 드라이버와 함께 작동하는 미니포트 드라이버에는 PnP 지원이 필요하기 때문에 이는 필수 루틴입니다.
HwBuildIo
포트 드라이버가 미니포트 드라이버의 HwStorStartIo 루틴을 호출하기 전에 비동기 처리를 수행하도록 호출하는 선택적 HwStorBuildIo 루틴에 대한 포인터입니다. 이 콜백은 물리적 미니포트에만 적용되며 가상 미니포트를 통해 NULL로 설정해야 합니다.
HwFreeAdapterResources
모든 가상 미니포트 드라이버에 필요한 진입점인 가상 미니포트 드라이버의 HwStorFreeAdapterResources 루틴에 대한 포인터입니다. 이 콜백은 가상 미니포트에만 적용되며 물리적 미니포트의 경우 NULL 로 설정됩니다.
이 콜백은 Windows 8 추가됩니다. 이전 버전의 Windows용 가상 미니포트는 이 구조 대신 VIRTUAL_HW_INITIALIZATION_DATA 사용해야 합니다.
HwProcessServiceRequest
가상 미니포트 드라이버의 HwStorProcessServiceRequest 루틴에 대한 포인터입니다. 이 콜백은 가상 미니포트에만 적용되며 물리적 미니포트의 경우 NULL 로 설정됩니다.
이 콜백은 Windows 8 추가됩니다. 이전 버전의 Windows용 가상 미니포트는 이 구조 대신 VIRTUAL_HW_INITIALIZATION_DATA 사용해야 합니다.
HwCompleteServiceIrp
가상 미니포트 드라이버의 HwStorCompleteServiceIrp 루틴에 대한 포인터입니다. 이 콜백은 가상 미니포트에만 적용되며 물리적 미니포트의 경우 NULL 로 설정됩니다.
이 콜백은 Windows 8 추가됩니다. 이전 버전의 Windows용 가상 미니포트는 이 구조 대신 VIRTUAL_HW_INITIALIZATION_DATA 사용해야 합니다.
HwInitializeTracing
가상 미니포트 드라이버의 HwStorInitializeTracing 루틴에 대한 포인터입니다. 이 콜백은 가상 미니포트에만 적용되며 물리적 미니포트의 경우 NULL 로 설정됩니다.
이 콜백은 Windows 8 추가됩니다. 이전 버전의 Windows용 가상 미니포트는 이 구조 대신 VIRTUAL_HW_INITIALIZATION_DATA 사용해야 합니다.
HwCleanupTracing
가상 미니포트 드라이버의 HwStorCleanupTracing 루틴에 대한 포인터입니다. 이 콜백은 가상 미니포트에만 적용되며 물리적 미니포트의 경우 NULL 로 설정됩니다.
이 콜백은 Windows 8 추가됩니다. 이전 버전의 Windows용 가상 미니포트는 이 구조 대신 VIRTUAL_HW_INITIALIZATION_DATA 사용해야 합니다.
HwTracingEnabled
포트 드라이버가 추적을 사용할 수 있는지 여부를 미니포트에 알리기 위해 호출하는 선택적 HwStorTracingEnabled 루틴에 대한 포인터입니다.
FeatureSupport
미니포트에서 지원하는 기능을 나타내는 플래그입니다. FeatureSupport 는 다음 값의 조합으로 설정됩니다.
값 | 의미 |
---|---|
STOR_FEATURE_VIRTUAL_MINIPORT | 가상 미니포트 드라이버입니다. |
STOR_FEATURE_ATA_PASS_THROUGH | 미니포트는 ATA 통과를 지원합니다. |
STOR_FEATURE_FULL_PNP_DEVICE_CAPABILITIES | 미니포트는 STOR_DEVICE_CAPABILITIES_EX 구조에서 전체 설정을 제공합니다. |
STOR_FEATURE_DUMP_POINTERS | 미니포트는 덤프 포인터 SRB를 지원합니다. |
STOR_FEATURE_DEVICE_NAME_NO_SUFFIX | 미니포트 드라이버는 디바이스 식별 이름의 일부로 접미사 "SCSI 유형 디바이스"를 원하지 않습니다. |
STOR_FEATURE_DUMP_RESUME_CAPABLE | 미니포트의 덤프 기능은 최대 절전 모드에서 다시 시작할 수 있습니다. |
STOR_FEATURE_DEVICE_DESCRIPTOR_FROM_ATA_INFO_VPD | Storport 드라이버는 INQUIRY 데이터 대신 ATA 정보 VPD 페이지에서 STORAGE_DEVICE_DESCRIPTOR 초기화합니다. |
STOR_FEATURE_SET_ADAPTER_INTERFACE_TYPE | Storport 드라이버는 어댑터 인터페이스 유형을 설정합니다. |
SrbTypeFlags
미니포트에서 지원하는 SRB 형식을 나타내는 플래그입니다. SrbTypeFlags 는 0 또는 다음 값의 조합으로 설정됩니다.
값 | 의미 |
---|---|
SRB_TYPE_FLAG_SCSI_REQUEST_BLOCK | 미니포트는 표준 SRB를 사용합니다. |
SRB_TYPE_FLAG_STORAGE_REQUEST_BLOCK | 미니포트는 확장된 SRB를 지원합니다. |
AddressTypeFlags
미니포트에서 지원하는 주소 구성표입니다. 현재 하나의 주소 구성표만 지원되며 미니포트는 이 멤버를 ADDRESS_TYPE_FLAG_BTL8 설정해야 합니다.
값 | 의미 |
---|---|
ADDRESS_TYPE_FLAG_BTL8 | 버스, 대상 및 LUN(BTL) 8비트 주소 지정 |
Reserved1
예약되어 0으로 설정됩니다.
HwUnitControl
미니포트 드라이버의 HwStorUnitControl 루틴을 가리키는 포인터입니다. 포트 드라이버는 스토리지 장치 디바이스에 대한 제어 요청으로 이 루틴을 호출합니다.
설명
모든 Storport 미니포트 드라이버의 DriverEntry 루틴은 미니포트 드라이버가 처음 0이 된 후 StorPortInitialize 를 호출한 다음 HW_INITIALIZATION_DATA 멤버를 설정해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 | storport.h(Storport.h 포함) |