다음을 통해 공유


WmiSystemControl 함수(wmilib.h)

WmiSystemControl 루틴은 WMI 라이브러리 지원 루틴을 사용하여 WMI IRP를 처리하는 드라이버의 디스패치 루틴입니다.

구문

NTSTATUS WmiSystemControl(
  [in]      PWMILIB_CONTEXT         WmiLibInfo,
  [in]      PDEVICE_OBJECT          DeviceObject,
  [in, out] PIRP                    Irp,
  [out]     PSYSCTL_IRP_DISPOSITION IrpDisposition
);

매개 변수

[in] WmiLibInfo

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

[in] DeviceObject

드라이버의 DEVICE_OBJECT 대한 포인터입니다.

[in, out] Irp

IRP에 대한 포인터입니다.

[out] IrpDisposition

IRP가 처리된 방법을 나타내는 SYSCTL_IRP_DISPOSITION 형식의 열거형 값에 대한 포인터입니다. WmiSystemControl 은 성공하지 않은 NTSTATUS 코드를 반환하는 경우에도 항상 이 값을 설정합니다.

SYSCTL_IRP_DISPOSITION Wmilib.h의 열거형이며 다음 값을 포함합니다.

IrpProcessed

IRP가 처리되고 완료되었을 수 있습니다. WmiSystemControl에서 호출한 드라이버의 DpWmiXxx 루틴이 IRP를 완료하지 않은 경우 드라이버는 WmiSystemControl이 반환된 후 WmiCompleteRequest를 호출하여 IRP를 완료해야 합니다.

IrpNotCompleted

WMI가 오류를 감지하고 적절한 오류 코드로 IRP를 설정하거나 IRP_MN_REGINFO 또는 IRP_MN_REGINFO_EX 요청을 처리했기 때문에 IRP가 처리되었지만 완료되지 않았습니다. 드라이버는 IoCompleteRequest를 호출하여 IRP를 완료해야 합니다.

IrpNotWmi

IRP는 WMI 요청이 아닙니다(즉, WMI는 IRP의 부 코드를 인식하지 못함). 드라이버가 이 IRP_MN_XXX사용하여 IRP_MJ_SYSTEM_CONTROL 요청을 처리하는 경우 IRP를 처리해야 합니다. 그렇지 않으면 드라이버가 IRP를 다음 하위 드라이버로 전달해야 합니다. 드라이버가 가장 낮은 수준의 드라이버인 경우 IRP를 완료해야 합니다.

IrpForward

IRP는 다른 디바이스 개체를 대상으로 합니다(즉, IRP의 Parameters.WMI.ProviderId 에 있는 디바이스 개체 포인터가 IoWMIRegistrationControl 호출에서 드라이버가 전달한 포인터와 일치하지 않음). 드라이버는 IRP를 다음 하위 드라이버로 전달해야 합니다. 드라이버가 가장 낮은 수준의 드라이버인 경우 IRP를 완료해야 합니다.

반환 값

WmiSystemControl 은 STATUS_SUCCESS 또는 다음 오류 코드 중 하나를 반환합니다.

설명

드라이버가 WMI IRP 부 코드를 사용하여 IRP_MJ_SYSTEM_CONTROL 요청을 받으면 드라이버의 WMILIB_CONTEXT 구조에 대한 포인터, 디바이스 개체에 대한 포인터 및 IRP에 대한 포인터를 사용하여 WmiSystemControl을 호출합니다. WMILIB_CONTEXT 구조는 드라이버의 데이터 블록 및 이벤트 블록에 대한 등록 정보를 포함하고 WMI 라이브러리 콜백 루틴에 대한 진입점을 정의합니다.

WmiSystemControl 은 IRP가 WMI 요청인지 확인하고 요청에 지정된 블록이 드라이버에 유효한지 여부를 확인합니다. 이 경우 드라이버의 WMILIB_CONTEXT 구조에서 적절한 DpWmiXxx 진입점을 호출하여 IRP를 처리합니다. WMI는 드라이버의 DpWmiXxx 루틴을 호출할 때 IRQL PASSIVE_LEVEL 실행됩니다.

드라이버가 IRP_MJ_SYSTEM_CONTROL 요청을 다음 하위 드라이버로 전달할 때 IRQL PASSIVE_LEVEL 실행 중이어야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 이상 버전의 Windows에서 사용할 수 있습니다.
대상 플랫폼 유니버설
헤더 wmilib.h(Wmilib.h 포함)
라이브러리 Wmilib.lib
IRQL PASSIVE_LEVEL(설명 섹션 참조)
DDI 규정 준수 규칙 WmiComplete(wdm)

추가 정보

DpWmiExecuteMethod

DpWmiFunctionControl

DpWmiQueryDataBlock

DpWmiQueryReginfo

DpWmiSetDataBlock

DpWmiSetDataItem

IRP_MJ_SYSTEM_CONTROL

IRP_MN_REGINFO_EX

IoCompleteRequest

WMILIB_CONTEXT