PSCSIWMI_EXECUTE_METHOD 콜백 함수(scsiwmi.h)
미니포트 드라이버의 HwScsiWmiExecuteMethod 루틴은 데이터 블록과 연결된 메서드를 실행하기 위해 호출됩니다. 이 루틴은 선택 사항입니다.
통사론
PSCSIWMI_EXECUTE_METHOD PscsiwmiExecuteMethod;
BOOLEAN PscsiwmiExecuteMethod(
[in] PVOID DeviceContext,
[in] PSCSIWMI_REQUEST_CONTEXT RequestContext,
[in] ULONG GuidIndex,
[in] ULONG InstanceIndex,
[in] ULONG MethodId,
[in] ULONG InBufferSize,
[in] ULONG OutBufferSize,
[in, out] PUCHAR Buffer
)
{...}
매개 변수
[in] DeviceContext
ScsiPortWmiDispatchFunction전달된 미니포트 드라이버 정의 컨텍스트 값을 가리킵니다.
[in] RequestContext
미니포트 드라이버가 ScsiPortWmiDispatchFunction전달한 SCSIWMI_REQUEST_CONTEXT 구조를 가리킵니다.
[in] GuidIndex
미니포트 드라이버가 ScsiPortWmiDispatchFunction전달한 SCSI_WMILIB_CONTEXT 구조체의 GUID 목록에 대한 인덱스의 데이터 블록을 지정합니다.
[in] InstanceIndex
GuidIndex 지정된 블록에 여러 인스턴스가 있는 경우 InstanceIndex 인스턴스를 지정합니다.
[in] MethodId
실행할 메서드의 ID를 지정합니다. 미니포트 드라이버는 메서드 ID를 데이터 블록의 항목으로 정의합니다.
[in] InBufferSize
입력 데이터의 크기(바이트)를 나타냅니다. 입력 데이터가 없으면 inBufferSize 0입니다.
[in] OutBufferSize
출력 데이터에 대해 버퍼에서 사용할 수 있는 바이트 수를 나타냅니다.
[in, out] Buffer
입력 데이터를 보유하는 버퍼를 가리키고 메서드에서 출력 데이터(있는 경우)를 수신합니다. 버퍼가 너무 작아서 모든 출력을 수신할 수 없는 경우 미니포트 드라이버는 SRB_STATUS_DATA_OVERRUN 필요한 크기로 ScsiPortWmiPostProcess 호출합니다.
반환 값
HwScsiWmiExecuteMethod 요청이 보류 중인 경우 SRB_STATUS_PENDING 반환하거나 요청이 완료된 경우 0이 아닌 SRB 상태 값을 반환합니다. 이 루틴에서 반환된 SRB 상태 값은 ScsiPortWmiPostProcess전달된 값과 동일합니다. 반환 값 데이터 형식은 BOOLEAN이지만 HwScsiWmiExecuteMethod 루틴은 실제로 SRB 상태 값을 반환합니다.
발언
미니포트 드라이버는 Function 멤버가 SRB_FUNCTION_WMI 설정된 SRB를 받으면 초기화된 SCSI_WMILIB_CONTEXT 구조에 대한 포인터를 사용하여 ScsiPortWmiDispatchFunction 호출하고 MinorFunction Srb->WmiSubFunction 설정합니다. MinorFunction 메서드 실행 요청을 나타내는 경우 SCSI 포트 드라이버는 미니포트 드라이버의 HwScsiWmiExecuteMethod 루틴을 호출합니다.
미니포트 드라이버가 HwScsiWmiExecuteMethod 루틴을 구현하지 않는 경우 미니포트 드라이버가 ScsiPortWmiDispatchFunction전달하는 SCSI_WMILIB_CONTEXT ExecuteWmiMethod NULL 설정해야 합니다. 이 경우 포트 드라이버는 호출자에게 SRB_STATUS_ERROR 반환합니다.
메서드가 출력을 생성하는 경우 미니포트 드라이버는 OutBufferSize 출력 버퍼의 크기를 확인한 후 부작용이 있거나 두 번 수행해서는 안 되는 작업을 수행해야 합니다. 예를 들어 메서드가 카운터 그룹의 값을 반환한 다음 카운터를 다시 설정하는 경우 미니포트 드라이버는 카운터를 다시 설정하기 전에 버퍼 크기를 확인해야 합니다. 이렇게 하면 포트 드라이버가 더 큰 버퍼로 요청을 안전하게 다시 전송할 수 있습니다. 버퍼가 너무 작은 경우 미니포트 드라이버는 요청을 수행하는 데 필요한 출력 버퍼의 크기와 SRB_STATUS_DATA_OVERRUN 사용하여 ScsiPortWmiPostProcess 호출해야 합니다.
미니포트 드라이버는 메서드를 실행하고 출력(있는 경우)을 버퍼에 씁니다. HwScsiWmiExecuteMethod반환하기 전에 미니포트 드라이버는 적절한 SrbStatus 값과 출력 버퍼에 사용된 바이트 수를 사용하여 ScsiPortWmiPostProcess 호출합니다.
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 바탕 화면 |
헤더 | scsiwmi.h(Scsiwmi.h 포함) |