From c83cc2966881e9baaff3a3e7600c44fa7cdba392 Mon Sep 17 00:00:00 2001
From: Vinay Pamnani <37223378+vinaypamnani-msft@users.noreply.github.com>
Date: Tue, 12 Sep 2023 13:58:14 -0400
Subject: [PATCH] First draft
---
.../declared-configuration-extensibility.md | 244 +++++++++++++++++-
.../declared-configuration.md | 64 ++++-
.../images/declared-configuration-model.png | Bin 0 -> 38764 bytes
windows/client-management/mdm/dmclient-csp.md | 6 +-
windows/client-management/mdm/toc.yml | 6 +-
5 files changed, 307 insertions(+), 13 deletions(-)
create mode 100644 windows/client-management/images/declared-configuration-model.png
diff --git a/windows/client-management/declared-configuration-extensibility.md b/windows/client-management/declared-configuration-extensibility.md
index a3cecffa87..8a95d39a56 100644
--- a/windows/client-management/declared-configuration-extensibility.md
+++ b/windows/client-management/declared-configuration-extensibility.md
@@ -1,10 +1,248 @@
---
title: Declared Configuration Extensibility
-description: Learn more about Declared Configuration extensibility
+description: Learn more about Declared Configuration extensibility through native WMI providers.
ms.date: 09/11/2023
ms.topic: how-to
---
-# Declared Configuration Extensibility
+# Declared Configuration Extensibility Providers
-[TODO]
+The Declared Configuration enrollment supporting the Declared Configuration client stack, offers Extensibility through native WMI providers. This feature instantiates and interfaces with a Windows Management Instrumentation (WMI) provider that has implemented an MI interface. The interface must implement GetTargetResource, TestTargetResource, and SetTargetResource methods, and may implement any number of string properties.
+
+> [!NOTE]
+> Only string properties are currently supported by Extensibility providers.
+
+```mof
+[static, Description ("Get resource state based on input configuration file." )]
+uint32 GetTargetResource(
+ [in, EmbeddedInstance ("MSFT_FileDirectoryConfiguration"), Description ("Configuration document that is to be applied.")]
+ string InputResource,
+ [in, Description ("Flags passed to the provider. Reserved for future use." )]
+ uint32 Flags,
+ [out, EmbeddedInstance ("MSFT_FileDirectoryConfiguration"), Description ("The current state of the specified configuration resources." )]
+ string OutputResource
+);
+
+[static, Description ("Test resource state based on input configuration file." )]
+uint32 TestTargetResource(
+ [in, EmbeddedInstance("MSFT_FileDirectoryConfiguration"), Description ("Configuration document to be applied." )]
+ string InputResource,
+ [in, Description ("Flags passed to the provider. reserved for future use." )]
+ uint32 Flags,
+ [out, Description ("True if identical. False otherwise." )]
+ boolean Result,
+ [out, Description ("Context information the provider can use to optimize the set. This is optional." )]
+ uint64 ProviderContext
+);
+
+[static, Description ("Set resource state based on input configuration file." )]
+uint32 SetTargetResource(
+ [in, EmbeddedInstance ("MSFT_FileDirectoryConfiguration"),
+ Description ("Configuration document to be applied." )]
+ string InputResource,
+ [in, Description ("Context information the provider can use to optimize the set from SetTargetResource. This is optional." )]
+ uint64 ProviderContext,
+ [in, Description ("Flags passed to the provider. reserved for future use." )]
+ uint32 Flags
+);
+```
+
+## Author DSC resources
+
+To create a native WMI provider, follow the steps outlined in [How to Implement an MI Provider](/previous-versions/windows/desktop/wmi_v2/how-to-implement-an-mi-provider). These steps include generating the source code for MI interface using Convert-MofToProvider.exe tool to generate the DLL and prepare it for placement.
+
+1. Create a MOF file that defines the schema for DSC resource including parameters and methods. This file includes the required parameters for the resource.
+2. Copy the schema MOF file along with any required files into the provided tools directory, i.e. ProviderGenerationTool.
+3. Edit the required files and include the correct file names and class names.
+4. Invoke the provider generator tool to generate provider's project files.
+5. Copy the generated files into the provider's project folder.
+6. Start the development process.
+
+### Example
+
+This example shows how to generate the initial source code for a sample resource.
+
+### Step 1: Create the Resource Schema File in MOF Format
+
+This is the sample schema MOF file used to generate the initial source code for the `MSFT_FileDirectoryConfiguration` native resource.
+
+```mof
+#pragma include ("cim_schema_2.26.0.mof")
+#pragma include ("OMI_BaseResource.mof")
+#pragma include ("MSFT_Credential.mof")
+
+[ClassVersion("1.0.0"), Description("The configuration provider for files and directories.")]
+class MSFT_FileDirectoryConfiguration : OMI_BaseResource
+{
+ [Key, Description("File name and path on target node to copy or create.")]
+ string DestinationPath;
+
+ [Write, Description("The name and path of the file to copy from.")]
+ string SourcePath;
+
+ [Write, Description("Contains a string that represents the contents of the file. To create an empty file, the string must be empty. The contents will be written and compared using UTF-8 character encoding.")]
+ string Contents;
+
+ [static, Description ("Get resource states based on input configuration file." )]
+ uint32 GetTargetResource(
+ [in, EmbeddedInstance ("MSFT_FileDirectoryConfiguration"), Description ("Configuration document that is to be applied." )]
+ string InputResource,
+
+ [in,Description ("Flags passed to the providers. Reserved for future use." )]
+ uint32 Flags,
+
+ [out, EmbeddedInstance ("MSFT_FileDirectoryConfiguration"), Description ("The current state of the specified configuration resources." )]
+ string OutputResource
+ );
+
+ [static, Description ("Test resource states based on input configuration file." )]
+ uint32 TestTargetResource(
+ [in, EmbeddedInstance("MSFT_FileDirectoryConfiguration"), Description ("Configuration document that to be applied." )]
+ string InputResource,
+
+ [in, Description ("Flags passed to the providers. reserved for future use." )]
+ uint32 Flags,
+
+ [out, Description ("True if identical. False otherwise." )]
+ boolean Result,
+
+ [out, Description ("Context information that the provider can use to optimize the set, This is optional." )]
+ uint64 ProviderContext
+ );
+
+ [static, Description ("Set resource states based on input configuration file." )]
+ uint32 SetTargetResource(
+ [in, EmbeddedInstance ("MSFT_FileDirectoryConfiguration"), Description ("Configuration document that to be applied." )]
+ string InputResource,
+
+ [in, Description ("Context information that the provider can use to optimize the set from TestTargetResource, This is optional." )]
+ uint64 ProviderContext,
+
+ [in, Description ("Flags passed to the providers. reserved for future use." )]
+ uint32 Flags
+ );
+};
+```
+
+Note the following about the schema MOF files:
+
+- Class name and DLL file name should be the same; as defined in `Provider.DEF` file.
+- The type qualifier, `[Key]`, on a property indicates that this property will uniquely identify the resource instance. At least one `[Key]` property is required.
+- The `[Required]` qualifier indicates that the property is required (a value must be specified in any configuration script that uses this resource).
+- The `[write]` qualifier indicates that this property is optional when using the custom resource in a configuration script. The `[read]` qualifier indicates that a property cannot be set by a configuration, and is for reporting purposes only.
+- `[Values]` qualifier restricts the values that can be assigned to the property to the list of values defined in `[ValueMap]`. For more information, see [ValueMap and Value Qualifiers](/windows/win32/wmisdk/value-map).
+- Any new MOF file should include the following lines at the top of the file:
+
+ ```mof
+ #pragma include ("cim_schema_2.26.0.mof")
+ #pragma include ("OMI_BaseResource.mof")
+ #pragma include ("MSFT_Credential.mof")
+ ```
+
+- Method names and its parameters should be same for every resource. Change `MSFT_FileDirectoryConfiguration` from EmbeddedInstance value to the class name of the desired provider. There should be only one provider per MOF file.
+
+### Step 2: Copy the schema MOF files
+
+Copy all the required files and folders to the project directory:
+
+- CIM-2.26.0
+- codegen.cmd
+- Convert-MofToProvider.exe
+- MSFT_Credential.mof
+- MSFT_DSCResource.mof
+- OMI_BaseResource.mof
+- OMI_Errors.mof
+- Provider.DEF
+- wmicodegen.dll
+
+For more information, see [How to Implement an MI Provider](/previous-versions/windows/desktop/wmi_v2/how-to-implement-an-mi-provider).
+
+### Step 3: Edit the required files
+
+Modify the following files in the project directory:
+
+- MSFT_FileDirectoryConfiguration.mof: This is the file that was created in step 1.
+- Provider.DEF: This file contains the DLL name, e.g. `MSFT_FileDirectoryConfiguration.dll`.
+- codegen.cmd: This file contains the command to invoke `convert-moftoprovider.exe`.
+
+ ```cmd
+ "convert-moftoprovider.exe" ^
+ -MofFile MSFT_FileDirectoryConfiguration.mof ^
+ MSFT_DSCResource.mof ^
+ OMI_Errors.mof ^
+ -ClassList MSFT_FileDirectoryConfiguration ^
+ -IncludePath CIM-2.26.0 ^
+ -ExtraClass OMI_Error ^
+ MSFT_DSCResource ^
+ -OutPath temp
+ ```
+
+### Step 4: Invoke the provider generator tool
+
+Run `codegen.cmd` which invokes the `convert-moftoprovider.exe` command. Alternatively, you can run the command directly.
+
+### Step 5: Copy generated source files
+
+This example uses a `temp` folder that was specified as `-OutPath` parameter in the command from step 3 as the output and renames it to `MSFT_FileDirectoryConfiguration`. This is useful when resource parameters in the schema MOF file are modified. Because with each update to the schema MOF file, the codegen.cmd script to regenerate the source files must be executed again and this tool will overwrite the source files if they exist. So, to prevent that from overwriting the implementation, a temporary folder could be used.
+
+Moreover, it is best to minimize the updates to the schema MOF file since the main implementation should be merged with the most recent auto-generated source files.
+
+### Example MSFT_FileDirectoryConfiguration Resource
+
+After running the provider generator tool, it creates several source and header files including:
+
+- MSFT_FileDirectoryConfiguration.c
+- MSFT_FileDirectoryConfiguration.h
+- module.c
+- schema.c
+- WMIAdapter.c
+
+From this list, only `MSFT_FileDirectoryConfiguration.c` and `MSFT_FileDirectoryConfiguration.h` need modifications. The extension for the source files can be changed from `c` to `cpp` too (which is the case for this resource). The business logic for this resource is implemented in `MSFT_FileDirectoryConfigurationImp.cpp` and `MSFT_FileDirectoryConfigurationImp.h`. These new files are added to the MSFT_FileDirectoryConfiguration directory after the provider generator tool was invoked.
+
+There are three auto-generated functions in MSFT_FileDirectoryConfiguration.cpp that must be implemented for a native DSC resource:
+
+- MSFT_FileDirectoryConfiguration_Invoke_GetTargetResource
+- MSFT_FileDirectoryConfiguration_Invoke_TestTargetResource
+- MSFT_FileDirectoryConfiguration_Invoke_SetTargetResource
+
+From these three functions, only MSFT_FileDirectoryConfiguration_Invoke_GetTargetResource is required for a Get scenario. MSFT_FileDirectoryConfiguration_Invoke_TestTargetResource and MSFT_FileDirectoryConfiguration_Invoke_SetTargetResource are used when remediation is needed. Besides these three functions, there are several other auto-generated functions in MSFT_FileDirectoryConfiguration.cpp that don't need implementation for a native DSC resource and should be left as-is.
+
+- MSFT_FileDirectoryConfiguration_Load
+- MSFT_FileDirectoryConfiguration_Unload
+- MSFT_FileDirectoryConfiguration_EnumerateInstances
+- MSFT_FileDirectoryConfiguration_GetInstance
+- MSFT_FileDirectoryConfiguration_CreateInstance
+- MSFT_FileDirectoryConfiguration_ModifyInstance
+- MSFT_FileDirectoryConfiguration_DeleteInstance
+
+### Details on MSFT_FileDirectoryConfiguration_Invoke_GetTargetResource
+
+MSFT_FileDirectoryConfiguration_Invoke_GetTargetResource performs these steps to complete its task:
+
+1. Validate the input resource.
+1. Ensure the keys and required parameters are present.
+1. Create a resource instance that will be used as the output of the Get method. This instance is of type MSFT_FileDirectoryConfiguration which is derived from MI_Instance.
+1. Create the output resource instance from the modified resource instance and return it to the MI client by calling these functions:
+
+ - MSFT_FileDirectoryConfiguration_GetTargetResource_Construct
+ - MSFT_FileDirectoryConfiguration_GetTargetResource_SetPtr_OutputResource
+ - MSFT_FileDirectoryConfiguration_GetTargetResource_Set_MIReturn
+ - MSFT_FileDirectoryConfiguration_GetTargetResource_Post
+ - MSFT_FileDirectoryConfiguration_GetTargetResource_Destruct
+
+1. Make sure to clean up, e.g. free allocated memory.
+
+## MI implementation references
+
+- [Introducing new Management Infrastructure (MI) API](https://blogs.msdn.microsoft.com/wmi/2013/05/16/introducing-new-management-infrastructure-mi-api/)
+- [Implementing MI Provider (1) - Overview](https://blogs.msdn.microsoft.com/wmi/2013/05/08/implementing-mi-provider-1-overview/)
+- [Implementing MI Provider (2) - Define Schema](https://blogs.msdn.microsoft.com/wmi/2013/05/08/implementing-mi-provider-2-define-schema/)
+- [Implementing MI Provider (3) - Generate Code](https://blogs.msdn.microsoft.com/wmi/2013/05/11/implementing-mi-provider-3-generate-code/)
+- [Implementing MI Provider (4) - Generate Code (continue)](https://blogs.msdn.microsoft.com/wmi/2013/12/28/implementing-mi-provider-4-generate-code-continute/)
+- [Implementing MI Provider (5) - Implement](https://blogs.msdn.microsoft.com/wmi/2013/12/28/implementing-mi-provider-5-implement/)
+- [Implementing MI Provider (6) - Build, Register, and Debug](https://blogs.msdn.microsoft.com/wmi/2013/12/28/implementing-mi-provider-6-build-register-and-debug/)
+- [MI Interfaces](/previous-versions/windows/desktop/wmi_v2/mi-interfaces)
+- [MI Datatypes](/previous-versions/windows/desktop/wmi_v2/mi-datatypes)
+- [MI Structures and Unions](/previous-versions/windows/desktop/wmi_v2/mi-structures-and-unions)
+- [MI_Result Enumeration](/windows/win32/api/mi/ne-mi-mi_result)
+- [MI_Type Enumeration](/windows/win32/api/mi/ne-mi-mi_type)
diff --git a/windows/client-management/declared-configuration.md b/windows/client-management/declared-configuration.md
index 7140266f88..668b5e533e 100644
--- a/windows/client-management/declared-configuration.md
+++ b/windows/client-management/declared-configuration.md
@@ -1,10 +1,66 @@
---
-title: Declared Configuration protocol support
-description: Learn more about Declared Configuration protocol support
+title: Declared Configuration protocol
+description: Learn more about using Declared Configuration protocol for desired state management of Windows devices.
ms.date: 09/11/2023
ms.topic: overview
---
-# Declared Configuration protocol support
+# What is Declared Configuration protocol
-[TODO]
+The Declared Configuration protocol is based on a desired state device configuration model though it still utilizes the underlying OMA-DM and Syncml protocol. Through a dedicated OMA-DM server, it provides all the settings in a single batch through this new protocol. The device's Declared Configuration client stack can reason over the settings to achieve the desired scenario in the most efficient and reliable manner.
+
+The Declared Configuration protocol requires that a device has a separate [OMA-DM enrollment](mdm-overview.md), which is dependent on the device being enrolled with the primary OMA-DM server. The desired state model is a completely different model from the current model where the Server is responsible for the device's desire state. This dual enrollment is only allowed if the device is already enrolled into a primary MDM Server. The new enrollment separates the desired state management functionality from the primary functionality. The Declared Configuration enrollment's first desired state management model feature is called [Extensibility](declared-configuration-extensibility.md).
+
+:::image type="content" source="images/declared-configuration-model.png" alt-text="Diagram illustrating the Declared configuration model.":::
+
+With the new [Declared Configuration CSP](mdm/declaredconfiguration-csp.md), the OMA-DM server can provide the device with the complete collection of setting names and associated values based on a specified scenario. The Declared Configuration stack on the device is responsible for handling the configuration request, and maintaining its state including updates to the scenario.
+
+The benefit of the Declared Configuration desired state model is that it is very efficient and accurate, especially given it is the responsibility of the Declared Configuration client to configure the device. The efficiency of Declared Configuration is in the fact that the batch of scenario settings are processed by the client asynchronously, freeing up the server resources to do other work. Thus, the Declared Configuration protocol has low latency. As for configuration quality and accuracy, the Declared Configuration client stack has intimate knowledge of the configuration surface area of the device including the proper handling of continuous device updates affecting the configuration scenario.
+
+## Declared Configuration enrollment
+
+[Mobile Device Enrollment Protocol Version 2](/openspecs/windows_protocols/ms-mde2/4d7eadd5-3951-4f1c-8159-c39e07cbe692) describes enrollment including discovery which covers the primary and Declared Configuration enrollments. The Declared Configuration dual enrollment is managed by new DMClient CSP nodes which are shown below:
+
+- [LinkedEnrollment/Priority](mdm/dmclient-csp.md#deviceproviderprovideridlinkedenrollmentpriority)
+- [LinkedEnrollment/Enroll](mdm/dmclient-csp.md#deviceproviderprovideridlinkedenrollmentenroll)
+- [LinkedEnrollment/Unenroll](mdm/dmclient-csp.md#deviceproviderprovideridlinkedenrollmentunenroll)
+- [LinkedEnrollment/EnrollStatus](mdm/dmclient-csp.md#deviceproviderprovideridlinkedenrollmentenrollstatus)
+- [LinkedEnrollment/LastError](mdm/dmclient-csp.md#deviceproviderprovideridlinkedenrollmentlasterror)
+- [LinkedEnrollment/DiscoveryEndpoint](mdm/dmclient-csp.md#deviceproviderprovideridlinkedenrollmentdiscoveryendpoint)
+
+Here's a SyncML example for setting LinkedEnrolment/DiscoveryEndpoint and triggering LinkedEnrollment/Enroll:
+
+```xml
+
+
+
+ 2
+ -
+
+ ./Device/Vendor/MSFT/DMClient/Provider/MS%20DM%20SERVER/LinkedEnrollment/DiscoveryEndpoint
+
+ https://discovery.dm.microsoft.com/EnrollmentConfiguration?api-version=1.0
+
+
+
+
+
+
+
+
+
+ 2
+ -
+
+ ./Device/Vendor/MSFT/DMClient/Provider/MS%20DM%20SERVER/LinkedEnrollment/Enroll
+
+
+
+
+
+
+```
+
+## Related content
+
+- [Declared Configuration extensibility](declared-configuration-extensibility.md)
diff --git a/windows/client-management/images/declared-configuration-model.png b/windows/client-management/images/declared-configuration-model.png
new file mode 100644
index 0000000000000000000000000000000000000000..7708eedf5794602d22aaed9447c5a18e53cb4aa3
GIT binary patch
literal 38764
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
-This is an execution node and will trigger a silent MMP-C enrollment, using the Azure Active Directory device token pulled from the Azure AD-joined device. There is no user interaction needed.
+This is an execution node and will trigger a silent Declared Configuration enrollment, using the AAD device token pulled from the Azure AD-joined device. There is no user interaction needed. When the **DiscoveryEndpoint** is not set, the Enroll node will fail with `ERROR_FILE_NOT_FOUND (0x80070002)` and there is no scheduled task created for dual enrollment.
@@ -2615,7 +2615,7 @@ Trigger Unenroll for the Linked Enrollment.
-This is an execution node and will trigger a silent MMP-C unenroll, there is no user interaction needed. On un-enrollment, all the settings/resources set by MMPC will be rolled back.
+This is an execution node and will trigger a silent Declared Configuration unenroll, without any user interaction. On un-enrollment, all the settings/resources set by Declared Configuration will be rolled back.
@@ -3973,7 +3973,7 @@ The following SyncML shows how to remotely unenroll the device. This command sho
./Vendor/MSFT/DMClient/Provider//Unenroll
- chr
+ chr
TestMDMServer
diff --git a/windows/client-management/mdm/toc.yml b/windows/client-management/mdm/toc.yml
index 47f2e2a0a9..3737a668f3 100644
--- a/windows/client-management/mdm/toc.yml
+++ b/windows/client-management/mdm/toc.yml
@@ -29,15 +29,15 @@ items:
href: ../structure-of-oma-dm-provisioning-files.md
- name: Server requirements for OMA DM
href: ../server-requirements-windows-mdm.md
- - name: Declared Configuration protocol support
+ - name: Declared Configuration protocol
href: ../declared-configuration.md
items:
- name: Declared Configuration Extensibility
href: ../declared-configuration-extensibility.md
- name: DeclaredConfiguration CSP
href: declaredconfiguration-csp.md
- - name: Authoring DSC resources
- href: ../declared-configuration-dsc.md
+ - name: DMClient CSP
+ href: dmclient-csp.md
- name: Configuration service providers (CSPs)
expanded: true
items: