Extender directivas basadas en el registro: plantillas adm 1

Esto significa nada más que podemos personalizar las plantillas administrativas existentes o crear nuevas plantillas y así aumentar las directivas. Windows nos proporciona unas plantillas administrativas para sus directivas, otras aplicaciones, ya puse el ejemplo de Office, también pueden proporcionar plantillas administrativas. Más que cambiar o modificar las existentes, es más recomendable crear nuestras propias plantillas.

Un aviso: las directivas son generalmente algo que los desarrolladores hacen para dar a los administradores más control sobre las aplicaciones de usuario. Una directiva necesita de código añadido por los desarrolladores que lea las directivas y obligue sus configuraciones a sus aplicaciones. Si los desarrolladores añaden directivas a su código, también crean plantillas para ello. Por otra parte, sin código que obligue a la aplicación de la configuración de directiva, el crear una plantilla administrativa para el es inútil.

  • Reparar directivas rotas. No es muy frecuente, pero puede darse el caso que para reparar una directiva incorrecta se cree una plantilla personalizada.
  • Crear plantillas administrativas personalizadas. Windows tiene cientos de directivas, office también. Ir a la caza de directivas es a veces frustrante. Podemos crear plantillas personalizadas que recoja en un lugar todas las que implementamos, haciendo el trabajo más sencillo. También podemos repasar la descripción de una directiva y cambiarla para que sea más fácil de entender.
  • Personalizar Windows. Muchos de los valores del registro que podemos utilizar para personalizar Windows no tienen interfaz de usuario. Podemos construir una para ellos mediante una plantilla administrativa y entonces cambiar esos valores con el Editor de Directivas.

Podemos usar cualquier editor de texto para la creación de plantillas administrativas. Las plantillas tienen su propio lenguaje y debemos aprenderlo y acostumbrarnos a él. El editor de directivas es perfecto para indicarnos mensajes de error cuando una plantilla los contiene, indicándonos el número de línea, la clave del error y algo más de info. En resumen, cómo usar una plantilla administrativa:

  1. Con el lenguaje de la plantilla, creamos una, es un archivo de texto con la extensión .adm.
  2. Cargamos la plantilla en el Editor de directivas.
  3. Editamos la configuración que define la plantilla.

Un ejemplo, ejemplo.adm:

   1: CLASS USER

   2:  

   3: CATEGORY "Directivas de ejemplo"

   4: #if version >= 4

   5:     EXPLAIN "Este ejemplo no hace nada"

   6: #endif

   7:  

   8:  POLICY "Directiva de ejemplo"

   9:  #if version >= 4

  10:     SUPPORTED "Al menos XP Profesional"

  11:  #endif

  12:  EXPLAIN "Este tampoco hace mucho"

  13:  KEYNAME "SoftwarePolicies"

  14:  VALUENAME Ejemplo

  15:  VALUEON NUMERIC 1

  16:  VALUEOFF NUMERIC 0

  17:  END POLICY

  18: END CATEGORY

adm01 adm02 adm03

adm04 adm05 adm06

Los If y endif engloban estados que sólo funcionan con ciertas versiones de Windows.

NT = 2; 2000 = 3; XP SP1 = 4; XP SP2 y 2003 = 5.

Sí queremos añadir comentarios a la plantilla:

; Esto es un comentario

// Esto también lo es

CLASS USER //configuración por usuario

CLASS MACHINE; Configuración por equipo.

Cadenas (strings)

Cuando creamos una plantilla fácil no nos será muy necesario, pero en cuanto trabajemos con plantillas más complicadas nos será muy útil trabajar con la codificación de cadenas, es como definir variables de texto para entendernos.

POLICY !!variable //aquí usamos una variable y no un texto.

POLICY “Ejemplo” // aquí es un texto y no una variable.

En el primer caso para que sustituya la variable variable por la cadena texto, usaremos la definición de cadenas, que no es más que añadir una sección denominada [strings] tal cual, corchetes incluídos. Con lo que el ejemplo quedaría:

