DDF-файлы поставщика служб конфигурации

В этой статье перечислены файлы платформы описания устройств OMA DM (DDF) для различных поставщиков служб конфигурации. DDF-файлы используются только с XML-файлом подготовки OMA DM.

По состоянию на декабрь 2022 г. схема XML DDF была обновлена для включения дополнительных сведений, таких как применимость сборки ОС. XML-файлы DDF версии 2 для Windows 10 и Windows 11 объединяются и предоставляются в одном скачивании:

Схема DDF версии 2

Ниже приведено определение xml-схемы DDF версии 2 вместе с определением схемы для указанного MSFT пространства имен.

  • Определение схемы для DDF версии 2:

    <?xml version="1.0" encoding="Windows-1252"?>
    <xs:schema xmlns="http://tempuri.org/DM_DDF-V1_2" elementFormDefault="qualified" targetNamespace="http://tempuri.org/DM_DDF-V1_2"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               xmlns:MSFT="http://schemas.microsoft.com/MobileDevice/DM">
      <xs:import schemaLocation="DDFv2Msft.xsd" namespace="http://schemas.microsoft.com/MobileDevice/DM" />
      <xs:element name="MgmtTree">
        <xs:annotation>
          <xs:documentation>Starting point for DDF</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="VerDTD" />
            <xs:element minOccurs="1" ref="MSFT:Diagnostics" />
            <xs:element minOccurs="1" maxOccurs="unbounded" ref="Node" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="VerDTD" type="xs:string" />
      <xs:element name="Node">
        <xs:annotation>
          <xs:documentation>Main Recurring XML tag describing nodes of the CSP</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="NodeName" />
            <xs:element minOccurs="0" maxOccurs="1" ref="Path" />
            <xs:element minOccurs="1" maxOccurs="1" ref="DFProperties" />
            <xs:choice>
              <xs:element minOccurs="0" maxOccurs="unbounded" ref="Node" />
            </xs:choice>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="NodeName" type="xs:anyURI" />
      <xs:element name="Path" type="xs:anyURI" />
      <xs:element name="MIME" type="xs:string" />
      <xs:element name="DDFName" type="xs:string" />
      <xs:element name="DFProperties">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="AccessType" />
            <xs:element minOccurs="0" maxOccurs="1" ref="DefaultValue" />
            <xs:element minOccurs="0" maxOccurs="1" ref="Description" />
            <xs:element ref="DFFormat" />
            <xs:element minOccurs="0" maxOccurs="1" ref="Occurrence" />
            <xs:element minOccurs="0" maxOccurs="1" ref="Scope" />
            <xs:element minOccurs="0" maxOccurs="1" ref="DFTitle" />
            <xs:element ref="DFType" />
            <xs:element minOccurs="0" maxOccurs="1" ref="CaseSense" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:Applicability" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:DynamicNodeNaming" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:AllowedValues" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:ReplaceBehavior" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:RebootBehavior" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:GpMapping" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:CommonErrorResults" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:Deprecated" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:DependencyBehavior" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:ConflictResolution" />
            <xs:element minOccurs="0" maxOccurs="1" ref="MSFT:AtomicRequired" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AccessType">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="1" name="Add" />
            <xs:element minOccurs="0" maxOccurs="1" name="Copy" />
            <xs:element minOccurs="0" maxOccurs="1" name="Delete" />
            <xs:element minOccurs="0" maxOccurs="1" name="Exec" />
            <xs:element minOccurs="0" maxOccurs="1" name="Get" />
            <xs:element minOccurs="0" maxOccurs="1" name="Replace" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="DefaultValue" type="xs:string" />
      <xs:element name="Description" type="xs:string" />
      <xs:element name="DFFormat">
        <xs:complexType>
          <xs:choice>
            <xs:element name="b64" />
            <xs:element name="bin" />
            <xs:element name="bool" />
            <xs:element name="chr" />
            <xs:element name="int" />
            <xs:element name="node" />
            <xs:element name="null" />
            <xs:element name="xml" />
            <xs:element name="date" />
            <xs:element name="time" />
            <xs:element name="float" />
          </xs:choice>
        </xs:complexType>
      </xs:element>
      <xs:element name="Occurrence">
        <xs:complexType>
          <xs:choice>
            <xs:element name="One" />
            <xs:element name="ZeroOrOne" />
            <xs:element name="ZeroOrMore" />
            <xs:element name="OneOrMore" />
            <xs:element name="ZeroOrN" type="xs:integer" />
            <xs:element name="OneOrN" type="xs:integer" />
          </xs:choice>
        </xs:complexType>
      </xs:element>
      <xs:element name="Scope">
        <xs:complexType>
          <xs:choice>
            <xs:element name="Permanent" />
            <xs:element name="Dynamic" />
          </xs:choice>
        </xs:complexType>
      </xs:element>
      <xs:element name="DFTitle" type="xs:string" />
      <xs:element name="DFType">
        <xs:complexType>
          <xs:choice>
            <xs:element minOccurs="1" maxOccurs="unbounded" ref="MIME" />
            <xs:element ref="DDFName" />
          </xs:choice>
        </xs:complexType>
      </xs:element>
      <xs:element name="CaseSense">
        <xs:complexType>
          <xs:choice>
            <xs:element name="CS" />
            <xs:element name="CIS" />
          </xs:choice>
        </xs:complexType>
      </xs:element>
    </xs:schema>
    
  • Определение схемы для MSFT пространства имен:

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema elementFormDefault="qualified" xmlns="http://schemas.microsoft.com/MobileDevice/DM" targetNamespace="http://schemas.microsoft.com/MobileDevice/DM" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="Diagnostics" type="xs:string">
        <xs:annotation>
          <xs:documentation>This node contains an XML blob that can be used as an argument to the DiagnosticsLogCSP to pull diagnostics for a feature.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="Deprecated">
        <xs:annotation>
          <xs:documentation>This node marks that a feature is deprecated.  If included, OsBuildDeprecated gives the OS Build version that the node is no longer recommended to be set.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:attribute name="OsBuildDeprecated" type="xs:string" />
        </xs:complexType>
      </xs:element>
      <xs:element name="DynamicNodeNaming">
        <xs:annotation>
          <xs:documentation>This node contains information on how to dynamically name the node such that the name is valid.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:choice>
            <xs:element name="ServerGeneratedUniqueIdentifier">
              <xs:annotation>
                <xs:documentation>This indicates that the server should generate a unique identifier for the node.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="ClientInventory">
              <xs:annotation>
                <xs:documentation>This indicates that the client will generate the name of the node based on the device state (such as inventorying apps).</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element name="UniqueName" type="xs:string">
              <xs:annotation>
                <xs:documentation>This indicates that the server should name the node, and the value listed gives a regex to define what is allowed.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:choice>
        </xs:complexType>
      </xs:element>
      <xs:element name="ConflictResolution" default="NoMerge">
        <xs:simpleType>
          <xs:annotation>
            <xs:documentation>The type of the conflict resolution.</xs:documentation>
          </xs:annotation>
          <xs:restriction base="xs:string">
            <xs:enumeration value="NoMerge">
              <xs:annotation>
                <xs:documentation>No policy merge.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="LowestValueMostSecure">
              <xs:annotation>
                <xs:documentation>The lowest value is the most secure policy value.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="HighestValueMostSecure">
              <xs:annotation>
                <xs:documentation>The highest value is the most secure policy value.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="LastWrite">
              <xs:annotation>
                <xs:documentation>The last written value is current value</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="LowestValueMostSecureZeroHasNoLimits">
              <xs:annotation>
                <xs:documentation>The lowest value is the most secure policy value unless the value is zero.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="HighestValueMostSecureZeroHasNoLimits">
              <xs:annotation>
                <xs:documentation>The highest value is the most secure policy value unless the value is zero.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="Applicability">
        <xs:annotation>
          <xs:documentation>These tags indicate what are required on the device for the node to be applicable to configured.  These tags can be inherited by children nodes.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="1" name="OsBuildVersion" type="xs:string">
              <xs:annotation>
                <xs:documentation>This tag describes the first build that a feature is released to.  If the feature was backported, multiple OS versions will be listed, such that the OS build version without a minor number is the first "major release."</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element minOccurs="0" maxOccurs="1" name="CspVersion" type="xs:decimal">
              <xs:annotation>
                <xs:documentation>This tag describes the lowest CSP Version that the node was released to.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element minOccurs="0" maxOccurs="1" name="EditionAllowList" type="xs:string">
              <xs:annotation>
                <xs:documentation>This tag describes the list of Edition IDs that the features is allowed on.  0x88* refers to Windows Holographic for Business.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element minOccurs="0" maxOccurs="1" name="RequiresAzureAd">
              <xs:annotation>
                <xs:documentation>This tag indicates that the node requires the device to be Azure Active Directory Joined to be applicable.</xs:documentation>
              </xs:annotation>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AllowedValues">
        <xs:annotation>
          <xs:documentation>These tags describe what values are allowed to be set for this particular node.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:group ref="AllowedValuesGroup" />
          <xs:attributeGroup ref="AllowedValuesAttributeGroup" />
        </xs:complexType>
      </xs:element>
      <xs:attributeGroup name="AllowedValuesAttributeGroup">
        <xs:attribute name="ValueType" use="required">
          <xs:annotation>
            <xs:documentation>This attribute describes what kind of Allowed Values tag this is.</xs:documentation>
          </xs:annotation>
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:enumeration value="XSD">
                <xs:annotation>
                  <xs:documentation>This attribute indicates that the Value tag contains an XSD for the node.</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="RegEx">
                <xs:annotation>
                  <xs:documentation>This attribute indicates that the Value tag contains a RegEx for the node.</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="ADMX">
                <xs:annotation>
                  <xs:documentation>This attribute indicates that the node can be described by an external ADMX file.</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="JSON">
                <xs:annotation>
                  <xs:documentation>This attribute indicates that the node can be described by a JSON schema.</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="ENUM">
                <xs:annotation>
                  <xs:documentation>This attribute indicates that the allowed values are an enumeration.</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="Flag">
                <xs:annotation>
                  <xs:documentation>This attribute indicates that the allowed values can be combined into a bitwise flag.</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="Range">
                <xs:annotation>
                  <xs:documentation>This attribute indicates that the allowed values are a numerical range.</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="SDDL">
                <xs:annotation>
                  <xs:documentation>This attribute indicates that the allowed values are a string in the SDDL format.</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
              <xs:enumeration value="None">
                <xs:annotation>
                  <xs:documentation>This attribute indicates there is no data-driven way to define the allowed values of the node.  This potentially means that all string values are valid values.</xs:documentation>
                </xs:annotation>
              </xs:enumeration>
            </xs:restriction>
          </xs:simpleType>
        </xs:attribute>
      </xs:attributeGroup>
      <xs:group name="AllowedValuesGroup">
        <xs:sequence>
          <xs:group minOccurs="0" maxOccurs="1" ref="AllowedValueGroupedNodes" />
          <xs:element minOccurs="0" maxOccurs="1" name="List">
            <xs:annotation>
              <xs:documentation>This tag indicates that the node input can contain multiple, delimited values.</xs:documentation>
            </xs:annotation>
            <xs:complexType>
              <xs:attribute name="Delimiter" type="xs:string" use="required">
                <xs:annotation>
                  <xs:documentation>This attribute details the delimeter used for the list of values.</xs:documentation>
                </xs:annotation>
              </xs:attribute>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:group>
      <xs:group name="ValueAndDescriptionGroup">
        <xs:sequence>
          <xs:element name="Value" type="xs:string">
            <xs:annotation>
              <xs:documentation>This tag indicates an allowed value.</xs:documentation>
            </xs:annotation>
          </xs:element>
          <xs:element minOccurs="0" maxOccurs="1" name="ValueDescription" type="xs:string">
            <xs:annotation>
              <xs:documentation>This tag gives further description to an allowed value, such as for an enumeration.</xs:documentation>
            </xs:annotation>
          </xs:element>
        </xs:sequence>
      </xs:group>
      <xs:group name="AllowedValueGroupedNodes">
        <xs:choice>
          <xs:element ref="Enum" maxOccurs="unbounded" />
          <xs:group ref="ValueAndDescriptionGroup" />
          <xs:element ref="AdmxBacked" />
        </xs:choice>
      </xs:group>
      <xs:element name="Enum">
        <xs:annotation>
          <xs:documentation>This tag gives details for one particular enumeration of the allowed values.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:group ref="ValueAndDescriptionGroup" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AdmxBacked">
        <xs:annotation>
          <xs:documentation>This tag indicates the relevent details for the corresponding ADMX policy for this node.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:attribute name="Area" type="xs:string" use="required">
            <xs:annotation>
              <xs:documentation>This attribute gives the area path of the ADMX policy.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="Name" type="xs:string" use="required">
            <xs:annotation>
              <xs:documentation>This attribute gives the name of the ADMX policy.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="File" type="xs:string" use="required">
            <xs:annotation>
              <xs:documentation>This attribute gives the filename for the ADMX policy.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
      <xs:element name="ReplaceBehavior" default="Replace">
        <xs:annotation>
          <xs:documentation>This tag details the replace behavior of the node.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="Append">
              <xs:annotation>
                <xs:documentation>When performing a replace operation on this node, the value is appending to the existing node data.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="Replace">
              <xs:annotation>
                <xs:documentation>When performing a replace operation on this node, the existing node data is removed before new data is added.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="RebootBehavior" default="None">
        <xs:annotation>
          <xs:documentation>This tag describes the reboot behavior of the node.</xs:documentation>
        </xs:annotation>
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="None">
              <xs:annotation>
                <xs:documentation>No reboot is required for this node.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="Automatic">
              <xs:annotation>
                <xs:documentation>This node will automatically perform a reboot to take effect.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="ServerInitiated">
              <xs:annotation>
                <xs:documentation>This node needs a reboot initiated from an external source to take effect.</xs:documentation>
              </xs:annotation>
            </xs:enumeration>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="GpMapping">
        <xs:annotation>
          <xs:documentation>This tag details the information necessary to map this node to an existing group policy.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:attribute name="GpEnglishName" type="xs:string" use="required">
            <xs:annotation>
              <xs:documentation>This attribute details the English name of the GP.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="GpAreaPath" type="xs:string" use="required">
            <xs:annotation>
              <xs:documentation>This attribute details the area path of the GP.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
          <xs:attribute name="GpElement" type="xs:string">
            <xs:annotation>
              <xs:documentation>This attribute details a particular element of a GP that the CSP node maps to.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
      <xs:element name="CommonErrorResults">
        <xs:annotation>
          <xs:documentation>This tag lists out common error HRESULTS reported by the CSP and English text to associate with them.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="CommonErrorOne" type="xs:string" />
            <xs:element name="CommonErrorTwo" type="xs:string" />
            <xs:element name="CommonErrorThree" type="xs:string" />
            <xs:element name="CommonErrorFour" type="xs:string" />
            <xs:element name="CommonErrorFive" type="xs:string" />
            <xs:element name="CommonErrorSix" type="xs:string" />
            <xs:element name="CommonErrorSeven" type="xs:string" />
            <xs:element name="CommonErrorEight" type="xs:string" />
            <xs:element name="CommonErrorNine" type="xs:string" />
            <xs:element name="CommonErrorTen" type="xs:string" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="AtomicRequired">
        <xs:annotation>
          <xs:documentation>This tag indicates that this node and all children nodes should be enclosed by an Atomic tag when being sent to the client.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="DependencyBehavior">
        <xs:annotation>
          <xs:documentation>These tags detail potential dependencies that the current CSP node has on other nodes in the same CSP.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="DependencyGroup" maxOccurs="unbounded" />
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="Dependency">
        <xs:annotation>
          <xs:documentation>This tag describes a dependency that the current CSP node has on another nodes in the same CSP.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="DependencyUri" type="xs:anyURI">
              <xs:annotation>
                <xs:documentation>The URI that the current CSP node has a dependency on.</xs:documentation>
              </xs:annotation>
            </xs:element>
            <xs:element ref="DependencyAllowedValue" />
          </xs:sequence>
          <xs:attribute name="Type" use="required">
            <xs:annotation>
              <xs:documentation>This tag details the kind of dependency.</xs:documentation>
            </xs:annotation>
            <xs:simpleType>
              <xs:restriction base="xs:string">
                <xs:enumeration value="DependsOn">
                  <xs:annotation>
                    <xs:documentation>The current node depends on the dependency holding a certain value.</xs:documentation>
                  </xs:annotation>
                </xs:enumeration>
                <xs:enumeration value="Not">
                  <xs:annotation>
                    <xs:documentation>The current node depends on the dependency not holding a certain value.</xs:documentation>
                  </xs:annotation>
                </xs:enumeration>
              </xs:restriction>
            </xs:simpleType>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
      <xs:element name="DependencyGroup">
        <xs:annotation>
          <xs:documentation>This tag details one specific dependency.  A node might have multiple different dependencies.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="1" ref="DependencyChangedAllowedValues" />
            <xs:element ref="Dependency" maxOccurs="unbounded" />
          </xs:sequence>
          <xs:attribute name="FriendlyId" type="xs:string" use="required">
            <xs:annotation>
              <xs:documentation>This attribute gives a friendly ID to the dependency, to differentiate it from other dependencies.</xs:documentation>
            </xs:annotation>
          </xs:attribute>
        </xs:complexType>
      </xs:element>
      <xs:element name="DependencyAllowedValue">
        <xs:annotation>
          <xs:documentation>This tag details the values that the dependency must be set to for the dependency to be satisfied.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:group ref="AllowedValuesGroup" />
          <xs:attributeGroup ref="AllowedValuesAttributeGroup" />
        </xs:complexType>
      </xs:element>
      <xs:element name="DependencyChangedAllowedValues">
        <xs:annotation>
          <xs:documentation>This tag details a change to the current node's allowed values if the dependency is satisfied.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:group ref="AllowedValuesGroup" />
          <xs:attributeGroup ref="AllowedValuesAttributeGroup" />
        </xs:complexType>
      </xs:element>
    </xs:schema>
    

Более старые DDF-файлы

Вы можете скачать старые DDF-файлы для различных поставщиков облачных служб по ссылкам ниже:

Вы можете скачать старые файлы DDF области политики, перейдя по следующим ссылкам: