WMI SRB를 지원하도록 Storage 미니포트 드라이버 루틴 수정

미니포트 드라이버가 WMI SRB를 지원하려면 먼저 미니포트 드라이버에 필요한 HwScsiWmiQueryReginfo 루틴이 포함되어 있고 다음 루틴에 대해 표시된 작업을 수행하는지 확인해야 합니다.

SCSI 미니포트 드라이버 루틴의 DriverEntry:

  • 미니포트 드라이버가 SCSI 포트 WMI 라이브러리를 사용하는 경우 SCSI 포트 WMI 라이브러리 사용에 표시된 대로 SCSI_WMILIB_CONTEXT 구조를 초기화합니다.

  • 포트 드라이버에 SRB 확장에 대한 메모리를 할당해야 하는지 여부를 나타냅니다. 미니포트 드라이버는 SCSI(HW_INITIALIZATION_DATA) 구조체의 SrbExtensionSize 멤버를 0이 아닌 값으로 설정하여 SRB 확장을 할당해야 임을 나타냅니다.

HwScsiFindAdapter 루틴:

HwScsiStartIo 루틴:

  • SRB의 함수 멤버를 테스트하여 SRB_FUNCTION_WMI 같은지 확인합니다. 이 조건이 TRUE이면 미니포트 드라이버는 SCSI_REQUEST_BLOCK 형식의 SRB가 아닌 SCSI_WMI_REQUEST_BLOCK형식의 SRB를 처리해야 합니다.

  • SRB 컨텍스트를 보유할 SCSIWMI_REQUEST_CONTEXT 구조체에 대한 메모리를 할당합니다. 미니포트 드라이버가 WMI 요청을 보류할 수 있는 경우 미니포트 드라이버가 SRB 처리 동안 요청 컨텍스트를 유지할 수 있도록 SRB 확장에서 메모리를 할당합니다. 그렇지 않으면 요청이 보류될 가능성이 없는 경우 스택에서 컨텍스트에 대한 메모리를 할당합니다.

  • Srb-WMIFlags>를 확인하여 요청이 어댑터용인지 논리 단위인지 확인합니다.

  • SCSI 포트 WMI 라이브러리 디스패치 루틴 ScsiPortWmiDispatchFunction을 호출합니다. 이 디스패치 루틴을 호출하는 방법에 대한 설명은 SCSI 포트 WMI 라이브러리 사용을 참조하세요.

  • 드라이버에서 보류 중인 경우 요청을 처리한 후 ScsiPortWmiPostProcess 를 호출합니다. 드라이버가 요청을 보류하지 않은 경우 미니포트 드라이버의 시작 I/O 루틴이 아닌 미니포트 드라이버 콜백 루틴에서 ScsiPortWmiPostProcess 를 호출해야 합니다.

  • Srb-DataTransferLength>Srb-SrbStatus>를 각각 ScsiPortWmiGetReturnSizeScsiPortWmiGetReturnStatus에서 반환된 값으로 설정합니다.

  • RequestComplete사용하여 ScsiPortNotification을 호출하고 NextRequest 또는(NextLuRequest)를 사용하여 다시 호출합니다.