2025-11-28 00:35:46 +09:00
..
new
2025-11-28 00:35:46 +09:00
new
2025-11-28 00:35:46 +09:00
new
2025-11-28 00:35:46 +09:00
new
2025-11-28 00:35:46 +09:00
new
2025-11-28 00:35:46 +09:00
new
2025-11-28 00:35:46 +09:00

====================================================================================
SERVICE SAMPLE
====================================================================================

The current directory contains source code demonstrating an end to end scenario of
the advanced features of MIAPI.

NOTE: Please see ..\ReadMe.txt (Section 2. PREPARATION) for instructions on how to 
create environment variables which will be used in this sample.

====================================================================================
INSTRUCTIONS
====================================================================================

There are multiple sections below that correspond to each of the sub-folders in this 
folder. The sections and folders are
1. Provider
2. NativeClient
3. ManagedClient
4. CIM-BasedCmdlet\WindowsService
5. CIMCmdlet



1. Provider
------------------------------------------------------------------------------------
This directory contains the provider code, most of which are generated by
Convert-MofToProvider.exe tool from SDK.
Following shows you how to generate provider code, implement the provider,
compile the provider, and how to deploy the provider to a Windows 8 or Windows 
Server 2012 machine.


1) Generate provider code skeleton

    Run the following command line from an elevated command prompt (cmd.exe)
    %SDKBINDIR%\convert-moftoprovider.exe -MofFile %MISAMPLEDIR%\sample.mof -ClassList MSFT_WindowsService MSFT_WindowsServiceManager -IncludePath %CIM2260DIR% %MISAMPLEDIR% -ExtraClass Cim_Error -OutPath %MISAMPLEDIR%\service\provider\temp

    This command will:
    - use the MOF file called Sample.Mof that in the folder identified by %MISAMPLEDIR% 
    - generate skeleton code for the 2 classes following -Classlist
    - use the CIM 2.26 schema located in the folder identified by %CIM2260DIR%
    - use MSFT_Qualifiers.MOF located in the folder identified by %MISAMPLEDIR%
    - include generated schema & types for the Cim_Error class
    - place all output in the folder identified by the -OutPath parameter
    - Generate generation of resource IDs (strings.rc) used for localization

    Generated code can be found under %MISAMPLEDIR%\service\provider\temp.

    Following lists the generated files, with notes for each file.

    GENERATED FILES
    ---------------
    NOTE: All .h files define class types and helper functions to
    manipulate instances of the class, such as set/clear the property
    value, construct, clone and destruct.

    CIM_ConcreteJob.h
    CIM_EnabledLogicalElement.h
    CIM_Error.h
    CIM_Job.h
    CIM_LogicalElement.h
    CIM_ManagedElement.h
    CIM_ManagedSystemElement.h
    CIM_Service.h
    MSFT_WindowsService.h
    MSFT_WindowsServiceManager.h

    module.c
            Defines and implements entry function (MI_Main) of the provider.
            Implements function (Load) which will be called once the provider
            is being loaded.
            Implements function (UnLoad) which will be called once the provider
            is being unloaded.
    MSFT_WindowsService.c
            Implements the intrinsic and extrinsic methods of MSFT_WindowsService.
            Intrinsic methods include Enumerate/Get
            Extrinsic methods include StopService/StartService.
    MSFT_WindowsServiceManager.c
            Implements extrinsic static method GetWindowsServices, which
            demonstrates stream feature.
    schema.c
            Includes full schema of all related classes. This file should not be 
            modified. To change the schema, modify the original MOF (in this case
            sample.mof) and re-generate the code.
    WMIAdapter.c
            To enable this provider build based on MI API running with WMI,
            this file implements several adapter functions.
    Provider.DEF
            Defines list of exported APIs from service provider.
    strings.rc
            String table contains all localizable strings

    OTHER FILES USED BY THIS SAMPLE
    -----------
    WindowsService.c
            This is provided as part of the sample code, and was created to show
            the most efficient way of working with the generated code. The business logic
            for the elements in MSFT_WindowsService.c are implemented in WindowsService.c.
            If the schema is extended or updated, a new version of MSFT_WindowsService.c
            will need to be generated. By placing the business logic in a separate file,
            the work to align the updates is significantly reduced. 
    WindowsService.h
    service.vcxproj
            Visual studio project file for service provider.


