Creación de un controlador de limpieza de disco

Un axiom probado una y otra vez en el mundo de los equipos es que, independientemente del tamaño de la capacidad de almacenamiento del equipo, eventualmente lo rellenará. Aunque el tamaño medio del disco duro de un equipo ha aumentado considerablemente con el tiempo, las aplicaciones también han crecido en consecuencia, dejando a los usuarios buscando formas de crear más espacio libre en disco duro. El espacio disponible también se reduce por los muchos archivos temporales que las aplicaciones crean por motivos de copia de seguridad o rendimiento. Cuando el espacio en disco se vuelve bajo, es necesario reducir la cantidad de espacio utilizado por las aplicaciones. El espacio en disco se puede liberar mediante una variedad de medios, entre los que se incluyen los siguientes:

  • Eliminando archivos.
  • Comprimir archivos.
  • Mover archivos a un medio de copia de seguridad.
  • Transferencia de archivos a un servidor remoto.

Los archivos que son buenos candidatos para la limpieza incluyen:

  • Los archivos que el usuario nunca necesitará de nuevo.
  • Archivos temporales que solo existen por motivos de rendimiento.
  • Archivos que se pueden restaurar, si es necesario, desde un CD de instalación.
  • Archivos de datos que posiblemente se han reemplazado por versiones más recientes, como archivos de copia de seguridad antiguos.
  • Archivos más antiguos que no se han usado en mucho tiempo.

La eliminación es especialmente adecuada para los archivos que el usuario nunca necesitará de nuevo, por ejemplo, archivos que se almacenan temporalmente en caché por motivos de rendimiento. La eliminación también es adecuada para los archivos que se restauran fácilmente, como archivos gráficos que se pueden volver a cargar desde un CD de instalación. Los archivos que el usuario podría necesitar más adelante o que serían difíciles de reconstruir son mejores candidatos para la compresión o copia de seguridad.

Esperar que un usuario limpie manualmente el sistema de archivos no es una buena solución. Es posible que el usuario no sepa dónde se encuentran muchos de los archivos o cómo reconocer cuáles se pueden quitar de forma segura. Además, existe el riesgo de que el usuario elimine archivos esenciales.

En este tema se describen las siguientes facetas de la utilidad De limpieza de disco.

La utilidad de limpieza de disco de Windows

A partir de Windows 98, el sistema operativo Windows incluye La limpieza de disco, una utilidad que facilita mucho al usuario administrar el espacio disponible en disco duro. La utilidad Limpieza de disco está diseñada para liberar tanto espacio en disco como sea posible y reducir el riesgo de que el usuario elimine los archivos esenciales accidentalmente.

La limpieza del disco se puede iniciar de tres maneras.

  • El usuario puede iniciar la limpieza del disco haciendo clic en Iniciar; apuntando a Todos los programas, accesorios y herramientas del sistema; y, a continuación, haga clic en Limpieza de disco.
  • El sistema notifica al usuario con un cuadro de mensaje que indica que el espacio en disco sin usar ha alcanzado el modo crítico. El umbral de modo crítico para una unidad superior a 2,25 gigabytes (GB) es de 200 megabytes (MB). Las advertencias posteriores se proporcionan a 80, 50 y 1 MB. El usuario tiene la opción de liberar espacio en disco manualmente o iniciar la utilidad Limpieza de disco.
  • El usuario puede hacer que el Asistente para tareas programadas de Windows (conocido como Asistente de mantenimiento en sistemas anteriores) ejecute automáticamente la utilidad De limpieza de disco en horas programadas.

El desafío básico inherente a la limpieza del disco es liberar tanto espacio en disco como sea posible sin eliminar archivos esenciales. Dado que no hay ninguna manera estándar de marcar los archivos para la limpieza, ninguna aplicación única puede detectar y limpiar de forma confiable todos los archivos no esenciales. La utilidad Limpieza de disco soluciona este problema dividiendo la operación de limpieza entre un único administrador de limpieza de disco y una colección de controladores de limpieza de disco.

Cuando se ejecuta la utilidad De limpieza de disco, el usuario ve el siguiente cuadro de diálogo. (Si existe más de un disco o una partición de disco en el equipo, primero se pide al usuario que elija una unidad antes de que se muestre este cuadro de diálogo).

captura de pantalla del cuadro de diálogo limpiar

El administrador de limpieza de disco forma parte del sistema operativo. Muestra el cuadro de diálogo que se muestra en la ilustración anterior, controla la entrada del usuario y administra la operación de limpieza. La selección y limpieza reales de archivos innecesarios se realiza mediante los controladores de limpieza de disco individuales que se muestran en el cuadro de lista del administrador de limpieza de disco. El usuario tiene la opción de habilitar o deshabilitar controladores individuales activando o desactivando su casilla en la interfaz de usuario del administrador de limpieza de disco.

Cada controlador es responsable de un conjunto bien definido de archivos. Por ejemplo, el controlador seleccionado en la ilustración es responsable de limpiar los archivos de programa descargados. El controlador seleccionado en la ilustración también proporciona un botón Ver archivos . Al hacer clic en el botón, el usuario puede solicitar que el controlador muestre una interfaz de usuario normalmente una ventana del Explorador de Windows que permita al usuario especificar qué archivos o clases de archivos se van a limpiar.

Aunque Windows incluye una serie de controladores de limpieza de disco, no están diseñados para controlar los archivos generados por otras aplicaciones. En su lugar, el administrador de limpieza de disco está diseñado para ser flexible y extensible al permitir que cualquier desarrollador implemente y registre su propio controlador de limpieza de disco. Cualquier desarrollador puede ampliar los servicios de limpieza de disco disponibles mediante la implementación y el registro de un controlador de limpieza de disco.

Todas las aplicaciones que generan archivos temporales pueden implementar y registrar un controlador de limpieza de disco. De este modo, los usuarios son una manera cómoda y confiable de administrar los archivos temporales de la aplicación. Al implementar el controlador, puede decidir qué archivos se ven afectados y determinar cómo se produce la limpieza real.

Conceptos básicos de implementación

Los controladores de limpieza son objetos del modelo de objetos componentes (COM) del servidor en proceso. Windows proporciona un objeto de controlador existente denominado DataDrivenCleaner para su uso. También puede optar por implementar un controlador usted mismo para obtener más flexibilidad. Estos objetos le permiten especificar cómo seleccionar archivos, liberar espacio en disco y, en el caso de un controlador implementado, mostrar la interfaz de usuario opcional para un control más granular. En esta sección se aborda la cuestión de implementar su propio controlador. Para obtener más información sobre el uso del objeto DataDrivenCleaner, vea Uso del objeto DataDrivenCleaner.

Un controlador de limpieza de disco debe realizar estas cinco tareas básicas.

  • Inicialice el objeto de controlador.
  • Examine el disco para determinar cuánto espacio en disco se puede liberar.
  • Muestra la interfaz de usuario para obtener comentarios del usuario sobre los archivos que se van a limpiar. (Opcional)
  • Realice la limpieza.
  • Apagar.

Para permitir que el administrador de limpieza de disco administre estas tareas, un controlador debe exportar IEmptyVolumeCache para Windows 98 o IEmptyVolumeCache2 para Windows Millennium Edition (Windows Me), Windows 2000 y Windows XP. Dado que IEmptyVolumeCache2 hereda de IEmptyVolumeCache, solo se requiere agregar el método adicional InitializeEx, es necesario realizar un trabajo relativamente pequeño para implementar ambos. A menos que el controlador esté pensado solo para uno de estos sistemas operativos, debe exportar ambas interfaces.

Para exportar estas interfaces, debe implementar estos métodos correspondientes a las cinco tareas básicas.

Initialize/InitializeEx

Se llama a los dos métodos de inicialización, que son bastante similares, cuando se ejecuta la utilidad de limpieza de disco. El administrador de limpieza de disco de Windows 98 llama al método IEmptyVolumeCache::Initialize de un controlador. El administrador de limpieza de disco de Windows Millennium Edition (Windows Me), Windows 2000 o Windows XP, sin embargo, primero intenta llamar a IEmptyVolumeCache2::InitializeEx y solo usa IEmptyVolumeCache::Initialize si el controlador no expone IEmptyVolumeCache2 . El administrador de limpieza de disco pasa información al método , como la clave del Registro del controlador y el volumen de disco que se va a limpiar.

Cualquiera de los métodos puede devolver varias cadenas de visualización y establecer una o varias marcas. La principal diferencia entre los dos métodos es cómo se controla el texto que se muestra en el administrador de limpieza de disco. Las tres cadenas siguientes se ven afectadas.

String Propósito Initialize InitializeEx
Display Name (Nombre para mostrar) Nombre del controlador que se muestra en el cuadro de lista del administrador de limpieza de disco. Si ppwszDisplayName es NULL, el valor predeterminado se recupera del registro. Se debe especificar una cadena localizada correctamente en ppwszDisplayName no se usan valores del Registro.
Descripción Texto descriptivo que se muestra debajo del cuadro de lista cuando se selecciona el nombre del controlador. Si ppwszDescription es NULL, el valor predeterminado se recupera del registro. Se debe especificar una cadena localizada correctamente en ppwszDescription , no se usan valores del Registro.
Texto del botón Texto para el botón opcional que permite a los usuarios mostrar la interfaz de usuario del controlador. No hay ningún parámetro disponible. Debe especificarse en el Registro. Se debe especificar una cadena localizada correctamente en ppwszBtnText , no se usan valores del Registro.

El parámetro pdwFlags que se encuentra en ambos métodos de inicialización reconoce el mismo conjunto de marcas. El administrador de limpieza de disco pasa dos de estas marcas al método .

  • EVCF_SETTINGSMODE

    Si el administrador de limpieza de disco se ejecuta según una programación, establece la marca EVCF_SETTINGSMODE . Si se establece esta marca, el administrador de limpieza de disco no llama a los métodos GetSpaceUsed, Purge o ShowProperties . El método Initialize o InitializeEx del controlador debe controlar todas las tareas realizadas normalmente por GetSpaceUsed y Purge. Dado que no hay ninguna oportunidad para los comentarios de los usuarios, solo se deben tocar los archivos que son extremadamente seguros para limpiar. Debe omitir el parámetro pcwszVolume del método de inicialización y limpiar los archivos innecesarios, independientemente de la unidad en la que se encuentren.

  • EVCF_OUTOFDISKSPACE

    Si se establece la marca EVCF_OUTOFDISKSPACE , la unidad de disco del usuario es críticamente corta. El controlador debe ser agresivo sobre la eliminación de archivos, incluso si se produce una pérdida de rendimiento. Sin embargo, el controlador obviamente no debe eliminar archivos que provocarían un error en una aplicación o que el usuario perdiera los datos.

El controlador de limpieza de disco establece las marcas restantes y se devuelve al administrador de limpieza de disco. Para obtener más información, vea las páginas de referencia del método para IEmptyVolumeCache::Initialize e IEmptyVolumeCache2::InitializeEx.

  • EVCF_DONTSHOWIFZERO

    Muestra el controlador en el cuadro de lista del administrador de limpieza de disco solo si el valor devuelto por GetSpaceUsed indica que el controlador puede liberar espacio en disco.

  • EVCF_ENABLEBYDEFAULT

    Especifica que el controlador está habilitado de forma predeterminada. Se ejecutará cada vez que se produzca una limpieza de disco a menos que el usuario lo deshabilite desactivando su casilla en la lista de controladores del administrador de limpieza de disco.

  • EVCF_ENABLEBYDEFAULT_AUTO

    Especifica que el controlador se habilita automáticamente para ejecutarse durante las limpiezas programadas.

  • EVCF_HASSETTINGS

    Establezca esta marca si el controlador tiene una interfaz de usuario que se va a mostrar. En respuesta, el administrador de limpieza de disco muestra un botón cuando ese controlador está seleccionado en el cuadro de lista. Si se hace clic en ese botón, el administrador de limpieza de disco llama a ShowProperties.

  • EVCF_REMOVEFROMLIST

    Elimine el nombre del controlador de la lista de controladores disponibles después de que el controlador se haya ejecutado una vez. También se elimina la información del registro del controlador.

GetSpaceUsed

El administrador de limpieza de disco llama a este método para determinar cuánto espacio puede liberar un controlador de limpieza de disco. A continuación, el administrador de limpieza de disco muestra ese valor a la derecha del nombre del controlador en el cuadro de lista. Esta operación se realiza en todos los controladores registrados con el administrador de limpieza de disco cuando se inicia el administrador y antes de que se muestre la interfaz de usuario principal del administrador. Cuando se llama a GetSpaceUsed , el controlador debe examinar los archivos de los que es responsable, determinar cuál de ellos son candidatos de limpieza y devolver la cantidad de espacio en disco que puede liberar.

Dado que el examen puede ser un proceso largo, el administrador de limpieza de disco usa el parámetro picb de este método para pasar un puntero a una interfaz IEmptyVolumeCacheCallBack . El controlador usa la interfaz periódicamente durante el examen para llamar a IEmptyVolumeCacheCallBack::ScanProgress, que sirve para dos propósitos.

  • Permite al administrador de limpieza de disco actualizar una barra de progreso, informando al usuario de cómo progresa el examen.
  • Notifica al controlador que detenga el examen en caso de que se haga clic en el botón Cancelar de la ventana de progreso. Ese evento de botón no se comunica directamente con el controlador; en su lugar, el administrador de limpieza de disco devuelve E_ABORT la próxima vez que GetSpaceUsed llame a IEmptyVolumeCacheCallBack::ScanProgress.

ShowProperties

Antes de iniciar la limpieza, el controlador puede mostrar una interfaz de usuario normalmente en forma de una ventana del Explorador de Windows que permite al usuario ver una lista de archivos o clases de archivos seleccionados para la limpieza por parte del controlador. Si el controlador establece la marca EVCF_HASSETTINGS cuando se llama a Initialize o InitializeEx , el usuario puede solicitar la interfaz de usuario haciendo clic en el botón que se muestra para ese propósito en el administrador de limpieza de disco. El texto del botón varía de controlador a controlador, pero "Ver archivos", "Ver páginas" y "Opciones" son etiquetas comunes.

Cuando se hace clic en el botón, el administrador de limpieza de disco llama a ShowProperties para pedir al controlador que muestre la interfaz de usuario. La interfaz de usuario debe crearse como elemento secundario de la ventana cuyo identificador se pasa en el parámetro hwnd del método ShowProperties.

Purgar

El administrador de limpieza de disco llama al método Purge del controlador para establecer la limpieza en movimiento. El parámetro picb del método es un puntero a la interfaz IEmptyVolumeCacheCallBack del administrador de limpieza de disco. Al igual que con el método GetSpaceUsed , el controlador debe usar la interfaz de devolución de llamada periódicamente para notificar su progreso y consultar al administrador de limpieza de disco si el usuario ha realizado clic en Cancelar. Sin embargo, tenga en cuenta que el método Purge debe llamar a IEmptyVolumeCacheCallBack::P urgeProgress, no ScanProgress.

Desactivación

Se llama al método Deactivate cuando el administrador de limpieza de disco se prepara para apagarse. El controlador debe realizar las tareas de limpieza necesarias y devolver. Si no desea que el controlador se vuelva a ejecutar, establezca la marca EVCF_REMOVEFROMLIST en el parámetro pdwFlags del método de inicialización. Si se establece esta marca, el administrador de limpieza de disco quita el controlador de su lista y elimina las entradas del Registro del controlador. Debe volver a agregar las entradas del Registro para volver a ejecutar el controlador. Esta marca se usa normalmente para los controladores que se ejecutan una sola vez.

Registro de un controlador de limpieza de disco

Para agregar un controlador a la lista del administrador de limpieza de disco, se deben agregar determinadas claves y valores al Registro de Windows.

Registro del CLSID de un controlador

Al igual que con todos los objetos COM, el GUID y el archivo DLL del objeto de controlador deben estar registrados en la clave CLSID en HKEY_CLASSES_ROOT. También puede registrar un icono que se muestra junto al nombre del controlador en el cuadro de lista del administrador de limpieza de disco, pero esto es opcional. En el ejemplo siguiente se muestran las claves, los valores y los datos implicados.

HKEY_CLASSES_ROOT
   CLSID
      Handler's GUID
         DefaultIcon
            (Default) = Handler's Icon Path, Icon Index
         InprocServer32
            (Default) = Handler's DLL path
            ThreadingModel = Apartment

Registro de un controlador con el Administrador de limpieza de disco: General

Para completar el registro, un controlador debe agregar una clave que contenga sus detalles, como se muestra aquí. En el resto de esta sección se describe el contenido de esta clave.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     Handler's Key

En general, el nombre de la clave que contiene los detalles de un controlador se denomina para el tipo de archivo que controla, como archivos de programa descargados, pero esto no es un requisito. En la tabla siguiente se detallan los valores posibles que se encuentran en esta clave.

Nota

Solo se requiere el valor Predeterminado que especifica el identificador de clase del controlador (CLSID) todos los demás valores son opcionales.

Valor Tipo Significado
Valor predeterminado REG_SZ ClSID del controlador como registrado en HKEY_CLASSES_ROOT\CLSID.
AdvancedButtonText REG_SZ Texto del botón opcional en el que los usuarios pueden hacer clic para mostrar la interfaz de usuario del controlador. El carácter & se puede colocar antes de que un carácter asigne un método abreviado de teclado para el botón. Los controladores que exponen IEmptyVolumeCache2::InitializeEx omiten el valor AdvancedButtonText.
CleanupString REG_SZ Línea de comandos que especifica un archivo ejecutable y parámetros de línea de comandos opcionales. Esta línea de comandos se ejecuta al finalizar la limpieza del disco.
CSIDL REG_DWORD Identificador independiente del sistema de una carpeta especial que se va a incluir en la búsqueda de archivos. Este valor debe especificarse como un valor numérico por ejemplo, 0x0000001c en lugar de CSIDL_LOCAL_APPDATA. Para obtener una lista de los valores posibles, consulte CSIDL. Solo se puede usar un único valor.
Si se especifica el valor Folder, la ubicación indicada por el valor CSIDL se antepone a esa información para componer una ruta de búsqueda. Por ejemplo, considere el siguiente escenario.
  • El valor CSIDL se especifica como 0x0000000d (CSIDL_MYMUSIC)
  • La carpeta Mi música se encuentra en C:\Documents and Settings\username\My Music
  • El valor folder contiene "Jazz\Singers"
El resultado de ese escenario es que el controlador de limpieza de disco busca en la carpeta C:\Documents and Settings\username\My Music\Jazz\Singers. Tenga en cuenta que la barra diagonal anterior al valor carpeta se agrega si no está presente.
Descripción REG_SZ Texto descriptivo que se muestra debajo del cuadro de lista del administrador de limpieza de disco cuando se selecciona el nombre del controlador. Aquí puede explicar lo que hace el controlador, qué archivos se refieren a sí mismos y cualquier otra información elucidatoria al usuario. Si el controlador no expone IEmptyVolumeCache2::InitializeEx , este texto se puede invalidar a través del método IEmptyVolumeCache::Initialize del controlador especificando una cadena alternativa en el parámetro ppwszDescription cuando se llama al método .
Mostrar REG_SZ Nombre del controlador que se va a mostrar en el cuadro de lista del administrador de limpieza de disco. Si el controlador no expone IEmptyVolumeCache2::InitializeEx , este texto se puede invalidar a través del método IEmptyVolumeCache::Initialize del controlador especificando una cadena alternativa en el parámetro ppwszDisplayName cuando se llama al método .
Filelist REG_SZ o REG_MULTI_SZ Lista de archivos buscados y limpiados por este controlador. Puede especificar caracteres comodín mediante ? o * caracteres. Si el valor es de tipo REG_SZ, se separan varias extensiones mediante | o : caracteres, sin espacios en ninguno de ellos.
Si la marca DDEVCF_REMOVEDIRS se establece en el valor Flags , estos valores pueden especificar nombres de directorio y archivos.
Marcas REG_DWORD o REG_BINARY Marcas que controlan los elementos del procedimiento de búsqueda y limpieza. Uno o varios de los valores siguientes.
  • DDEVCF_DOSUBDIRS (0x00000001). Busque y quite de forma recursiva.
  • DDEVCF_REMOVEAFTERCLEAN (0x00000002). Después de ejecutar el controlador una vez, quítelo del registro.
  • DDEVCF_REMOVEREADONLY (0x00000004). Quite los archivos que cumplan los criterios de búsqueda incluso si son de solo lectura.
  • DDEVCF_REMOVESYSTEM (0x00000008). Quite los archivos que cumplan los criterios de búsqueda incluso si son archivos del sistema.
  • DDEVCF_REMOVEHIDDEN (0x00000010). Quite los archivos que cumplan los criterios de búsqueda incluso si están ocultos.
  • DDEVCF_DONTSHOWIFZERO (0x00000020). No muestre este controlador en el administrador de limpieza de disco si ningún archivo coincide con sus criterios de búsqueda.
  • DDEVCF_REMOVEDIRS (0x00000040). Coincide con el valor FileList con directorios y quita coincidencias y todos sus subdirectorios.
  • DDEVCF_RUNIFOUTOFDISKSPACE (0x00000080). Ejecute este controlador solo si el espacio en disco disponible ha caído por debajo del valor crítico, determinado por el administrador de limpieza de disco estableciendo la marca de EVCF_OUTOFDISKSPACE a través de IEmptyVolumeCache::Initialize o IEmptyVolumeCache2::InitializeEx.
  • DDEVCF_REMOVEPARENTDIR (0x00000100). Quite el directorio primario de los archivos especificados una vez que se haya ejecutado el limpiador.
  • DDEVCF_PRIVATE_LASTACCESS (0x10000000). Use el valor LastAccess, si se proporciona, para determinar qué archivos se deben limpiar. Esta marca se omite cuando se usa dataDrivenCleaner siempre se usa cualquier valor de LastAccess proporcionado.
Carpeta REG_SZ, REG_MULTI_SZ o REG_EXPAND_SZ Una carpeta o carpetas específicas para buscar elementos que coincidan con entradas en el valor FileList. Puede especificar caracteres comodín mediante ? o * caracteres. Si el valor es de tipo REG_SZ, se separan varios nombres de carpeta mediante | carácter, sin espacios en ninguno de los lados.
Si existe un valor CSIDL, solo se puede especificar una carpeta en este valor. La ubicación indicada por el valor CSIDL se antepone a esa ruta de acceso de carpeta para componer una ruta de acceso de búsqueda. Para obtener un ejemplo, consulte la descripción del valor CSIDL.
Si este valor no está presente en Windows Vista Service Pack 1 (SP1) y versiones posteriores, se omite el controlador de limpieza y devuelve S_FALSE al inicializar.
Si este valor no está presente en la versión original de Windows Vista y versiones anteriores, se usa la carpeta raíz del volumen actual. La marca DDEVCF_DOSUBDIRS es necesaria en ese caso para buscar en toda la unidad. Sin ella, solo se busca en la carpeta raíz.
Se debe especificar una unidad o unidades. Esto se puede proporcionar a través del valor CSIDL o a través de una cadena de REG_EXPAND_SZ. Sin embargo, al barringir esas opciones, la unidad que se va a buscar debe especificarse en el nombre de la carpeta. Use ?: para buscar la carpeta en la unidad actual.
IconPath REG_SZ o REG_EXPAND_SZ Ruta de acceso al recurso desde el que se va a obtener un icono que se va a usar en asociación con el controlador.
LastAccess REG_DWORD o REG_BINARY Número de días que deben transcurrir desde que se accedió por última vez a un archivo o se creó un directorio para ese archivo o directorio que se debe tener en cuenta para la limpieza.
Priority REG_DWORD o REG_BINARY Determina el orden en que se ejecuta el controlador con respecto a otros controladores. Cuanto mayor sea el número, anterior en el proceso que ejecuta el controlador. No hay ningún intervalo definido que sea aceptable.
PropertyBag REG_SZ CLSID de un recurso usado para proporcionar texto localizado para el nombre para mostrar, la descripción y el texto del botón. Este recurso es útil en la situación en la que un controlador no implementa IEmptyVolumeCache y el controlador se ejecuta en Microsoft Windows NT o Windows XP.
El administrador de limpieza de disco comprueba primero si la rutina de inicialización del controlador devolvió esas cadenas, como sería el caso cuando se implementa IEmptyVolumeCache2 . Si se produce un error, el administrador vuelve a un contenedor de propiedades denominado en este valor. Si no se ha proporcionado ninguno, recupera el texto del Registro.
StateFlags REG_DWORD Al ejecutar el archivo ejecutable del administrador de limpieza de disco Cleanmgr.exe desde una línea de comandos, puede declarar perfiles de limpieza. Estos perfiles se componen de un subconjunto de los controladores disponibles y tienen una etiqueta numérica única. Esto le permite automatizar la ejecución de diferentes conjuntos de controladores en momentos diferentes.
La línea de comandos "cleanmgr.exe /sageset:nnnn", donde nn es una etiqueta numérica única, muestra una interfaz de usuario que le permite elegir los controladores que se incluirán en ese perfil. Además de definir el perfil, el parámetro sageset también escribe un valor denominado StateFlagsnnnn, donde nnnn es la etiqueta que usó en el parámetro , en todas las subclaves de VolumeCaches. Hay dos valores de datos posibles para esas entradas.
  • 0: No ejecute este controlador cuando se ejecute este perfil.
  • 2: Incluya este controlador cuando se ejecute este perfil.

