다음을 통해 공유


WMI_FUNCTION_CONTROL_CALLBACK 콜백 함수(wmilib.h)

DpWmiFunctionControl 루틴은 이벤트 알림을 사용하거나 사용하지 않도록 설정하고 드라이버가 수집 비용이 많이 드는 것으로 등록된 데이터 블록에 대해 데이터 수집을 사용하거나 사용하지 않도록 설정합니다. 이 루틴은 선택 사항입니다.

통사론

WMI_FUNCTION_CONTROL_CALLBACK WmiFunctionControlCallback;

NTSTATUS WmiFunctionControlCallback(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PIRP Irp,
  [in] ULONG GuidIndex,
  [in] WMIENABLEDISABLECONTROL Function,
  [in] BOOLEAN Enable
)
{...}

매개 변수

[in] DeviceObject

드라이버의 WDM DEVICE_OBJECT 구조체에 대한 포인터입니다.

[in] Irp

IRP에 대한 포인터입니다.

[in] GuidIndex

WmiSystemControl전달된 WMILIB_CONTEXT 구조에서 드라이버가 제공한 GUID 목록에 0부터 시작하는 인덱스를 제공하여 데이터 블록을 지정합니다.

[in] Function

사용하거나 사용하지 않도록 설정할 내용을 지정합니다. WmiEventControl 이벤트를 나타내며, WmiDataBlockControl 수집 비용이 많이 드는 것으로 등록된 블록에 대한 데이터 수집을 나타냅니다(즉, 드라이버가 블록을 등록하는 데 사용되는 WMIGUIDREGINFO 구조의 Flags WMIREG_FLAG_EXPENSIVE 블록).

[in] Enable

이벤트 또는 데이터 수집을 사용하도록 설정하는 TRUE 지정하거나 FALSE 사용하지 않도록 설정합니다.

반환 값

DpWmiFunctionControl STATUS_SUCCESS 또는 다음과 같은 적절한 오류 상태를 반환합니다.

발언

WMI는 드라이버가 다음 요청 중 하나에 대한 응답으로 WmiSystemControl 호출한 후 드라이버의 DpWmiFunctionControl 루틴을 호출합니다.

IRP_MN_ENABLE_COLLECTION

IRP_MN_DISABLE_COLLECTION

IRP_MN_ENABLE_EVENTS

IRP_MN_DISABLE_EVENTS

드라이버가 DpWmiFunctionControl 루틴을 구현하는 경우 드라이버는 WmiSystemControl전달하는 WMILIB_CONTEXT 구조체의 WmiFunctionControl 멤버에 루틴의 주소를 배치해야 합니다. 드라이버가 DpWmiFunctionControl 루틴을 구현하지 않는 경우 WmiFunctionControl NULL 설정해야 합니다. 후자의 경우 WMI는 호출자에게 STATUS_SUCCESS 반환합니다.

드라이버는 모든 입력 인수의 유효성을 검사해야 합니다. 특히 드라이버는 다음을 수행해야 합니다.

  • WMILIB_CONTEXT 구조체의 GuidCount 멤버에 따라 GuidIndex 값이 0과 GuidCount-1 사이인지 확인합니다.
  • 드라이버가 제거를 위해 지정된 데이터 블록에 플래그를 지정하지 않은지 확인합니다. 드라이버가 최근에 WMILIB_CONTEXT 구조에 포함된 WMIGUIDREGINFO 구조체에 WMIREG_FLAG_REMOVE_GUID 플래그를 지정한 경우 제거가 발생하기 전에 추가 요청이 도착할 수 있습니다.
첫 번째 데이터 소비자가 블록을 사용하도록 설정할 때 WMI가 단일 사용 요청을 보내고 마지막 데이터 소비자가 블록을 사용하지 않도록 설정할 때 단일 사용 안 함 요청을 보내기 때문에 드라이버가 블록에 대해 이벤트 또는 데이터 수집을 이미 사용하도록 설정했는지 여부를 확인할 필요가 없습니다. WMI는 DpWmiFunctionControl 호출하여 차단을 사용하지 않도록 설정하는 중간 호출 없이 블록을 사용하도록 설정하지 않습니다.

블록에 대한 이벤트 또는 데이터 수집을 사용하거나 사용하지 않도록 설정한 후 드라이버는 WmiCompleteRequest 호출하여 요청을 완료합니다.

이 루틴은 페이지 가능할 수 있습니다.

이 루틴을 구현하는 방법에 대한 자세한 내용은 WmiSystemControl을 호출하여 WMI IRP 처리하는참조하세요.

요구 사항

요구
대상 플랫폼 바탕 화면
헤더 wmilib.h(Wmilib.h 포함)
IRQL PASSIVE_LEVEL 호출합니다.

참고 항목

IRP_MN_DISABLE_COLLECTION

IRP_MN_DISABLE_EVENTS

IRP_MN_ENABLE_COLLECTION

IRP_MN_ENABLE_EVENTS

WMILIB_CONTEXT

WmiSystemControl