2) Implement & compile the provider

    See *.c file for the implementation, especially MSFT_WindowsService.c and
    MSFT_WindowsServiceManager.c files.

    Open %MISAMPLEDIR%\misample.sln file with visual studio 2012 and
    make sure following settings are correct, then you will be able to build.

        - Click menu Build->Configuration Manager, select desired Active solution platform,
          "x64" for example.
        - Right Click "service" project and select properties.
        - Goto 'Configuration Properties' -> Linker -> Input -> Additional Dependencies
          Make sure "mi.lib;%(AdditionalDependencies)" was added there.

    NOTE: If the target windows 8 is 32bit (x86), then you need to set Active solution platform as Win32.

3) Generate MUI file
   Once the project above is built, you will have created a new provider called service.DLL.
   The compiled service.dll contains language specific content and language neutral binary.
   Language resource (strings) are defined in strings.rc file, which contained auto generated
   resource string for localizable qualifier's value and self defined resource string used by
   service provider.
   In order to support localization of the resource string, Register-CimProvider tool request
   supplying both language neutral provider binary and resoure MUI file for that provider.
   Run following command line to split service.dll into neutral DLL and mui file
   %SDKBINDIR%\muirct.exe -q %MISAMPLEDIR%\service\provider\mui.rcconfig -v 2 -x 0x0409 -g 0x0407 service.dll .\temp\service.dll .\temp\service.dll.mui

4) Register provider
   Copy the .\temp\service.DLL and .\temp\service.dll.mui files to a Windows 8
   or Windows Server 2012 machine. Suppose service.dll was copied to c:\temp folder,
   then service.dll.mui should be copied to c:\temp\en-us folder. Then invoke 
   the following command line from elevated commandline prompt (cmd.exe):
   Register-CimProvider.exe -Namespace Root/Standardcimv2/sample -ProviderName service -Path service.dll -verbose -ForceUpdate -Localize en-us

   Once that completes, service.dll should be successfully registered into system with
   localized qualifiers.

   NOTE: Register-CimProvider.exe is shipped in Windows 8 and Windows Server 2012, in 
   %windir%\system32.


2. NativeClient
------------------------------------------------------------------------------------
   See ReadMe.txt for details.

3. ManagedClient
------------------------------------------------------------------------------------
   See ReadMe.txt for details.

4. CIM-BasedCmdlet\WindowsService 
------------------------------------------------------------------------------------ 
    This directory contains a set of files that defines CIM-Based cmdlets.
    The cmdlets interact with MSFT_WindowsService and MSFT_WindowsServiceManager
    implemented by the service provider.

    - WindowsService.cdxml defines CIM-based cmdlets for MSFT_WindowsService class
    - WindowsService.format.ps1xml defines how to display MSFT_WindowsService instances
    - WindowsService.psd1 is the module manifest to package all of the above into a PowerShell module

    To use the sample
    - Make sure that you have built and registered the Service provider using the 
      instructions above.
    - Copy all the files to a local folder of the targeted Windows 8 or Windows Server 2012 machine
      for example c:\temp\CIM-BasedCmdlet\WindowsService
    - Open a powershell.exe console and invoke the following commands:
        Import-Module C:\temp\CIM-BasedCmdlet\WindowsService 
        Get-WindowsService


5. CIMCmdlet
------------------------------------------------------------------------------------
    This directory contains a ps1 script file, which demonstrate how to use CimCmdlets
    to consume the data from the service provider.

    To run the script, just open powershell.exe, and paste content of the PS1 file
    to PowerShell console.