Por ejemplo, supongamos que se ejecuta la línea de comandos "cleanmgr.exe /sageset:1234". En la interfaz de usuario que se presenta, el usuario elige Archivos de programa descargados, pero no elige Archivos de Internet temporales. A continuación, los valores siguientes se escriben en el Registro.
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     Downloaded Program Files
                        StateFlags1234 = 0x00000002
                     Internet Cache Files
                        StateFlags1234 = 0x00000000

La línea de comandos "cleanmgr.exe /sagerun:nnnn", donde el valor de nnnn coincide con la etiqueta declarada con el parámetro sageset, ejecuta todos los controladores seleccionados en ese perfil.
Un valor StateFlags genérico se escribe en el Registro cuando se ejecuta normalmente la limpieza de disco. Este valor simplemente almacena el estado (activado o desactivado) del controlador la última vez que se presentó como una opción para el usuario. Hay dos valores de datos posibles para esas entradas.
  • 0: No se seleccionó el controlador.
  • 1: Se seleccionó el controlador.

Registro de un controlador con el Administrador de limpieza de disco: Windows 2000 o sistemas posteriores

Especificar texto para mostrar en el registro puede dificultar la localización de software. Por este motivo, Windows 2000 y Windows XP admiten la interfaz IEmptyVolumeCache2 con su método de inicialización preferido InitializeEx. En Windows 2000 o posterior, siempre se intenta llamar a IEmptyVolumeCache2::InitializeEx antes de IEmptyVolumeCache::Initialize. El sistema solo usa Initialize para inicializar un controlador si IEmptyVolumeCache2 no está expuesto.

En lo que respecta al Registro, la única diferencia en Windows 2000 o posterior es que puedes omitir los valores AdvancedButtonText, Display y Description cuando el controlador expone IEmptyVolumeCache2::InitializeEx . Esos valores, que contienen texto localizado correctamente, se proporcionan al administrador de limpieza de disco cuando llama a InitializeEx.

Uso del objeto DataDrivenCleaner

El sistema operativo proporciona un controlador básico de limpieza de disco, denominado DataDrivenCleaner. Para usar este objeto como controlador en lugar de implementar el suyo propio, use clSID {C0E13E61-0CC6-11d1-BBB6-0060978B2AE6} como valor predeterminado para la subclave del controlador en VolumeCaches , como se describe en Registro de un controlador con el Administrador de limpieza de disco: General.

DataDrivenCleaner no expone IEmptyVolumeCache2, por lo que los valores display y Description se proporcionan a través del registro. Al declarar esas cadenas, tenga en cuenta que esto podría causar problemas de localización. El texto localizado se puede proporcionar a través del valor PropertyBag. El valor AdvancedButtonText se omite, ya que no hay ninguna interfaz de usuario y, por lo tanto, ningún botón para mostrarlo, está disponible para este controlador.

Registro de ejemplo de un controlador de limpieza de disco

A continuación se muestra un registro de ejemplo para un controlador de limpieza de disco implementado por The Phone Company. Este controlador implementa los valores IEmptyVolumeCache e IEmptyVolumeCache2, por lo que proporciona valores AdvancedButtonText, Description y Display en caso de que se use en un equipo que ejecute Windows 98. El controlador combina los valores CSIDL y Folder para buscar archivos en el directorio C:\Program Files\The Phone Company\Temp y la marca DDEVCF_DOSUBDIRS se establece para que también se busquen sus subdirectorios. Solo se tienen en cuenta los archivos con extensiones .tmp y .tpc para la limpieza y la marca DDEVCF_PRIVATE_LASTACCESS se establece para que, fuera de esos archivos, solo se tengan en cuenta aquellos a los que no se haya accedido durante 14 días o más. La marca DDEVCF_DONTSHOWIFZERO también se establece para que el controlador no aparezca en la lista a menos que haya encontrado candidatos de limpieza.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     The Phone Company Files
                        (Default) = {the CLSID GUID}
                        AdvancedButtonText = &View Files
                        CleanupString = c:\tpc.exe
                        CSIDL = 0x00000026
                        Description = Old temporary files.
                        Display = The Phone Company Files
                        FileList = *.tmp|*.tpc
                        Flags = 0x10000021
                        Folder = \The Phone Company\Temp
                        IconPath = c:\Program Files\The Phone Company\tpc.dll,2
                        LastAccess = 0x0000000e
                        Priority = 200
                        PropertyBag = {Property Bag CLSID GUID}