POLICY !!variable //aquí usamos una variable y no un texto.

[strings]

variable=”Ejemplo”

Sintaxis de las plantillas

La primera entrada en un archivo de plantilla es la clave CLASS donde se define si la configuración de directiva que seguirá se aplica por-usuario o por-equipo. Pueden utilizarse múltiples CLASS en una misma plantilla. Cuando Windows procese el archivo de plantilla, las definidas en las secciones CLASS USER se unirán en HKCU y las de las secciones CLASS MACHINE en HKLM.

Queda claro pues que su sintaxis es: CLASS USER o CLASS MACHINE, sea para usuario o equipo.

Clave CATEGORY

Después de utilizar CLASS con los valores que aparecerán bajo Configuración de usuario o de Equipo, usaremos CATEGORY para crear subcarpetas en esa rama. El editor mostrará la configuración en esa carpeta. Podemos anidar CATEGORY dentro de CATEGORY.

Estas pueden contener cero o más directivas, las que no contienen directivas tienen una o más subcategorías.

Dentro podemos emplazar claves KEYNAME.

Para cerrar CATEGORY, END CATEGORY.

CATEGORY nombre

  KEYNAME subllave

  Directivas

END CATEGORY

nombre es el nombre de la carpeta que queremos que se vea en el editor de directivas, podemos usar variables.

Subllave es una subllave opcional de HKLM o HKCU que usamos para la categoría. No se incluye la llave raíz puesto que al definir CLASS ya le estamos indicando de donde colgará. Si hay espacios entre el nombre de la subllave hay que encomillarla.

Las claves que podemos usar dentro de CATEGORY son: CATEGORY, END, KEYNAME y POLICY.

Clave KEYNAME

Esta se usa dentro de CATEGORY y define que subllave HKCU o HKLM (dependiendo de CLASS) contiene el valor que estamos cambiando.

Clave POLICY

Esta clave es para definir una directiva que el administrador pueda cambiar. El editor mostrará la directiva y sus controles en un cuadro de diálogo que el administrador usará para cambiar el estado y valores de la directiva. Se pueden incluir múltiples POLICY en una CATEGORY, pero no es necesario una KEYNAME antes de cada POLICY, la más reciente se aplica a cada POLICY. Para finalizar, END POLICY.

Cada directiva contiene una clave VALUENAME para asociar un valor de registro con ella. De forma predeterminada, el editor asume que es un REG_DWORD y coloca un 0x01 al habilitar la directiva y la elimina al deshabilitarla; si no queremos que lo haga usaremos las claves VALUEON y VALUEOFF. No necesitamos ninguna otra clave aparte de VALUENAME para obtener este comportamiento. Sin embargo podemos especificar opciones adicionales, casillas de verificación, listas, cuadros de texto, y más, incluyendo las claves opcionales PART.

#

POLICY nombre

[KEYNAME subllave]

EXPLAIN ayuda

VALUENAME valor

[PART]

..

END POLICY

Nombre de la directiva.

Subllave, opcional, de HKCU oHKLM a usar por la categoría.

Ayuda es el texto que mostrará el editor en la pestaña de Explicación.

Valor, valor de registro a modificar.

Las claves que podemos usar dentro de una sección POLICY: ACTIONLISTOFF, ACTIONLISTON, END, KEYNAME, PART, VALUENAME, VALUEON, VALUEOFF, HELP, POLICY.

(Hay algunas más pero son para que los desarrolladores creen extensiones de directiva).

 

Clave Descripción
EXPLAIN “text” Texto de ayuda para una directiva específica. Las directivas incluyen una pestaña de Explicación, donde se proporcionan detalles sobre la misma directiva. También se ve el texto en el editor de directivas si se usa Extendido. Para las directivas en 2000, XP y 2003 deben contener un EXPLAIN seguido de una descripción completa de la directiva y su configuración, dentro de un #if version >= 3 EXPLAIN “text” #endif.
VALUENAME nombre

