Acceso a recursos de configuración declarado
El acceso a recursos de configuración declarada por Windows (WinDC) se usa para administrar las configuraciones de dispositivos y aplicar directivas para garantizar que los dispositivos permanecen en un estado deseado. Es fundamental para mantener la seguridad, el cumplimiento y la eficiencia operativa en las organizaciones. El servicio en la nube winDC se usa para enviar el estado deseado de un recurso al dispositivo donde el dispositivo tiene la responsabilidad de aplicar y mantener el estado de configuración del recurso.
Los proveedores de servicios de configuración (CSP) desempeñan un rol vital para configurar el acceso a recursos y actúan como una interfaz entre el dispositivo y el protocolo WinDC. Proporcionan un enfoque coherente y estandarizado para implementar y aplicar configuraciones. Los CSP admiten varios escenarios de acceso a recursos, entre los que se incluyen:
- CSP de VPNv2 y CSP de VPN
- Wi-Fi CSP
- ClientCertificateInstall CSP
- ActiveSync CSP
- WiredNetwork CSP
- RootCACertificates CSP
La pila de WinDC del dispositivo procesa las solicitudes de configuración y mantiene el estado deseado, que es clave para RA. La eficacia, la precisión y el cumplimiento de las solicitudes de configuración son fundamentales para una RA eficaz. El acceso a recursos se integra perfectamente con WinDC, lo que proporciona un método extendido para administrar dispositivos a través de la nube con escalabilidad y eficacia mejoradas.
- Eficiencia: el procesamiento basado en lotes minimiza el uso de recursos del servidor y reduce la latencia.
- Precisión: la pila de cliente de WinDC comprende el área expuesta de configuración del dispositivo, lo que permite un control eficaz de las actualizaciones continuas. Garantiza una ejecución precisa de los cambios de configuración comunicados por el servicio en la nube.
- Aplicación de directivas: aplique y mantenga directivas organizativas en todos los dispositivos de forma coherente y a escala, lo que garantiza el cumplimiento y la configuración uniforme. Este aspecto permite a las organizaciones mantener la posición de seguridad deseada entre dispositivos.
Directrices de acceso a recursos
Estas directrices proporcionan procedimientos recomendados y ejemplos para que los desarrolladores y evaluadores implementen configuraciones de acceso a recursos (RA) de forma segura, eficaz y coherente. Su objetivo es mejorar la seguridad de la red y optimizar el acceso a los recursos para los usuarios finales a la vez que se adhieren a las directivas y los requisitos de cumplimiento.
- Integridad de la configuración: para admitir el acceso a recursos ininterrumpido y seguro, asegúrese de configuraciones coherentes entre dispositivos y usuarios.
- Validación de estado: supervise el estado de las configuraciones para comprobar la aplicación correcta de la configuración de acceso a recursos.
- Administración de perfiles: administre eficazmente los perfiles de usuario agregando, actualizando y eliminando según sea necesario, para controlar el acceso a los recursos y mantener la seguridad.
- Registro y auditoría: use registros y seguimientos de auditoría para las operaciones y los cambios para ayudar en la solución de problemas y el cumplimiento.
- Detección y corrección de desfases: para mantener el cumplimiento con las directivas de RA, supervise continuamente el desfase (cambios en la configuración o el comportamiento) y tome medidas correctivas.
- Seguridad y privacidad: para proteger los datos y los recursos de los usuarios, implemente medidas seguras de seguridad y privacidad en las configuraciones.
Al seguir estas instrucciones y comprender la sintaxis del CSP DeclaredConfiguration, puede implementar y administrar de forma eficaz las configuraciones de RA, a la vez que mantiene la seguridad y el cumplimiento.
Documento de WinDC
El valor del Document
nodo hoja del CSP DeclaredConfiguration es un documento XML que describe la solicitud. Este es un documento de WinDC de ejemplo con los datos de configuración especificados para el acceso a los recursos.
<DeclaredConfiguration context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A0">
<CSP name="./Vendor/MSFT/VPNv2">
<URI path="Test_SonicWall/TrafficFilterList/0/Protocol" type="int">2</URI>
<URI path="Test_SonicWall/TrafficFilterList/0/Direction" type="chr">outbound</URI>
</CSP>
</DeclaredConfiguration>
Solo se pueden usar los valores admitidos para osdefinedscenario
. Los valores no admitidos dan como resultado un mensaje de error similar a Invalid scenario name
.
osdefinedscenario | Se recomienda usar con |
---|---|
MSFTWiredNetwork | WiredNetwork |
MSFTResource | ActiveSync |
MSFTVPN | VPN y VPNv2 |
MSFTWifi | Wi-Fi |
MSFTInventory | Inventario de certificados |
MSFTClientCertificateInstall | SCEP, PFX, datos de plantilla masiva |
Estos osdefinedscenario
valores requieren las siguientes etiquetas y atributos.
La
<CSP>
etiqueta XML describe el CSP de destino.Esta etiqueta tiene los siguientes atributos:
Atributo Descripción name
Especifica el OMA-URI de CSP de destino. La
<URI>
etiqueta XML especifica el nodo de configuración de CSP junto con el valor deseado.Esta etiqueta tiene los siguientes atributos:
Atributo Descripción path
Establecer ruta de acceso type
Establecer el tipo de datos
Nota
El destino de la configuración del escenario debe coincidir con el contexto de WinDC. El ámbito de CSP definido en <LocURI>
y el contexto de WinDC deben ser o Device
User
.
Ejemplos de osdefinedscenario
Ejemplo parcial
MSFTWifi
de Wifi:<DeclaredConfiguration context="Device" schema="1.0" id="10249228-e719-58bf-b459-060de45240f1" osdefinedscenario="MSFTWifi" checksum="11111111"> <CSP name="./Vendor/MSFT/WiFi">
Ejemplo parcial
MSFTResource
de ActiveSync:<DeclaredConfiguration context="User" schema="1.0" id="33333333-1861-4131-96e8-44444444" osdefinedscenario="MSFTResource" checksum="5555"> <CSP name="./Vendor/MSFT/ActiveSync">
Ejemplos de SyncML
La sintaxis syncML estándar de OMA-DM se usa para especificar las operaciones de CSP DeclaredConfiguration, como Replace, Add y Delete. La carga del elemento de <Data>
SyncML debe estar codificada en XML. Para esta codificación XML, hay varios codificadores en línea que puede usar. Para evitar la codificación de la carga, puede usar la sección CDATA como se muestra en los siguientes ejemplos de SyncML.
Configuración de un perfil de VPNv2 para el acceso a recursos
En este ejemplo se muestra cómo usar el CSP de VPNv2 para configurar un perfil de VPN denominado Test_SonicWall en el dispositivo en el ámbito usuario .
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Documents/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
<Data><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<DeclaredConfiguration context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A0">
<CSP name="./Vendor/MSFT/VPNv2">
<URI path="Test_SonicWall/TrafficFilterList/0/Protocol" type="int">2</URI>
<URI path="Test_SonicWall/TrafficFilterList/0/Direction" type="chr">outbound</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/Protocol" type="int">6</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/LocalPortRanges" type="chr">43-54</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/RemotePortRanges" type="chr">243-456</URI>
<URI path="Test_SonicWall/TrafficFilterList/1/Direction" type="chr">outbound</URI>
<URI path="Test_SonicWall/EdpModeId" type="chr">wip.contoso.com</URI>
<URI path="Test_SonicWall/RememberCredentials" type="bool">true</URI>
<URI path="Test_SonicWall/AlwaysOn" type="bool">true</URI>
<URI path="Test_SonicWall/Proxy/AutoConfigUrl" type="chr">https://auto.proxy.com</URI>
<URI path="Test_SonicWall/DeviceCompliance/Enabled" type="bool">true</URI>
<URI path="Test_SonicWall/DeviceCompliance/Sso/Enabled" type="bool">false</URI>
<URI path="Test_SonicWall/PluginProfile/ServerUrlList" type="chr">23.54.3.6;server1,vpn.contoso.com;server2</URI>
<URI path="Test_SonicWall/PluginProfile/CustomConfiguration" type="chr"><custom></custom></URI>
<URI path="Test_SonicWall/PluginProfile/PluginPackageFamilyName" type="chr">SonicWALL.MobileConnect_e5kpm93dbe93j</URI>
</CSP>
</DeclaredConfiguration>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
Actualización de un perfil de VPNv2 para el acceso a recursos
En este ejemplo se muestra cómo usar el mismo identificador de documento de WinDC, pero con una nueva suma de comprobación ("A3"). Instala un nuevo perfil VPNv2 denominado Test_SonicwallNew
y elimina el perfil anterior.
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Documents/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
<Data><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<DeclaredConfiguration context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A3">
<CSP name="./Vendor/MSFT/VPNv2">
<URI path="Test_SonicWallNew/TrafficFilterList/0/Protocol" type="int">2</URI>
<URI path="Test_SonicWallNew/TrafficFilterList/0/Direction" type="chr">outbound</URI>
<URI path="Test_SonicWallNew/EdpModeId" type="chr">wip.contoso.com</URI>
<URI path="Test_SonicWallNew/RememberCredentials" type="bool">true</URI>
<URI path="Test_SonicWallNew/AlwaysOn" type="bool">false</URI>
<URI path="Test_SonicWallNew/Proxy/AutoConfigUrl" type="chr">https://auto.proxy.com</URI>
<URI path="Test_SonicWallNew/DeviceCompliance/Enabled" type="bool">true</URI>
<URI path="Test_SonicWallNew/DeviceCompliance/Sso/Enabled" type="bool">false</URI>
<URI path="Test_SonicWallNew/PluginProfile/ServerUrlList" type="chr">23.54.3.8;server1,vpn2.contoso.com;server2</URI>
<URI path="Test_SonicWallNew/PluginProfile/PluginPackageFamilyName" type="chr">SonicWALL.MobileConnect_e5kpm93dbe93j</URI>
</CSP>
</DeclaredConfiguration>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
Obtención del perfil de VPNv2
En este ejemplo se muestra cómo usar <Get>
para recuperar los resultados de la solicitud de WinDC.
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Get>
<CmdID>1</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Results/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
</Item>
</Get>
<Final />
</SyncBody>
</SyncML>
Respuesta:
<SyncML xmlns:msft="http://schemas.microsoft.com/MobileDevice/MDM">
<SyncHdr />
<SyncBody>
<Status>
<CmdID>1</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>0</CmdRef>
<Cmd>SyncHdr</Cmd>
<Data>200</Data>
</Status>
<Status>
<CmdID>2</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Cmd>Get</Cmd>
<Data>200</Data>
</Status>
<Results>
<CmdID>3</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Item>
<Source>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Results/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Source>
<Data><DeclaredConfigurationResult context="user" schema="1.0" id="DCA000B5-397D-40A1-AABF-40B25078A7F9" osdefinedscenario="MSFTVPN" checksum="A3" result_checksum="9D2ED497C12D2FCEE1C45158D1F7ED8E2DACE210A0B8197A305417882991C978" result_timestamp="2024-08-06T13:54:38Z" operation="Set" state="60"><CSP name="./Vendor/MSFT/VPNv2" state="60"><URI path="Test_SonicWallNew/TrafficFilterList/0/Protocol" status="200" state="60" type="int" /><URI path="Test_SonicWallNew/TrafficFilterList/0/Direction" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/EdpModeId" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/RememberCredentials" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/AlwaysOn" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/Proxy/AutoConfigUrl" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/DeviceCompliance/Enabled" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/DeviceCompliance/Sso/Enabled" status="200" state="60" type="bool" /><URI path="Test_SonicWallNew/PluginProfile/ServerUrlList" status="200" state="60" type="chr" /><URI path="Test_SonicWallNew/PluginProfile/PluginPackageFamilyName" status="200" state="60" type="chr" /></CSP></DeclaredConfigurationResult></Data>
</Item>
</Results>
<Final />
</SyncBody>
</SyncML>
Sugerencia
Para comprender los valores de estado, consulte Estados de WinDC.
Eliminación del perfil de VPNv2
En este ejemplo se muestra cómo usar <Delete>
para quitar la solicitud de configuración para establecer el perfil VPNv2.
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Delete>
<CmdID>1</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./User/Vendor/MSFT/DeclaredConfiguration/Host/Complete/Documents/DCA000B5-397D-40A1-AABF-40B25078A7F9/Document</LocURI>
</Target>
</Item>
</Delete>
<Final />
</SyncBody>
</SyncML>
Propiedad del recurso
Los recursos administrados por MDM, como un perfil de VPN, se transfieren o migran a la administración de WinDC cuando se envía un documento de WinDC al dispositivo para el mismo recurso. Este recurso permanece bajo la administración de WinDC hasta que se elimina o abandona el documento de WinDC. De lo contrario, cuando MDM intenta administrar el mismo recurso a través del canal MDM heredado mediante SyncML, se produce un error 0x86000031.
MDM ConfigurationManager: Command failure status. Configuraton Source ID: (29c383c5-6e2d-43bf-a741-c63cb7516bb4), Enrollment Type: (MDMDeviceWithAAD), CSP Name: (ActiveSync), Command Type: (Add: from Replace or Add), CSP URI: (./User/Vendor/MSFT/ActiveSync/Accounts/{3b8b9d4d-a24e-4c6d-a460-034d0bfb9316}), Result: (Unknown Win32 Error code: 0x86000031).
Datos de plantilla masiva
El escenario de datos de plantilla masiva se extiende más allá del CSP ClientCertificateInstall normal. Usa un tipo de documento de plantilla masiva especial. En esta sección se trata la estructura, la especificación y los resultados del uso de los datos de plantilla masiva.
Documento de plantilla
Un documento de plantilla PFXImport contiene la estructura necesaria para importar certificados de forma masiva. El documento debe definir los campos necesarios y el formato necesario para la importación masiva.
- El tipo de documento debe ser
BulkTemplate
. - La ruta de acceso del URI es diferente de los URI normales mediante la
@#pfxThumbprint#
sintaxis , declara que es un nodo dinámico. Los datos de instancia de los nodos dinámicos se envían más adelante medianteBulkVariables
. Cada nodo dinámico puede contener subnodos dinámicos, como los@#pfxBlob#
nodos y#@pfxPassword#
de este ejemplo.
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Documents/47e88660-1861-4131-96e8-f32e85011e55/Document</LocURI>
</Target>
<Data><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<DeclaredConfiguration context="Device" schema="1.0" id="47e88660-1861-4131-96e8-f32e85011e55" osdefinedscenario="MSFTResource" checksum="FF356C2C71F6A41F9AB4A601AD00C8B5BC7531576233010B13A221A9FE1BE7A0">
<ReflectedProperties>
<Property name="foo" type="chr">foovalue</Property>
<Property name="bar" type="chr">barvalue</Property>
</ReflectedProperties>
<CSP name="./Vendor/MSFT/ClientCertificateInstall">
<URI path="PFXCertInstall/@#pfxThumbprint#/KeyLocation" type="Int">2</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PFXCertBlob" type="chr">@#pfxBlob#</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PFXCertPassword" type="chr">@#pfxPassword#</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PFXKeyExportable" type="bool">True</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PfxCertPasswordEncryptionType" type="int">0</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/PfxCertPasswordEncryptionStore" type="chr">SomeValue</URI>
<URI path="PFXCertInstall/@#pfxThumbprint#/ContainerName" type="chr"></URI>
</CSP>
</DeclaredConfiguration>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
Datos de plantilla
Los datos de plantilla masiva especifican los certificados que se van a importar en un formato codificado en base64 mediante el BulkVariables
URI en BulkTemplate
. El documento de datos de plantilla puede contener varias instancias. Cada instancia debe especificar todos los datos de subinstance.
En este ejemplo, hay dos instancias. Cada instancia define valores para pfxThumbprint, un **pfxBlob y un pfxPassword.
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Replace>
<CmdID>3</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Documents/47e88660-1861-4131-96e8-f32e85011e55/BulkVariables/Value</LocURI>
</Target>
<Data><![CDATA[
<InstanceBlob schema="1.0">
<Instance>
<InstanceData variable="pfxThumbprint">813A171D7341E1DA90D4A01878DD5328D3519006</InstanceData>
<InstanceData variable="pfxBlob">pfxbase64BlobValue1</InstanceData>
<InstanceData variable="pfxPassword">Password1</InstanceData>
</Instance>
<Instance>
<InstanceData variable="pfxThumbprint">813A171D7341E1DA90D4A01878DD5328D3519007</InstanceData>
<InstanceData variable="pfxBlob">pfxbase64BlobValue2</InstanceData>
<InstanceData variable="pfxPassword">Password2</InstanceData>
</Instance>
</InstanceBlob>
]]></Data>
</Item>
</Replace>
<Final />
</SyncBody>
</SyncML>
Resultados de la plantilla
Cuando el documento de datos de plantilla masiva se procesa correctamente, los certificados especificados se importan en los almacenes definidos con las contraseñas y ubicaciones de clave proporcionadas.
- Importación correcta: los certificados se importan correctamente en los almacenes de certificados del dispositivo.
- Control de errores: los errores detectados durante el proceso de importación incluyen códigos de estado o mensajes pertinentes para la solución de problemas.
Solicitud:
<?xml version="1.0" encoding="utf-8"?>
<SyncML xmlns="SYNCML:SYNCML1.1">
<SyncBody>
<Get>
<CmdID>2</CmdID>
<Item>
<Meta>
<Format>chr</Format>
<Type>text/plain</Type>
</Meta>
<Target>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Results/47e88660-1861-4131-96e8-f32e85011e55/Document</LocURI>
</Target>
</Item>
</Get>
<Final />
</SyncBody>
</SyncML>
Respuesta:
<SyncML xmlns:msft="http://schemas.microsoft.com/MobileDevice/MDM">
<SyncHdr />
<SyncBody>
<Status>
<CmdID>1</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>0</CmdRef>
<Cmd>SyncHdr</Cmd>
<Data>200</Data>
</Status>
<Status>
<CmdID>2</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Cmd>Get</Cmd>
<Data>200</Data>
</Status>
<Results>
<CmdID>3</CmdID>
<MsgRef>1</MsgRef>
<CmdRef>2</CmdRef>
<Item>
<Source>
<LocURI>./Device/Vendor/MSFT/DeclaredConfiguration/Host/BulkTemplate/Results/47e88660-1861-4131-96e8-f32e85011e55/Document</LocURI>
</Source>
<Data><DeclaredConfigurationResult context="Device" schema="1.0" id="47e88660-1861-4131-96e8-f32e85011e55" osdefinedscenario="MSFTResource" checksum="FF356C2C71F6A41F9AB4A601AD00C8B5BC7531576233010B13A221A9FE1BE7A0" result_checksum="DD8C1C422D50A410C2949BA5F495C2C42CC4B0C7B498D1B43318C503F6CEF491" result_timestamp="2024-08-06T13:26:23Z" operation="Set" state="60">
<CSP name="./Vendor/MSFT/ClientCertificateInstall" state="60">
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/KeyLocation" status="200" state="60" type="int" />
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/PFXCertBlob" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/PFXCertPassword" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/813A171D7341E1DA90D4A01878DD5328D3519006/PFXKeyExportable" status="200" state="60" type="bool" />
</CSP><CSP name="./Vendor/MSFT/ClientCertificateInstall" state="60">
<URI path="PFXCertInstall/CertPFX1/KeyLocation" status="200" state="60" type="int" />
<URI path="PFXCertInstall/CertPFX1/PFXCertBlob" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/CertPFX1/PFXCertPassword" status="200" state="60" type="chr" />
<URI path="PFXCertInstall/CertPFX1/PFXKeyExportable" status="200" state="60" type="bool" />
</CSP>
</DeclaredConfigurationResult>
</Data>
</Item>
</Results>
<Final />
</SyncBody>
</SyncML>