다음을 통해 공유


WdfWmiInstanceCreate 함수(wdfwmi.h)

[KMDF에만 적용]

WdfWmiInstanceCreate 메서드는 WMI 데이터 공급자의 인스턴스를 나타내는 WMI 인스턴스 개체를 만듭니다.

통사론

NTSTATUS WdfWmiInstanceCreate(
  [in]            WDFDEVICE                Device,
  [in]            PWDF_WMI_INSTANCE_CONFIG InstanceConfig,
  [in, optional]  PWDF_OBJECT_ATTRIBUTES   InstanceAttributes,
  [out, optional] WDFWMIINSTANCE           *Instance
);

매개 변수

[in] Device

인스턴스를 만드는 디바이스를 나타내는 프레임워크 디바이스 개체에 대한 핸들입니다. 디바이스 개체는 제어 디바이스 개체일 수 없습니다.

[in] InstanceConfig

WMI 데이터 공급자 인스턴스에 대한 구성 정보를 포함하는 호출자 초기화된 WDF_WMI_INSTANCE_CONFIG 구조체에 대한 포인터입니다.

[in, optional] InstanceAttributes

새 WMI 인스턴스 개체에 대한 드라이버 제공 개체 특성을 포함하는 호출자 할당 WDF_OBJECT_ATTRIBUTES 구조체에 대한 포인터입니다. 구조체의 ParentObject 멤버는 NULL 합니다. 이 매개 변수는 선택 사항이며 WDF_NO_OBJECT_ATTRIBUTES 수 있습니다.

[out, optional] Instance

새 WMI 인스턴스 개체에 대한 핸들을 받는 위치에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL 수 있습니다.

반환 값

WdfWmiInstanceCreate 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.

반환 코드 묘사
STATUS_INVALID_PARAMETER
잘못된 매개 변수가 검색되었습니다.
STATUS_INFO_LENGTH_MISMATCH
InstanceConfig 매개 변수가 가리키는 WDF_WMI_INSTANCE_CONFIG 구조체의 크기가 잘못되었습니다.
STATUS_INSUFFICIENT_RESOURCES
메모리가 부족했습니다.
STATUS_INTEGER_OVERFLOW
드라이버는 WDF_WMI_INSTANCE_CONFIG 구조체의 UseContextForQuery 멤버를 TRUE 설정하지만 InstanceAttributes 매개 변수의 WDF_OBJECT_ATTRIBUTES 구조에서 ULONG_MAX보다 큰 컨텍스트 공간 크기를 지정했습니다.
 

WdfWmiInstanceCreate 메서드가 반환할 수 있는 다른 반환 값 목록은 Framework 개체 만들기 오류참조하세요.

이 메서드는 다른NTSTATUS 값을 반환할 수도 있습니다.

드라이버에서 잘못된 개체 핸들을 제공하면 버그 검사가 수행됩니다.

발언

드라이버가 공급자의 여러 인스턴스를 만드는 경우 드라이버는 WdfWmiInstanceCreate호출하기 전에 WdfWmiProviderCreate 호출하여 공급자 개체를 만들어야 합니다. 드라이버는 WDF_WMI_INSTANCE_CONFIG 구조체에 핸들을 배치하여 공급자 개체의 핸들을 WdfWmiInstanceCreate 전달합니다. 드라이버가 공급자 개체 핸들을 제공하는 경우 Device 매개 변수는 사용되지 않으며 NULL 수 있습니다.

드라이버가 공급자의 단일 인스턴스를 만드는 경우 WdfWmiInstanceCreate호출하기 전에 WdfWmiInstanceCreate 호출할 필요가 없습니다. 이 경우 WdfWmiInstanceCreate WMI 공급자 개체도 만듭니다. 따라서 드라이버의 WDF_WMI_INSTANCE_CONFIG 구조에는 WMI 데이터 공급자를 설명하는 WDF_WMI_PROVIDER_CONFIG 구조체에 대한 포인터가 포함되어야 합니다.

프레임워크는 드라이버의 PDO(물리적 디바이스 개체)의 디바이스 인스턴스 ID에서 애플리케이션에서 사용할 수 있는 동적 인스턴스 이름을 만들도록 WMI에 지시합니다. (프레임워크는 WDM(Windows 드라이버 모델) 드라이버가 IRP_MN_REGINFO 또는 IRP_MN_REGINFO_EX 구조에 설정한 정적 인스턴스 이름을 지원하지 않습니다.

WMI 인스턴스 개체의 부모는 WMI 공급자 개체입니다. 드라이버는 이 부모를 변경할 수 없으며 ParentObject 멤버 또는 WDF_OBJECT_ATTRIBUTES 구조체는 NULL 합니다.

드라이버가 WdfWmiInstanceCreate호출한 후 WdfWmiInstanceGetProvider 호출하여 부모 공급자 개체에 대한 핸들을 가져오고 WdfWmiInstanceGetDevice 공급자의 디바이스에 대한 핸들을 가져올 수 있습니다.

WdfWmiInstanceCreate 메서드에 대한 자세한 내용은 Framework-Based 드라이버 지원 WMI를 참조하세요.

InstanceConfig 가리키는 WDF_WMI_INSTANCE_CONFIG 구조체의 Register 멤버가 TRUE 경우 WdfWmiInstanceCreate 공급자 인스턴스를 동기적으로 등록합니다( 즉, 반환하기 전에) 이 메서드가 IRQL = PASSIVE_LEVEL 호출되고 IRQL > PASSIVE_LEVEL 호출되면 비동기적으로 호출됩니다.

예제

다음 코드 예제는 PCIDRV 샘플 드라이버입니다. 이 예제에서는 디바이스에 대한 MOF 리소스 이름을 등록하고 WDF_WMI_PROVIDER_CONFIG 구조와 WDF_WMI_INSTANCE_CONFIG 구조를 초기화하며 WdfWmiInstanceCreate 호출합니다.

NTSTATUS
PciDrvWmiRegistration(
    WDFDEVICE  Device
    )
{
    WDF_WMI_PROVIDER_CONFIG  providerConfig;
    WDF_WMI_INSTANCE_CONFIG  instanceConfig;
    NTSTATUS  status;
    DECLARE_CONST_UNICODE_STRING(mofRsrcName, MOFRESOURCENAME);

    status = WdfDeviceAssignMofResourceName(
                                            Device,
                                            &mofRsrcName
                                            );
    if (!NT_SUCCESS(status)) {
        return status;
    }
    WDF_WMI_PROVIDER_CONFIG_INIT(
                                 &providerConfig,
                                 &PCIDRV_WMI_STD_DATA_GUID
                                 );
    providerConfig.MinInstanceBufferSize = sizeof(PCIDRV_WMI_STD_DATA);

    WDF_WMI_INSTANCE_CONFIG_INIT_PROVIDER_CONFIG(
                                                 &instanceConfig,
                                                 &providerConfig
                                                 );
    instanceConfig.Register = TRUE;
    instanceConfig.EvtWmiInstanceQueryInstance = EvtWmiDeviceInfoQueryInstance;
    instanceConfig.EvtWmiInstanceSetInstance = EvtWmiDeviceInfoSetInstance;

    status = WdfWmiInstanceCreate(
                                  Device,
                                  &instanceConfig,
                                  WDF_NO_OBJECT_ATTRIBUTES,
                                  WDF_NO_HANDLE
                                  );
    if (!NT_SUCCESS(status)) {
        return status;
    }
    return status;
}

요구 사항

요구
대상 플랫폼 보편적
최소 KMDF 버전 1.0
헤더 wdfwmi.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(프레임워크 라이브러리 버전 관리 참조)
IRQL <=DISPATCH_LEVEL
DDI 규정 준수 규칙 DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

참고 항목

IRP_MN_REGINFO

WDF_OBJECT_ATTRIBUTES

WDF_WMI_INSTANCE_CONFIG

WDF_WMI_INSTANCE_CONFIG_INIT_PROVIDER_CONFIG

WDF_WMI_PROVIDER_CONFIG

WDF_WMI_PROVIDER_CONFIG_INIT

WdfDeviceAssignMofResourceName

WdfWmiInstanceGetDevice

WdfWmiInstanceGetProvider

WdfWmiProviderCreate