다음을 통해 공유


IRP_MN_ENABLE_COLLECTION

하나 이상의 데이터 블록을 수집할 수 있는 시간이 오래 걸리거나 비용이 많이 드는 것으로 등록하는 모든 WMI 드라이버는 이 IRP를 처리해야 합니다. 드라이버는 WmiSystemControl 을 호출하거나 WMI 요청 처리에 설명된 대로 IRP 자체를 처리 하여 WMI IRP를 처리할 수 있습니다.

드라이버가 WmiSystemControl 을 호출하여 IRP_MN_ENABLE_COLLECTION 요청을 처리하는 경우 WMI는 해당 드라이버의 DpWmiFunctionControl 루틴을 호출합니다.

주 코드

IRP_MJ_SYSTEM_CONTROL

보낸 경우

WMI는 드라이버가 수집 비용이 많이 드는 것으로 등록된 데이터 블록에 대한 데이터 누적을 시작하도록 드라이버에 요청하기 위해 이 IRP를 보냅니다.

WMI는 임의 스레드 컨텍스트에서 IRQL = PASSIVE_LEVEL 이 IRP를 보냅니다.

입력 매개 변수

Parameters.WMI.ProviderId 는 요청에 응답해야 하는 드라이버의 디바이스 개체를 가리킵니다. 이 포인터는 IRP에서 드라이버의 I/O 스택 위치에 있습니다.

Parameters.WMI.DataPath 는 데이터가 누적되는 데이터 블록을 식별하는 GUID를 가리킵니다.

출력 매개 변수

없음

I/O 상태 블록

드라이버가 WmiSystemControl을 호출하여 IRP를 처리하는 경우 WMI는 I/O 상태 블록에서 Irp-IoStatus.Status>Irp-IoStatus.Information>를 설정합니다.

그렇지 않으면 드라이버는 Irp-IoStatus.Status>를 STATUS_SUCCESS 또는 다음과 같은 적절한 오류 상태 설정합니다.

STATUS_WMI_GUID_NOT_FOUND

STATUS_INVALID_DEVICE_REQUEST

성공하면 드라이버는 Irp-IoStatus.Information>를 0으로 설정합니다.

작업

드라이버는 WMIREGGUID 또는 WMIGUIDREGINFO 구조의 Flags 멤버에서 WMIREG_FLAG_EXPENSIVE 설정하여 수집 비용이 많이 드는 데이터 블록을 등록합니다. 드라이버는 데이터 블록을 등록하거나 업데이트할 때 이러한 구조를 WMI에 전달합니다. 드라이버는 데이터 수집을 시작하라는 명시적 요청을 받을 때까지 이러한 블록에 대한 데이터를 누적할 필요가 없습니다.

드라이버는 WmiSystemControl 을 호출하거나 WMI 요청 처리에 설명된 대로 IRP 자체를 처리 하여 WMI IRP를 처리할 수 있습니다.

드라이버가 WmiSystemControl을 호출하여 WMI IRP를 처리하는 경우 해당 루틴은 드라이버의 DpWmiFunctionControl 루틴을 호출하거나 드라이버가 루틴을 정의하지 않으면 STATUS_SUCCESS 반환합니다.

드라이버가 IRP_MN_ENABLE_COLLECTION 요청 자체를 처리하는 경우 Parameters.WMI.ProviderId 가 드라이버가 IoWMIRegistrationControl에 전달한 포인터와 동일한 디바이스 개체를 가리키는 경우에만 처리해야 합니다. 그렇지 않으면 드라이버가 다음 하위 드라이버에 요청을 전달해야 합니다.

요청을 처리하기 전에 드라이버는 Parameters.WMI.DataPath 가 드라이버가 지원하는 GUID를 가리키는지 확인해야 합니다. 그렇지 않으면 드라이버가 IRP에 실패하고 STATUS_WMI_GUID_NOT_FOUND 반환해야 합니다. 데이터 블록이 유효하지만 WMIREG_FLAG_EXPENSIVE 등록되지 않은 경우 드라이버는 STATUS_SUCCESS 반환하고 추가 작업을 수행할 수 없습니다.

블록이 유효하고 WMIREG_FLAG_EXPENSIVE 등록된 경우 드라이버는 해당 데이터 블록의 모든 인스턴스에 대해 데이터 수집을 사용하도록 설정합니다.

드라이버가 데이터 블록에 대해 데이터 수집을 이미 사용하도록 설정했는지 여부를 검사 필요가 없습니다. WMI는 첫 번째 데이터 소비자가 블록을 사용하도록 설정한 후 데이터 블록을 사용하도록 설정하는 단일 요청만 보냅니다. WMI는 중간 사용 안 함 요청 없이 활성화할 다른 요청을 보내지 않습니다.

요구 사항

헤더

Wdm.h(Wdm.h, Ntddk.h 또는 Ntifs.h 포함)

추가 정보

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_DISABLE_COLLECTION

WMILIB_CONTEXT

WMIREGGUID

WmiSystemControl