WdfWmiProviderCreate 함수(wdfwmi.h)
[KMDF에만 적용]
WdfWmiProviderCreate 메서드는 WMI 데이터 블록을 나타내는 WMI 공급자 개체를 만듭니다.
통사론
NTSTATUS WdfWmiProviderCreate(
[in] WDFDEVICE Device,
[in] PWDF_WMI_PROVIDER_CONFIG WmiProviderConfig,
[in, optional] PWDF_OBJECT_ATTRIBUTES ProviderAttributes,
[out] WDFWMIPROVIDER *WmiProvider
);
매개 변수
[in] Device
새 공급자 개체의 부모 개체가 될 프레임워크 디바이스 개체에 대한 핸들입니다. 디바이스 개체는 제어 디바이스 개체일 수 없습니다.
[in] WmiProviderConfig
WMI 데이터 블록에 대한 구성 정보를 포함하는 호출자 초기화된 WDF_WMI_PROVIDER_CONFIG 구조체에 대한 포인터입니다.
[in, optional] ProviderAttributes
새 WMI 공급자 개체에 대한 드라이버 제공 개체 특성을 포함하는 호출자 할당 WDF_OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 구조체의 ParentObject 멤버는 NULL 합니다. 이 매개 변수는 선택 사항이며 WDF_NO_OBJECT_ATTRIBUTES 수 있습니다.
[out] WmiProvider
새 WMI 공급자 개체에 대한 핸들을 받는 위치에 대한 포인터입니다.
반환 값
WdfWmiProviderCreate 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 묘사 |
---|---|
|
잘못된 매개 변수가 검색되었습니다. |
|
WmiProviderConfig 매개 변수가 가리키는 WDF_WMI_PROVIDER_CONFIG 구조체의 크기가 잘못되었습니다. |
|
작업을 완료할 메모리가 부족했습니다. |
|
드라이버는 이미 지정된 디바이스 및 WMI 데이터 블록에 대해 WdfWmiProviderCreate 호출했습니다. |
WdfWmiProviderCreate 메서드가 반환할 수 있는 다른 반환 값 목록은 Framework 개체 만들기 오류참조하세요.
이 메서드는 다른NTSTATUS 값을 반환할 수도 있습니다.
드라이버에서 잘못된 개체 핸들을 제공하면 버그 검사가 수행됩니다.
발언
드라이버가 공급자의 여러 인스턴스를 만드는 경우 드라이버가 WdfWmiProviderCreate 호출하여 WMI 공급자 개체를 만들어야 합니다. 드라이버가 공급자의 인스턴스를 하나만 만드는 경우 먼저 WdfWmiProviderCreate호출하지 않고 WdfWmiInstanceCreate 호출할 수 있습니다.
드라이버는 언제든지 WdfWmiProviderCreate 호출할 수 있지만 드라이버는 일반적으로 EvtDriverDeviceAdd 콜백 함수 내에서 WdfWmiProviderCreate 호출합니다.
각 WMI 공급자 개체의 부모는 디바이스의 프레임워크 디바이스 개체입니다. 드라이버는 이 부모를 변경할 수 없으며 ParentObject 멤버 또는 WDF_OBJECT_ATTRIBUTES 구조체는 NULL 합니다.
드라이버가 WdfWmiProviderCreate 호출한 후 드라이버는 WdfWmiProviderGetDevice 호출하여 공급자 개체의 부모 디바이스 개체에 대한 핸들을 검색할 수 있습니다.
드라이버가 WMI 공급자 개체를 만든 후에는 해당 개체를 삭제할 수 없습니다. 프레임워크는 디바이스를 나타내는 프레임워크 디바이스 개체를 삭제할 때 디바이스의 WMI 공급자 개체를 삭제합니다. WMI 공급자 개체는 최소 시스템 리소스를 사용합니다.
WdfWmiProviderCreate 메서드에 대한 자세한 내용은 Framework-Based 드라이버 지원 WMI를 참조하세요.
예제
다음 코드 예제에서는 WDF_WMI_PROVIDER_CONFIG 구조를 초기화하고 WdfWmiProviderCreate 호출합니다.
WDF_WMI_PROVIDER_CONFIG config;
WDFWMIPROVIDER provider;
GUID providerGuid = MY_WMI_DATA_BLOCK_GUID;
NTSTATUS status;
WDF_WMI_PROVIDER_CONFIG_INIT(
&config,
providerGuid
);
config.Flags = WdfWmiProviderTracing;
config.EvtWmiProviderFunctionControl = MyProviderFunctionControl;
status = WdfWmiProviderCreate(
Device,
&config,
WDF_NO_OBJECT_ATTRIBUTES,
&provider
);
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
최소 KMDF 버전 | 1.0 |
헤더 | wdfwmi.h(Wdf.h 포함) |
라이브러리 | Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조) |
IRQL | <=DISPATCH_LEVEL |
DDI 규정 준수 규칙 | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |