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 구조의 플래그에서 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 루틴을 구현하지 않는 경우 WmiFunctionControlNULL로 설정해야 합니다. 후자의 경우 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