다음을 통해 공유


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, MicroChannelTurboChannel 은 지원되지 않습니다. 또한 SCSI 포트 사례와 달리 Storport 드라이버와 함께 작동하는 미니포트 드라이버는 VendorIdLength, VendorId, DeviceIdLengthDeviceId 멤버에 대한 값을 제공할 필요가 없습니다.

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 포함)