2.2.2.1 ADM-Based Policy Description Message
ADM-Based Policy Description Messages are encapsulated in Unicode files that are transmitted using remote file access. The names of these files MUST end in ".adm".
The following ABNF specifies the ADM file format.
-
AdmFile = AdmStatements AdmStrings WhiteSpaceClass = CR / LF / WSP WhiteSpace = *WhiteSpaceClass SpaceDelimiter = 1*WhiteSpaceClass Dash = %x002D LineBreak = CRLF AdmStatements = *AdmStatement AdmStatement = ( AdmClass / AdmCategory / AdmPolicy / AdmPart / AdmItemList / AdmActionList ) [AdmComment] AdmQuotedCharacter = %x0020-0021 / %x0023-007E ; space to tilde except double-quote AdmTokenCharacter = %x0021 / %x0023-003A / %x003C-007E ; Exclamation to tilde except double-quote and semi-colon AdmToken = 1*AdmTokenCharacter AdmComment = [LineBreak] TokSemi *(VCHAR / SP) LineBreak AdmClass = TokClass ( TokUser / TokMachine ) AdmCategory = TokCategory AdmString [AdmKeyName] [AdmExplain] (1*AdmCategory / 1*AdmPolicy / (1*AdmCategory 1*AdmPolicy) / (1*AdmPolicy 1*AdmCategory)) TokEnd TokCategory AdmString = ( WhiteSpace AdmToken SpaceDelimiter ) / TokQuotedString / AdmStringId AdmKey = AdmString AdmKeyName = TokKeyName AdmKey AdmExplain = TokExplain AdmString AdmSupported = TokSupported AdmString AdmPolicy = TokPolicy AdmString [AdmKeyName] [AdmExplain] [AdmValueOnOff] [AdmActionListOnOff] [AdmSupported] [AdmClientExt] [AdmParts] TokEnd TokPolicy AdmValueName = TokValueName AdmString AdmValueOn = TokValueOn ( AdmNumericValue / AdmString ) AdmValueOff = TokValueOff ( AdmNumericValue / AdmString ) AdmValueOnOff = AdmValueName [AdmValueOn] [AdmValueOff] AdmValue = AdmValueName [AdmValueData] AdmKeyValuePair = [AdmKeyName] AdmValue AdmNumericValue = TokNumeric TokDigits AdmValueData = TokValue (TokDelete / AdmString / AdmNumericValue) AdmClientExt = TokClientExt AdmGuid AdmGuid = TokLeftCurly 8HEXDIG Dash 4HEXDIG Dash 4HEXDIG Dash 4HEXDIG Dash 12HEXDIG TokRightCurly AdmParts = 1*AdmPart AdmPart = TokPart AdmString AdmUIControl TokEnd TokPart AdmActionList = TokActionList 1*AdmKeyValuePair TokEnd TokActionList AdmActionListOn = TokActionListOn 1*AdmKeyValuePair TokEnd TokActionListOn AdmActionListOff = TokActionListOff 1*AdmKeyValuePair TokEnd TokActionListOff AdmActionListOnOff = [AdmActionListOn] [AdmActionListOff] AdmItemList = TokItemList AdmItems TokEnd TokItemList AdmItems = 1*AdmItem AdmItem = TokName AdmString AdmValueData [TokDefault] [AdmActionList] AdmDefaultString = TokDefault AdmString AdmDefaultNumeric = TokDefault TokDigits AdmMin = TokMin TokDigits AdmMax = TokMax TokDigits AdmMaxLen = TokMaxlen TokDigits AdmNoSort = TokNosort AdmRequired = TokRequired AdmCheckbox = TokCheckbox AdmCheckBoxArguments AdmCombobox = TokCombobox AdmComboBoxArguments AdmDropdownlist = TokDropdownlist AdmDropdownListArguments AdmEditText = TokEditText AdmEditTextArguments AdmListbox = TokListbox AdmListBoxArguments AdmNumeric = TokNumeric AdmNumericArguments AdmOemConvert = TokOEMConvert AdmExpandableText = TokExpandableText AdmAdditive = TokAdditive AdmExplicitValue = TokExplicitValue AdmValuePrefix = TokValueprefix TokALPHA AdmSpin = TokSpin TokDigits AdmTextConvert = TokTxtConvert AdmDefChecked = TokDefchecked AdmUIControl = ( AdmCheckbox / AdmCombobox / AdmDropdownlist / AdmEditText / AdmListbox / AdmNumeric / TokText ) AdmCheckBoxArguments = <These occur in any order> [AdmKeyName] AdmValueOnOff [AdmDefChecked] [AdmActionListOn AdmActionListOff] [AdmClientExt] AdmEditTextArguments = <These occur in any order> [AdmKeyName] AdmValueName [AdmDefaultString] [AdmMaxLen] [AdmRequired] [AdmOemConvert] [AdmClientExt] [AdmExpandableText] AdmNumericArguments = <These occur in any order> [AdmKeyName] AdmValueName [AdmDefaultNumeric] [AdmMax] [AdmMin] [AdmRequired] [AdmSpin] [AdmClientExt] [AdmTextConvert] AdmComboBoxArguments = <These occur in any order> AdmEditTextArguments [AdmSuggestions] [AdmNoSort] AdmDropdownListArguments = <These occur in any order> [AdmKeyName] AdmValueName [ AdmItemList] [AdmRequired] [AdmClientExt] [AdmNoSort] AdmListBoxArguments = <These occur in any order> [AdmKeyName] [AdmAdditive] [AdmExplicitValue] [AdmValuePrefix] [AdmClientExt] [AdmNoSort] [AdmExpandableText] AdmStrings = [ TokStrings AdmStringStatements ] AdmStringStatements = 1*AdmStringStatement AdmStringStatement = WhiteSpace AdmToken TokIs TokQuotedString AdmSuggestions = TokSuggestions 1*AdmString TokEnd TokSuggestions AdmBangBang = WhiteSpace "!!" AdmStringId = AdmBangBang AdmToken SpaceDelimiter TokALPHA = WhiteSpace 1*ALPHA SpaceDelimiter TokActionList = WhiteSpace "ActionList" SpaceDelimiter TokActionListOff = WhiteSpace "ActionListOff" SpaceDelimiter TokActionListOn = WhiteSpace "ActionListOn" SpaceDelimiter TokAdditive = WhiteSpace "additive" SpaceDelimiter TokCategory = WhiteSpace "category" SpaceDelimiter TokCheckbox = WhiteSpace "checkbox" SpaceDelimiter TokClass = WhiteSpace "class" SpaceDelimiter TokClientExt = WhiteSpace "clientext" SpaceDelimiter TokCombobox = WhiteSpace "combobox" SpaceDelimiter TokDefault = WhiteSpace "default" SpaceDelimiter TokDefchecked = WhiteSpace "defchecked" SpaceDelimiter TokDelete = WhiteSpace "delete" SpaceDelimiter TokDigits = WhiteSpace 1*DIGIT SpaceDelimiter TokDropdownlist = WhiteSpace "dropdownlist" SpaceDelimiter TokEditText = WhiteSpace "EditText" SpaceDelimiter TokEnd = WhiteSpace "end" SpaceDelimiter TokExpandableText = WhiteSpace "expandabletext" SpaceDelimiter TokExplain = WhiteSpace "Explain" SpaceDelimiter TokExplicitValue = WhiteSpace "explicitvalue" SpaceDelimiter TokIs = WhiteSpace "=" WhiteSpace TokItemList = WhiteSpace "ItemList" SpaceDelimiter TokKeyName = WhiteSpace "KeyName" SpaceDelimiter TokLeftCurly = WhiteSpace "{" WhiteSpace TokListbox = WhiteSpace "listbox" SpaceDelimiter TokMachine = WhiteSpace "Machine" SpaceDelimiter TokMax = WhiteSpace "max" SpaceDelimiter TokMaxlen = WhiteSpace "maxlen" SpaceDelimiter TokMin = WhiteSpace "min" SpaceDelimiter TokNE = WhiteSpace "!=" SpaceDelimiter TokName = WhiteSpace "name" SpaceDelimiter TokNosort = WhiteSpace "nosort" SpaceDelimiter TokNumeric = WhiteSpace "numeric" SpaceDelimiter TokOEMConvert = WhiteSpace "oemconvert" SpaceDelimiter TokPart = WhiteSpace "Part" SpaceDelimiter TokQuotedString = WhiteSpace DQUOTE 1*AdmQuotedCharacter DQUOTE WhiteSpace TokPolicy = WhiteSpace "policy" SpaceDelimiter TokRequired = WhiteSpace "required" SpaceDelimiter TokRightCurly = WhiteSpace "}" SpaceDelimiter TokSemi = WhiteSpace ";" WhiteSpace TokSpin = WhiteSpace "spin" SpaceDelimiter TokStrings = WhiteSpace "[strings]" SpaceDelimiter TokSuggestions = WhiteSpace "suggestions" SpaceDelimiter TokSupported = WhiteSpace "supported" SpaceDelimiter TokText = WhiteSpace "text" SpaceDelimiter TokTxtConvert = WhiteSpace "TxtConvert" SpaceDelimiter TokUser = WhiteSpace "User" SpaceDelimiter TokValue = WhiteSpace "value" SpaceDelimiter TokValueName = WhiteSpace "ValueName" SpaceDelimiter TokValueOff = WhiteSpace "valueoff" SpaceDelimiter TokValueOn = WhiteSpace "valueon" SpaceDelimiter TokValueprefix = WhiteSpace "valueprefix" SpaceDelimiter
The file specifies both presentation information for administrative plug-in and serialization/deserialization for administrative tools.
The key directive for user interface presentation is the AdmUIControl production in the preceding ABNF; it can begin with one of the following terminal strings with the following meanings:
Value |
Meaning |
---|---|
CheckBox |
Policy Administration plug-ins are expected to present a control that allows the user to select a single check box. |
EditText |
Policy Administration plug-ins are expected to present a simple string control for viewing and editing this setting. |
ComboBox |
Policy Administration plug-ins are expected to present a simple list control that also allows manual editing for viewing and editing this setting. |
DropDownList |
Policy Administration plug-ins are expected to present a control that allows the user to select a single item from a drop-down list. |
Numeric |
Policy Administration plug-ins are expected to present a simple numeric control for viewing and editing this setting. |
ListBox |
Policy Administration plug-ins are expected to present a list user interface control for viewing and editing this setting. If not modified with "additive", this MUST be serialized to the format specified in Registry Policy Message Syntax (section 2.2.1) with an instruction that is preceded by an instruction using the "***DeleteKeys" value (the quoted value string MUST be taken literally), as specified in Client Plug-In Details (section 3.2). |
Text |
Policy Administration plug-ins are expected to just display the characters, following this literally. There is no user input to serialize or deserialize. |
The following nonterminal symbols imply important semantics for presentation or serialization:
AdmOemConvert:
If present, indicates that the string value associated with this part MUST be converted to ASCII before serialization. ASCII refers to a single 8-bit ASCII character or an array of 8-bit ASCII characters with the high bit of each character set to zero.
AdmExpandableText:
If present, indicates that, for this associated part, the Registry Policy Message Data Type from Registry Policy Message Syntax (section 2.2.1) MUST be serialized using type 0x02 from Registry Policy Message Syntax (section 2.2.1).
AdmAdditive:
If present, indicates that for AdmListBox controls, the Policy Setting MUST be serialized into Registry Policy format without being preceded by an instruction to delete all values (see section Registry Policy Message Sequencing (section 3.2.5.1)).
AdmExplicitValue:
If present, indicates that for AdmListBox controls, both the Value and Data to serialize to, from the Registry Policy Message specification (as specified in Registry Policy Message Syntax (section 2.2.1)), MUST come from an administrative tool's user input. If AdmValuePrefix is also specified, it is ignored.
AdmValuePrefix <prefix>:
Specifies that any registry values associated with this part MUST be prepended with <prefix> when serialized to the Registry Policy message format.
AdmSpin <spinvalue>:
Specifies that the Policy Administration plug-ins are expected to present the associated part in the user interface using a type of control that allows the user to increment or decrement integer values through the control. A <spinvalue> of 0 removes the spin control. A <spinvalue> of 1 is the default.
AdmTextConvert:
If present, indicates that the Policy Administration plug-ins MUST serialize the associated value into the Registry Policy format using type 0x01 (string), as specified in Registry Policy Message Syntax (section 2.2.1), even if the value is numeric.
AdmDefChecked:
If present, indicates that the administrative plug-in MUST enable their associated AdmCheckBox control when a user initially attempts to enable the associated setting.
AdmMax <maxvalue>:
Specifies that the administrative plug-in that consume this format to edit a GPO MUST enforce a maximum value for the number. This value is a 32-bit integer and can be set to a maximum of 2^32 - 1. If this value is not specified, then the default value is 9999.
AdmMin <minvalue>:
Specifies that the administrative plug-in that consumes this format to edit a GPO MUST enforce a minimum value for the number. This value is a 32-bit integer and can be set to a maximum of 2^32 - 1. If this value is not specified, then the default value is 0.
AdmSupported <descriptive string>:
Specifies that the administrative plug-in MUST display a descriptive string describing any other requirements for the associated part to be supported.
AdmClientExt <extension GUID>:
Specifies that for each AdmClient <extension GUID> occurrence, the administrative plug-in MUST send a GPO Extension Update Message (as specified in [MS-GPOL] section 2.2.8.2) to increment the GPO version and add the <Tool Extension GUID> (as defined in section 1.9) and <extension GUID> to either of the following attributes:
The gPCUserExtensionNames attribute if the GPO's user settings are being updated.
The gPCMachineExtensionNames attribute if the computer settings are being updated.
These attributes are updated on the current GPO. They provide for the application of policy to the client by the Registry Extension.
These attributes also provide for additional processing by a second client extension. The second client extension has the opportunity to process the entire GPO.
AdmMaxLen <maxlength>:
Specifies that the Policy Administration plug-in MUST limit the text in the associated part to be, at most, <maxlength> characters.
AdmNoSort:
If present, indicates that the administrative plug-in MUST NOT sort the entries when displaying the associated AdmCombobox, AdmDropdownlist, or AdmListbox.
AdmRequired:
Specifies that the administrative plug-in that consume this format MUST NOT allow updates of the GPO for the registry key unless a value has been provided in the user interface.