Esta clave identifica el valor del registro que el editor de directivas modifica cuando habilitamos/deshabilitamos la directiva. A menos que se especifiquen las claves VALUEON y VALUEOFF, el editor creará la directiva como un REG_DWORD:
– Habilitada: establece como valor 0x01. – Deshabilitada,No configurada: elimina el valor. El conjunto de las tres describen el valor que habilita y deshabilita la directiva, si queremos definir valores adicionales para refinar la directiva hay que usar la clave PART.

VALUEON [NUMERIC]
VALUEOFF [NUMERIC]
Se usan para escribir valores determinados basados en el estado de la directiva. VALUEON [NUMERIC] habilitado, VALUEOFF [NUMERIC] deshabilitado.
VALUEON 0  //Creado como valor REG_SZ conteniendo un “0”.
VALUEOFF NUMERIC 1 // Creado como REG_DWORD conteniendo 0x01.
ACTIONLIST Permite un grupo de configuración juntas. Como una lista de valores que queremos que el editor cambie cuando cambiamos la directiva.
ACTIONLISTON  *lista de valores a cambiar cuando se habilita la directiva.
ACTIONLISTOFF *lista de valores a cambiar cuando se deshabilita la directiva.
ACTIONLIST 
   [KEYNAME
subllave]
//subllave opcional de HKCU o HKLM.
   VALUENAME valor   
  VALUE datos          
END ACTIONLIST
//valor es el valor del registro a modificar, si se habilita la directiva se establece un REG_DWORD conteniendo 0x01. Para valores diferentes a 0x01 y 0x00 hay que usar la clave VALUE.
// datos que queremos que se establezcan en el valor, de forma predeterminada REG_SZ, podemos cambiar a REG_DWORD usando NUMERIC. VALUE DELETE hará que el editor elimine el valor del registro, aunque si el estado pasa a No configurada el valor tamién es eliminado.
PART La clave PART nos permite especificar varias opciones, listas, cuadros de texto, casillas de verificación, en la parte inferior del cuadro de diálogo de la directiva.

   1: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

   2: CLASS USER   ;;;;;;;;;;;;;;;;;;

   3: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

   4:  

   5: CATEGORY "Directivas de ejemplo"

   6:     EXPLAIN "Vamos a ver los PART"

   7:     POLICY "Directiva de ejemplo"

   8:         KEYNAME "SoftwarePolicies"

   9:         EXPLAIN "No hace nada"

  10:         

  11:     PART ejem01 CHECKBOX

  12:      VALUENAME ejemplo1

  13:     END PART

  14:     PART ejem2 CHECKBOX

  15:      DEFCHECKED

  16:      VALUENAME ejemplo2

  17:      VALUEON NUMERIC 11

  18:      VALUEOFF NUMERIC 12

  19:     END PART

  20:         

  21:     END POLICY

  22: END CATEGORY

ADMejem3

Para directivas simples sólo necesitamos habilitarlas o deshabilitarlas, no necesitaremos esta clave. De hecho, sólo un puñado relativo de directivas en Windows la usan.

 

 

Clave PART

PART Name Type

Donde Type puede ser:

CHECKBOX Muestra en pantalla un Ckeckbox. El valor REG_DWORD es 0x01 si está seleccionado o 0x00 si no lo está.

En el registro es un valor REG_SZ, de forma predeterminada no está seleccionado y su configuración es: Checked, escribe un 1, y Cleared, escribe un 0. Si queremos que esté seleccionado de forma predeterminada se usa la clave DEFCHECKED, sino siempre está sin seleccionar.
COMBOBOX Muestra en pantalla un ComboBox.

