다음을 통해 공유


SMP 개발

WMI 공급자

SMP(스토리지 관리 공급자) 인터페이스는 WMI 기반입니다. WMI v1을 사용하여 SMP를 작성할 수 있지만 C/C++를 사용하여 WMI v2 공급자를 작성하는 것이 좋습니다. .NET 플랫폼을 통해 몇 가지 중요한 기능을 사용할 수 없으므로 SMP 개발에 .NET Framework를 사용하지 않는 것이 좋습니다. 추가:

  • WMI v1에는 COM에 대한 종속성이 매우 많기 때문에 학습하기 어렵고 시간이 많이 걸릴 수 있습니다.
  • WMI v2는 WMI v1보다 업계 표준에 더 가깝습니다. WMI v2는 DCOM 대신 WS-Management를 사용합니다.
  • 공급자는 WMI v2에서 더 나은 오류/이벤트를 활용할 수 있습니다.
  • 공급자는 WMI v2에서 PowerShell 확장 및 통합을 활용할 수 있습니다.

개발 리소스 검사 목록

Item 위치 참고 항목
기본 클래스 MOF 파일: Storagewmi_provider.mof 및 파일 이름에 "msft_"로 시작하는 모든 MOF 파일입니다. Windows SDK(소프트웨어 개발 키트) %SDK_Installed_Location%\Windows Kits\x.x\Include\um 아래
기타 필수 MOF 파일: qualifiers.mof 및 CIM_Error.mof 분산 관리 태스크 포스: http://dmtf.org/standards/cim 이러한 파일은 Microsoft 정의가 아닌 파일입니다.
헤더 파일: mi.h Windows SDK %SDK_Installed_Location%\Windows Kits\x.x\Include\um 아래
공급자 기본 생성 도구 및 .dll 파일: Convert-MofToProvider.exe Windows SDK %SDK_Installed_Location%\Windows Kits\x.x\bin\x64\ 또는 ...\bin\x86
공급자 등록 도구: Register-CimProvider.exe %OS_Install_Path%\Windows\System32\

MOF 정의

초기 SMP 개발은 다음 세 가지 간단한 단계로 수행됩니다.

  1. 공급자 MOF를 확장합니다.
  2. 공급자 구조(또는 스텁)를 생성합니다.
  3. 스텁을 구현합니다.

공급자 MOF 확장

SMP MOF는 Windows SDK 포함 폴더에 있습니다. 접두사는 MSFT_*입니다. 이러한 파일을 CIM_Error.mof 및 qualifiers.mof와 함께 개발 디렉터리에 복사합니다. 각 MOF는 SMP의 기반을 형성하는 하나 이상의 추상 클래스를 정의합니다.

다른 언어와 마찬가지로 추상 클래스는 직접 구현할 수 없습니다. 별도의 구현 클래스에서 파생되고 구현되어야 합니다. 고유한 MOF를 만들고 모든 관련 공급자 MOF를 포함합니다. 그런 다음 공급자가 구현할 각 기본 클래스에 대해 파생 클래스를 만듭니다. 클래스에 대한 고유한 접두사를 선택해야 합니다. 예를 들어 "Contoso Storage Inc."라는 회사입니다. 은 CONTOSO_* 또는 CSI_*를 사용하여 클래스의 접두사를 지정합니다. 예를 들어 MSFT_StorageProvider 경우 "CONTOSO_" 접두사는 CONTOSO_StorageProvider 생성합니다. 이제 클래스는 다음과 같이 표시됩니다.

    class CONTOSO_StorageProvider : MSFT_StorageProvider
    {
        ...
    }

이러한 기본 클래스를 만든 후에는 구현하려는 메서드에 대한 모든 메서드 선언을 복사해야 합니다. 구현 여부에 관계없이 복사되지 않은 모든 메서드는 MI_RESULT_NOT_SUPPORTED 반환합니다. 클래스 속성을 복사할 필요가 없습니다. MOF 컴파일 오류를 최소화하려면 메서드 및 매개 변수의 모든 한정자를 유지합니다.

마지막으로 MOF의 시작 부분에 다음 줄을 포함해야 합니다.

    #pragma include("storagewmi_provider.mof")
    #pragma include("msft_qualifiers.mof")

1단계를 마치면 이제 Convert-MofToProvider.exe 사용하여 공급자 스텁을 생성할 준비가 되었습니다. 이 명령에 대한 입력을 제공할 때는 파생 클래스만 지정해야 합니다. 기본 클래스의 헤더는 암시적으로 생성됩니다.

SMP 예제 MOF를 참조 하세요.

공급자 스켈레톤 생성

SMP 개발자는 WMI SDK의 Convert-MofToProvider.exe 도구를 사용하여 공급자 기본 프로젝트를 생성할 수 있습니다. 이 프로젝트에는 WMI 공급자 메서드로 미리 채워진 헤더 및 C 원본 파일 목록이 포함됩니다. 개발자는 이러한 메서드에 대한 구현을 제공하여 스토리지 하드웨어를 지원할 수 있습니다.

"개발 리소스 검사 목록" 섹션의 모든 MOF와 만든 MOF를 하나의 폴더에 배치합니다. 다음으로 명령 프롬프트에서 다음 명령을 사용하여 공급자 구조를 생성합니다(최신 업데이트 옵션에 대한 도움말 텍스트 참조).

    Convert-MofToProvider.exe
        -MofFile <path to your provider mof>
        -ClassList <list of ALL classes listed in your mof, space separated>
        -IncludePath <path to qualifiers.mof and CIM_Error.mof>
        -SkipQualifiers
        -SkipLocalize

마지막으로 mi.h 헤더 파일을 개발 프로젝트에 포함합니다.

StorageProvider, StorageSubSystem 및 VirtualDisk는 필수 클래스입니다. 스토리지 배열의 기능에 따라 StoragePool, ResiliencSetting, PhysicalDisk, MaskingSet, InitiatorId, TargetPort, TargetPortal, OffloadDataTransferSetting 및 StorageJob은 선택 사항입니다.

개발 및 테스트 프로세스를 용이하게 하기 위해 권장되는 구현 순서는 다음과 같습니다.

  1. EnumerateInstances: 필요한 클래스 StorageProvider, StorageSubSystem, VirtualDisk에 대한 기본 쿼리를 지원합니다.
  2. GetInstance: GetInstance는 메서드 호출을 포함하여 많은 WMI 작업에 필요합니다.
  3. Create*/DeleteObject: 공급자가 지원하는 개체에 대한 모든 만들기 및 삭제 메서드를 구현합니다.
  4. 개체 연결: 연결을 사용하면 배열 개체 간에 빠르고 쉽게 이동할 수 있습니다. 구현하려면 관련자 클래스의 EnumerateInstances, AssociatorsOf 및 ReferencesOf가 필요합니다. 연결자에 대한 GetInstance는 필요하지 않지만 원본 및 대상 개체의 GetInstance는 필수입니다.
  5. 표시: 표시를 통해 공급자는 관리 애플리케이션에 변경 내용을 알릴 수 있습니다.
  6. 메서드의 나머지입니다.

공급자 등록

명령 프롬프트를 시작합니다. 다음 명령을 사용하여 공급자를 등록합니다.

    Register-CimProvider.exe 
    –Namespace root\Microsoft\Windows\Storage\Providers
    –ProviderName <name of your provider>
    –Path <path to your provider’s dll file>