다음을 통해 공유


WMI 메서드 만들기

WMI 메서드를 만들려면 메서드에 대한 입력 및 출력 매개 변수를 정의합니다. 입력 및 출력 매개 변수는 특수 WMI 시스템 클래스 __PARAMETERS표시됩니다. 자세한 내용은 메서드 호출하기메서드 공급자 작성하기를 참조하세요.

이 항목에서는 다음 섹션에 대해 설명합니다.

MOF에서 WMI 클래스 메서드 만들기

WMI에서 공급자 메서드는 일반적으로 클래스가 나타내는 개체와 관련된 고유한 작업입니다. 작업을 실행하기 위해 속성 값을 변경하는 대신 메서드를 만들어야 합니다. 예를 들어, Win32_NetworkAdapter로 나타내는 NIC(네트워크 인터페이스 컨트롤러)를 활성화하거나 비활성화할 수 있습니다. 이러한 작업은 읽기/쓰기 속성으로 나타낼 수 있지만 메서드를 만드는 것이 좋습니다. 또는 클래스에 대해 상태 또는 값을 표시하려면 메서드가 아닌 읽기/쓰기 속성을 만드는 것이 좋습니다. Win32_NetworkAdapterNetEnabled 속성은 어댑터의 상태를 표시하지만, 상태 간 변경은 활성화 또는 비활성화 메서드를 통해 실행됩니다.

클래스 선언에는 하나 이상의 메서드 선언이 포함될 수 있습니다. 부모 클래스의 메서드를 상속하도록 선택하거나 직접 구현할 수 있습니다. 고유한 메서드를 구현하도록 선택한 경우 메서드를 선언하고 메서드를 특정 한정자 태그로 표시해야 합니다.

다음 절차에서는 기본 클래스에서 상속되지 않는 클래스에서 메서드를 선언하는 방법을 설명합니다.

메서드 선언하려면

  1. 클래스 선언의 중괄호와 한정자 사이의 메서드 이름을 정의합니다.

    다음 코드 예제에서는 메서드의 구문을 설명합니다.

    [Dynamic, Provider ("ProviderName")]
    class ClassName
    {
        [Implemented] <ReturnType> <MethodName>
            ([ParameterDirection, IDQualifier] 
            <ParameterType> <ParameterName>);
    };
    
  2. 완료되면 MOF 컴파일러를 호출하여 MOF(관리 개체 형식) 코드를 WMI 리포지토리에 삽입합니다.

    자세한 내용은 MOF 파일 컴파일을 참조하세요.

다음 목록에서는 메서드 선언의 요소를 정의합니다.

공급자

특정 공급자를 클래스 설명에 연결합니다. Provider 한정자의 값은 메서드를 지원하는 코드가 있는 위치를 WMI에 알려주는 공급자의 이름입니다. 또한 공급자는 동적 인스턴스가 있는 모든 클래스를 Dynamic 한정자를 사용하여 표시해야 합니다. 반대로 Dynamic 한정자를 사용하여 Implemented 메서드를 사용하여 정적 인스턴스가 포함된 클래스를 표시하지 마세요.

구현된

부모 클래스에서 메서드 구현을 상속하는 대신 메서드를 구현한다고 선언합니다. 기본적으로 WMI는 파생 클래스가 구현을 제공하지 않는 한 부모 클래스의 구현을 파생 클래스로 전파합니다. 구현된 한정자를 생략하면 메서드에 해당 클래스의 구현이 없음을 나타냅니다. Implemented 한정자 없이 메서드를 다시 선언하는 경우 WMI는 해당 메서드를 구현하지 않을 것으로 가정하고 호출될 때 부모 클래스 메서드 구현을 호출합니다. 따라서 Implemented 한정자를 연결하지 않고 파생 클래스에서 메서드를 다시 선언하는 것은 메서드에서 한정자를 추가하거나 제거할 때만 유용합니다.

ReturnType

메서드가 반환하는 값을 설명합니다. 메서드의 반환 값은 부울, 숫자, CHAR, STRING, DATETIME또는 스키마 개체여야 합니다. 반환 형식을 VOID선언하여 메서드가 아무 것도 반환하지 않음을 나타낼 수도 있습니다. 그러나 배열을 반환 값 형식으로 선언할 수는 없습니다.

MethodName

메서드의 이름을 정의합니다. 모든 메서드에는 고유한 이름이 있어야 합니다. WMI는 이름이 같고 서명이 다른 두 메서드가 한 클래스 또는 클래스 계층 내에 있는 것을 허용하지 않습니다. 따라서 메서드를 오버로드할 수도 없습니다.

파라미터 방향 (ParameterDirection)

매개 변수가 입력 매개 변수, 출력 매개 변수 또는 둘 다인지 설명하는 한정자를 포함합니다. 입력 매개 변수와 동일한 매개 변수 이름을 두 번 이상 사용하거나 출력 매개 변수로 두 번 이상 사용하지 마세요. InOut 한정자와 함께 동일한 매개 변수 이름이 표시되는 경우 이 기능은 개념적으로 단일 매개 변수에 In, Out 한정자를 사용하는 것과 동일합니다. 그러나 별도의 선언을 사용하는 경우 입력 및 출력 매개 변수는 ID 한정자의 수와 형식을 포함하여 다른 모든 면에서 정확히 동일해야 하며 한정자는 동일하고 명시적으로 선언되어야 합니다. 단일 매개 변수 선언 내에서 In, Out 한정자를 사용하는 것이 좋습니다.

IDQualifier

메서드의 매개 변수 시퀀스 내에서 각 매개 변수의 위치를 고유하게 식별하는 ID 한정자를 포함합니다. 기본적으로 MOF 컴파일러는 ID 한정자를 사용하여 매개 변수를 자동으로 표시합니다. 컴파일러는 첫 번째 매개 변수를 0 값으로 표시하고, 두 번째 매개 변수는 1(1) 등으로 표시합니다. 필요한 경우 MOF 코드에서 ID 시퀀스를 명시적으로 지정할 수 있습니다.

매개변수 유형 (ParameterType)

메서드가 허용할 수 있는 데이터 형식에 대해 설명합니다. 매개 변수 형식을 배열, 스키마 개체 또는 참조를 비롯한 모든 MOF 데이터 값으로 정의할 수 있습니다. 배열을 매개 변수로 사용하는 경우 배열을 언바운드 또는 명시적 크기로 사용합니다.

매개변수이름

매개 변수의 이름을 포함합니다. 이 시점에서 매개 변수의 기본값을 정의하도록 선택할 수도 있습니다. 초기 값이 없는 매개 변수는 할당되지 않은 상태로 유지됩니다.

다음 코드 예제에서는 매개 변수 목록 및 한정자를 설명합니다.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] sint32 InParam);
    [Implemented] 
    void MyMethod2 ([in, id(0)] sint32 InParam, 
       [out, id(1)] sint32 OutParam);
    [Implemented] 
    sint32 MyMethod3 ([in, out, id(0)] sint32 InOutParam);
};

다음 코드 예제에서는 MOF 매개 변수에서 배열을 사용하는 방법을 설명합니다.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk DiskParam[]);
    [Implemented] 
    sint32 MyMethod2 ([in, id(0)] Win32_LogicalDisk DiskParam[32]);
};

다음 코드 예제에서는 매개 변수 및 반환 값으로 스키마 개체를 사용하는 방법에 대해 설명합니다.

[Dynamic, Provider ("ProviderX")]
class MyClass
{
    [Implemented] sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk 
        DiskParam);
    [Implemented] 
    Win32_LogicalDisk MyMethod2 ([in, id(0)] string DiskVolLabel);
};

다음 코드 예제에서는 두 개의 참조를 포함하는 방법을 설명합니다. 하나는 Win32_LogicalDisk 클래스의 인스턴스에 대한 것이고, 다른 하나는 알 수 없는 개체 형식의 인스턴스입니다.

[Dynamic, Provider("ProviderX")]
class MyClass
{
    [Implemented] 
    sint32 MyMethod1 ([in, id(0)] Win32_LogicalDisk ref DiskRef);
    [Implemented] 
    sint32 MyMethod2 ([in, id(0)] object ref AnyObject);
};

C++에서 WMI 클래스 메서드 만들기

다음 절차에서는 WMI 클래스 메서드를 프로그래밍 방식으로 만드는 방법을 설명합니다.

프로그래밍 방식으로 WMI 클래스 메서드를 만들려면

  1. 메서드가 속할 클래스를 만듭니다.

    메서드를 만들기 전에 먼저 메서드를 배치할 클래스가 있어야 합니다.

  2. IWbemServices::GetObject 또는 getObjectAsync사용하여 __PARAMETERS 시스템 클래스의 두 자식 클래스를 검색합니다.

    첫 번째 자식 클래스를 사용하여 입력 매개 변수를 설명하고, 두 번째 자식 클래스를 사용하여 출력 매개 변수를 설명합니다. 필요한 경우 단일 검색을 수행한 다음 IWbemClassObject::Clone 메서드를 호출할 수 있습니다.

  3. IWbemClassObject::Put를 하나 이상의 호출을 사용하여 첫 번째 클래스에는 입력 매개 변수를, 두 번째 클래스에는 출력 매개 변수를 작성합니다.

    메서드에 대한 매개 변수를 설명할 때 다음 규칙 및 제한을 준수합니다.

    • [in, out] 매개변수를 별도의 항목으로 처리하세요. 하나는 in 매개변수가 포함된 객체에, 다른 하나는 out 매개변수가 포함된 객체에 위치합니다.

    • [in, out] 한정자를 제외한 나머지 한정자는 반드시 정확히 동일해야 합니다.

    • 각 매개 변수에 대해 하나씩 0부터 시작하여 ID 한정자를 지정합니다.

      입력 또는 출력 매개 변수의 순서는 각 매개 변수의 ID 한정자 값에 의해 설정됩니다. 모든 입력 인수는 출력 인수 앞에 있어야 합니다. 기존 메서드 공급자를 업데이트할 때 메서드 입력 및 출력 매개 변수의 순서를 변경하면 메서드를 호출하는 애플리케이션이 실패할 수 있습니다. 이미 설정된 시퀀스에 삽입하지 않고 기존 매개 변수의 끝에 새 입력 매개 변수를 추가합니다.

      ID 한정자 시퀀스에 간격을 두지 않도록 합니다.

    • 출력 매개 변수 클래스에 반환 값을 returnValue 속성으로 배치합니다.

      이 메서드의 반환 값으로 속성을 식별 합니다. 이 속성의 CIM 형식은 메서드의 반환 형식입니다. 메서드가 void 반환 형식을 가질 경우, ReturnValue 속성을 포함하지 마십시오. 또한 ReturnValue 속성에는 메서드의 인수와 같은 ID 한정자를 가질 수 없습니다. ReturnValue 속성에 ID 한정자를 할당하면 WMI 오류가 발생합니다.

    • 클래스의 속성에 대한 기본 매개 변수 값을 표시합니다.

  4. __PARAMETERS 개체를 IWbemClassObject::PutMethod를 호출하여 부모 클래스에 배치합니다.

    한 번의 PutMethod 호출은 두 __PARAMETERS 개체를 모두 클래스에 배치할 수 있습니다.

클래스 만들기