Dispone de una clave adicional que podemos utilizar: SUGGESTIONS. Esto crea una lista de sugerencias que el editor de directivas coloca en la lista. Hay que separar los elementos de la lista con un espacio en blanco i entrecomillarlos doble si contienen espacios. Se cierra con la clave END SUGGESTIONS.
Podemos cambiar su comportamiento co:
– DEFAULT : valor prederminado del combo.
– EXPANDABLETEXT : El valor se crea como REG_EXPAND_SZ.
– MAXLENGTH: Máxima longitud del valor.
– NOSORT: Evita que la lista esté ordenada.
– REQUIRED: Indica que el valor es obligatorio.
Pueden usarse KEYNAME también.
DROPDOWNLIST Muestra un combobox con una lista, el usuario sólo puede elegir un elemento.

Añade una lista al cuadro de diálogo del editor. Podemos usar la clave adicional ITEMLIST, con la que creamos una lista de elementos que el editor colocará en la lista. Cada elemento se define con la sintaxis NAME nombre VALUE valor. Entrecomillado doble de los elementos si contienen espacios. Se cierra con la clave END ITEMLIST.
Las claves que modifican su comportamiento:
– DEFAULT
– EXPANDABLETEXT
– NOSORT
– REQUIRED
Las claves KEYNAME y VALUENAME también pueden usarse dentro.
EDITTEXT Muestra en pantalla un cuadro de texto que acepta entradas alfanuméricas. El valor es REG_SZ o REG_EXPAND_SZ.

Entrada de caracteres alfanuméricos en un cuadro de texto, el editor lo almacena en un valor REG_SZ y modifican su comportamiento:
– DEFAULT
– EXPANDABLETEXT
– MAXLENGTH
– REQUIRED.
Las claves KEYNAME y VALUENAME también pueden usarse.
LISTBOX Muestra una lista con los botones Agregar/Quitar. Único tipo que permite administrar múltiples valores de una llave.

Añade un cuadro de lista con los botones agregar/quitar al cuadro de diálogo del editor de directivas. NO podemos usar VALUENAME ya que la opción no es asociable a un sólo valor en la lista. Podemos usar:
– ADDTIVE: De forma predeterminada el contenido de los cuadros de lista sobreescriben los valores ya escritos en el registro. Esto significa que las extensiones de parte del cliente eliminan los valores antes de configurarlos. Cuando se usa esta clave, la parte cliente no elimina los valores existentes antes de agregar los valores establecidos en el cuadro de lista.
– EXPLICITVALUE: Esto hace que especifiquemos el nombre y datos del valor. EL cuadro de lista muestra dos columnas, una para el nombre y el otro para el dato. No se puede usar juntoa VALUEPREFIX.
– VALUEPREFIX: El prefijo que establezcamos determina el nombre del valor. Si lo especificamos, el editor añadirá un número incremental al prefijo.
Si no usamos EXPLICITVALUE ni VALUEPREFIX, sólo aparece una columna en el cuadro de diálogo. Para cada entrada de la lista el editor crea un valor usando el texto de entrada para el nombre y los datos del valor.
Las claves KEYNAME, EXPANDABLETEXT, NOSORT se pueden usar también.
NUMERIC Muestra un cuadro de texto con un control opcional que acepta valores numéricos. REG_DWORD.

El control sirve para aumentar o disminuir el número. Podemos cambiar el tipo a REG_SZ con TXTCONVERT.
– DEFAULT
– MAX: Valor máximo, 9999 de forma predeterminada.
– MIN: Valor mínimo, 0 de forma predeterminada.
– REQUIRED
– SPIN: Incremento a usar por el control. Predeterminado 1, 0 quita el control.
– TEXTCONVERT: Escribe el valor como un REG_SZ en lugar de REG_DWORD.
KEYNAME y VALUENAME pueden usarse.
TEXT Muestra una línea estática de Texto. No almacena datos en el registro y es útil para añadir ayuda al cuadro de diálogo.

Texto estático en la parte baja del cuadro de diálogo del editor.
PART Texto TEXT
END PART

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *