다음을 통해 공유


ScsiPortWmiDispatchFunction 함수(scsiwmi.h)

ScsiPortWmiDispatchFunction 루틴은 WMI를 지원하는 미니포트 드라이버에 대한 디스패치 루틴입니다.

참고 SCSI 포트 드라이버 및 SCSI 미니포트 드라이버 모델은 나중에 변경되거나 사용할 수 없습니다. 대신 Storport 드라이버Storport 미니포트 드라이버 모델을 사용하는 것이 좋습니다.
 

구문

BOOLEAN ScsiPortWmiDispatchFunction(
  [in] PSCSI_WMILIB_CONTEXT     WmiLibInfo,
  [in] UCHAR                    MinorFunction,
  [in] PVOID                    DeviceContext,
  [in] PSCSIWMI_REQUEST_CONTEXT RequestContext,
  [in] PVOID                    DataPath,
  [in] ULONG                    BufferSize,
  [in] PVOID                    Buffer
);

매개 변수

[in] WmiLibInfo

미니포트 드라이버의 데이터 블록 및 이벤트 블록에 대한 등록 정보를 포함하고 미니포트 드라이버의 WMI 라이브러리 콜백 루틴에 대한 진입점을 정의하는 SCSI_WMILIB_CONTEXT 구조체 에 대한 포인터입니다.

[in] MinorFunction

수행할 WMI 작업을 나타냅니다. 미니포트 드라이버는 입력 SRB에서 MinorFunctionSrb-WmiSubFunction>으로 설정합니다.

[in] DeviceContext

미니포트 드라이버 정의 컨텍스트 값에 대한 포인터입니다. 포트 드라이버는 DeviceContext 를 미니포트 드라이버의 HwScsiWmiXxx 콜백 루틴에 전달합니다. 이 값은 일반적으로 HW_DEVICE_EXTENSION 구조를 가리킵니다.

[in] RequestContext

WMI SRB에 대한 컨텍스트 정보를 포함하는 SCSIWMI_REQUEST_CONTEXT 구조체에 대한 포인터입니다. SRB가 보류될 수 있는 경우 요청 컨텍스트는 ScsiPortWmiPostProcess가 최종 SRB 반환 상태 및 버퍼 크기로 반환될 때까지 유효해야 하므로 미니포트 드라이버는 SRB 확장에서 이 구조를 할당해야 합니다. ScsiPortWmiDispatchFunction RequestContext 를 이 요청을 처리하는 미니포트 드라이버의 콜백 루틴에 전달합니다.

[in] DataPath

요청과 연결된 데이터 블록을 나타내는 GUID에 대한 포인터입니다. 미니포트 드라이버는 입력 SRB에서 DataPathSrb-DataPath>로 설정합니다.

[in] BufferSize

데이터 버퍼의 크기(바이트)를 지정합니다. 미니포트 드라이버는 입력 SRB에서 BufferSizeSrb-DataTransferLength>로 설정합니다.

[in] Buffer

데이터 버퍼에 대한 포인터입니다. 미니포트 드라이버는 입력 SRB에서 버퍼Srb-DataBuffer>로 설정합니다.

반환 값

ScsiPortWmiDispatchFunction 은 요청이 보류 중인 경우 TRUE 를 반환하고, 요청이 완료되면 FALSE 를 반환합니다.

설명

미니포트 드라이버는 함수 멤버가 SRB_FUNCTION_WMI 설정된 SRB를 받으면 초기화된 SCSI_WMILIB_CONTEXT 구조체에 대한 포인터를 포함하여 요청 매개 변수를 사용하여 ScsiPortWmiDispatchFunction 을 호출합니다. 이 구조체는 미니포트 드라이버의 데이터 블록 및 이벤트 블록에 대한 정보를 포함하고 미니포트 드라이버의 HwScsiWmiXxx 콜백 루틴에 대한 진입점을 정의합니다.

ScsiPortWmiDispatchFunction 은 SRB가 WMI 요청인지 확인하고 요청에 지정된 블록이 미니포트 드라이버에 유효한지 여부를 확인합니다. 이러한 조건이 충족되면 ScsiPortWmiDispatchFunction 은 미니포트 드라이버의 SCSI_WMILIB_CONTEXT 구조에서 적절한 HwScsiWmiXxx 진입점을 호출하여 SRB를 처리합니다. 미니포트 드라이버가 선택적 HwScsiWmiXxx 루틴에 대한 진입점을 정의하지 않으면 포트 드라이버가 요청을 처리합니다.

두 경우 모두 ScsiPortWmiDispatchFunction 이 반환된 후 미니포트 드라이버는 보류되지 않는 요청에 대해 다음을 수행해야 합니다.

  • Srb->DataTransferLengthScsiPortWmiGetReturnSize에서 반환된 값으로 설정합니다.
  • Srb->SrbStatusScsiPortWmiGetReturnStatus에서 반환된 값으로 설정합니다.
  • RequestComplete사용하여 ScsiPortNotification을 호출하고 NextRequest를 사용하여 다시 호출

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 scsiwmi.h(Miniport.h, Scsi.h 포함)

추가 정보

SCSIWMI_REQUEST_CONTEXT

SCSI_WMILIB_CONTEXT

ScsiPortNotification

ScsiPortWmiGetReturnSize

ScsiPortWmiGetReturnStatus

ScsiPortWmiPostProcess