<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Daniel Martín's blog : Shell</title><link>http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx</link><description>Tags: Shell</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>¿Cómo funciona Autorun/AutoPlay en Windows 7?</title><link>http://msmvps.com/blogs/dmartin/archive/2009/11/19/191-c-243-mo-funciona-autorun-autoplay-en-windows-7.aspx</link><pubDate>Thu, 19 Nov 2009 22:17:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1740381</guid><dc:creator>dmartin</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1740381</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1740381</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/11/19/191-c-243-mo-funciona-autorun-autoplay-en-windows-7.aspx#comments</comments><description>&lt;p&gt;Una de las novedades de Windows 7 con respecto a la seguridad general del sistema es que en este sistema operativo est&amp;aacute; desactivada la funcionalidad Autorun para dispositivos USB. La funcionalidad Autorun&amp;nbsp;recientemente ha venido siendo usada por los autores de &lt;em&gt;malware&lt;/em&gt; para infectar dispositivos USB y a su vez intentar enga&amp;ntilde;ar al usuario para que ejecute c&amp;oacute;digo malicioso una vez inserte el dispositivo en su m&amp;aacute;quina. Por este motivo, Microsoft hizo un anuncio durante la beta de Windows 7 diciendo que la funcionalidad Autorun estar&amp;iacute;a desactivada para dispositivos USB (&lt;a href="http://blogs.msdn.com/e7/archive/2009/04/27/improvements-to-autoplay.aspx"&gt;http://blogs.msdn.com/e7/archive/2009/04/27/improvements-to-autoplay.aspx&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;En un foro una persona preguntaba qu&amp;eacute; implicaciones tendr&amp;iacute;a esto sobre las posibles personalizaciones que se aplican aprovechando la funcionalidad Autorun de los dispositivos &amp;oacute;pticos y extra&amp;iacute;bles, tales como cambiar el icono de la unidad y cambiar su etiqueta. Aprovechando la respuesta a esta cuesti&amp;oacute;n voy a describir tambi&amp;eacute;n en qu&amp;eacute; consisten los&amp;nbsp;mecanismos&amp;nbsp;Autorun y Autoplay en Windows 7.&lt;/p&gt;
&lt;p&gt;Autorun y Autoplay son dos conceptos parecidos pero no iguales, que hay que distinguir. En esta p&amp;aacute;gina de la documentaci&amp;oacute;n de Windows 7 puede ver cu&amp;aacute;les son las diferencias entre Autorun y Autoplay: &lt;a href="http://windows.microsoft.com/en-us/windows-vista/Whats-the-difference-between-AutoPlay-and-autorun"&gt;http://windows.microsoft.com/en-us/windows-vista/Whats-the-difference-between-AutoPlay-and-autorun&lt;/a&gt;. Cuando el usuario inserta un DVD en la unidad, un dispositivo USB, etc., una de las primeras cosas que hace el sistema es procesar el posible fichero Autorun.inf de la ra&amp;iacute;z del dispositivo. El fichero Autorun.inf tiene una serie de opciones de configuraci&amp;oacute;n que permiten cambiar el icono de la unidad, su etiqueta, el programa que ejecutar&amp;aacute; autom&amp;aacute;ticamente, etc. Esta lista recoge los posibles par&amp;aacute;metros&amp;nbsp;y los cambios que ha habido en Windows 7 con respecto a sistemas anteriores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Open&lt;/strong&gt;: Programa que se abrir&amp;aacute; autom&amp;aacute;ticamente. En Windows 7 esto solo est&amp;aacute; soportado en unidades &amp;oacute;pticas (CD/DVD).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ShellExecute&lt;/strong&gt;: Similar al caso de la opci&amp;oacute;n &lt;em&gt;Open&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Icon&lt;/strong&gt;: Icono asignado a la unidad. Soportado en Windows 7, y sobre&amp;nbsp;cualquier tipo de unidad compatible con Autorun.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Action&lt;/strong&gt;: En Windows 7 solo se tiene en cuenta para unidades &amp;oacute;pticas (CD/DVD).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Label&lt;/strong&gt;: Establece una etiqueta al volumen. Soportado en Windows 7, y sobre cualquier tipo de unidad compatible con Autorun.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As&amp;iacute; pues, Windows 7 desactiva Autorun para toda unidad que no sea de CD/DVD, excepto si se trata de los inofensivos par&amp;aacute;metros &lt;em&gt;Icon&lt;/em&gt; y &lt;em&gt;Label&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Para optimizar el rendimiento, conforme el sistema va analizando el fichero Autorun.inf, va almacenando su informaci&amp;oacute;n en la rama de Registro HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\MountPoints2\{CLSID}\_Autorun (donde CLSID identifica a un dispositivo particular). En Windows 7 y en el caso de dispositivos USB, tampoco se almacena esta informaci&amp;oacute;n en el Registro, excepto si se trata de los par&amp;aacute;metros &lt;em&gt;Icon&lt;/em&gt; y &lt;em&gt;Label&lt;/em&gt;, como ya se ha comentado.&lt;/p&gt;
&lt;p&gt;Una vez analizado el fichero Autorun.inf, el sistema establece en el men&amp;uacute; contextual de la unidad&amp;nbsp;el verbo (acci&amp;oacute;n) por defecto, que se mostrar&amp;aacute; al usuario en letra negrita y ser&amp;aacute; lo que ocurra por defecto al hacer doble clic sobre la unidad. N&amp;oacute;tese que esto no ocurre en Windows 7 en el caso de unidades extra&amp;iacute;bles.&lt;/p&gt;
&lt;p&gt;A continuaci&amp;oacute;n se comprueba si Autorun est&amp;aacute; habilitado o no para esa unidad en particular. Para ello se examina en la clave de Registro HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer si existiera alguna de estas directivas establecidas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NoDriveAutorun&lt;/li&gt;
&lt;li&gt;NoDrives&lt;/li&gt;
&lt;li&gt;NoDriveTypeAutorun&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La primera directiva desactiva Autorun para una unidad en particular; la segunda oculta la unidad en Explorador de Windows, por lo que autom&amp;aacute;ticamente se desactiva la reproducci&amp;oacute;n autom&amp;aacute;tica en la misma, y la tercera desactiva Autorun para un tipo particular de dispositivos (&amp;oacute;pticos, USB, etc.).&lt;/p&gt;
&lt;p&gt;Si al introducir un CD/DVD/USB en su sistema no se muestra un cuadro de reproducci&amp;oacute;n autom&amp;aacute;tica, deber&amp;iacute;a examinar en primer lugar estos tres valores de Registro, tanto en la rama HKCU, como en la HKLM. Programas como VMware Workstation aplican alguna de estas directivas para evitar que la reproducci&amp;oacute;n autom&amp;aacute;tica interfiera con el sistema que est&amp;aacute; siendo virtualizado.&lt;/p&gt;
&lt;p&gt;Otro de los factores que se comprueban y que influyen en que la reproducci&amp;oacute;n autom&amp;aacute;tica est&amp;eacute; desactivada&amp;nbsp;es que haya una aplicaci&amp;oacute;n DirectX funcionando a pantalla completa (por ejemplo un juego) o un salvapantallas. Asimismo, hay un valor de Registro que desactiva AutoPlay y que es configurable desde la interfaz gr&amp;aacute;fica, concretamente desde &lt;em&gt;Inicio&lt;/em&gt;, &lt;em&gt;Programas predeterminados&lt;/em&gt;, &lt;em&gt;Cambiar configuraci&amp;oacute;n de reproducci&amp;oacute;n autom&amp;aacute;tica&lt;/em&gt;, &lt;em&gt;Usar la reproducci&amp;oacute;n autom&amp;aacute;tica para todos los medios y dispositivos&lt;/em&gt;. Se trata del valor &lt;em&gt;DisableAutoplay&lt;/em&gt; de la clave HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers. Este es otro de los valores de Registro que deber&amp;iacute;a consultar si AutoPlay no funcionara correctamente.&lt;/p&gt;
&lt;p&gt;A continuaci&amp;oacute;n el sistema queda a la espera de que se mantenga pulsada la tecla &lt;em&gt;Shift&lt;/em&gt; (May&amp;uacute;sculas). El significado de esta tecla en versiones anteriores de Windows era el de desactivar la reproducci&amp;oacute;n autom&amp;aacute;tica temporalmente. En Windows Vista y Windows 7 esta tecla cambia radicalmente de significado. Sirve para que temporalmente se aplique la configuraci&amp;oacute;n por defecto para la reproducci&amp;oacute;n autom&amp;aacute;tica, es decir,&amp;nbsp;el usuario ver&amp;aacute; un cuadro de di&amp;aacute;logo con las posibles acciones, incluso si hay alguna aplicaci&amp;oacute;n que est&amp;eacute; desactivando la reproducci&amp;oacute;n autom&amp;aacute;tica (m&amp;aacute;s adelante se explicar&amp;aacute; c&amp;oacute;mo puede ocurrir eso).&lt;/p&gt;
&lt;p&gt;Si el sistema detecta que la tecla &lt;em&gt;Shift&lt;/em&gt; no est&amp;aacute; pulsada, comprueba si lo que ha ocurrido es que un programa de instalaci&amp;oacute;n ha pedido un CD/DVD al usuario y este lo ha introducido. En este tipo de&amp;nbsp;casos conviene no mostrar el cuadro de reproducci&amp;oacute;n autom&amp;aacute;tica al usuario.&amp;nbsp;El sistema comprueba esto viendo desde d&amp;oacute;nde se est&amp;aacute; ejecutando la aplicaci&amp;oacute;n que hay en primer plano. Si es desde el CD/DVD o desde el directorio temporal del usuario, supone que se trata de una instalaci&amp;oacute;n en curso y esto autom&amp;aacute;ticamente desactiva la reproducci&amp;oacute;n autom&amp;aacute;tica.&lt;/p&gt;
&lt;p&gt;Por &amp;uacute;ltimo, existe la posibilidad de que la aplicaci&amp;oacute;n que est&amp;eacute; ejecut&amp;aacute;ndose en primer plano&amp;nbsp;haya desactivado la reproducci&amp;oacute;n autom&amp;aacute;tica. Esto es &amp;uacute;til por ejemplo en el caso de aplicaciones multimedia, de instalaci&amp;oacute;n,&amp;nbsp;de grabaci&amp;oacute;n de CD,&amp;nbsp;etc. Para conseguir esto la aplicaci&amp;oacute;n en cuesti&amp;oacute;n implementa la interfaz &lt;a href="http://msdn.microsoft.com/en-us/library/bb761373(VS.85).aspx"&gt;IQueryCancelAutoPlay&lt;/a&gt;, tal y como se comenta en MSDN, y se a&amp;ntilde;ade a la clave de Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\CancelAutoplay. Tambi&amp;eacute;n puede administrar el mensaje &lt;em&gt;QueryCancelAutoPlay&lt;/em&gt; que le env&amp;iacute;a el sistema a su ventana y decidir si quiere desactivar la reproducci&amp;oacute;n autom&amp;aacute;tica o no. A modo de ejemplo pr&amp;aacute;ctico, la utilidad de grabaci&amp;oacute;n de im&amp;aacute;genes ISO de Windows 7 utiliza este m&amp;eacute;todo para desactivar la reproducci&amp;oacute;n autom&amp;aacute;tica de la unidad seleccionada, temporalmente.&lt;/p&gt;
&lt;p&gt;El sistema de recolecci&amp;oacute;n de &lt;em&gt;feedback&lt;/em&gt; SQM (Service Quality Metrics) de Microsoft recopila informaci&amp;oacute;n detallada acerca de las causas por las cuales est&amp;aacute; desactivada la reproducci&amp;oacute;n autom&amp;aacute;tica en Windows, etc., con el fin de enviarlas a Microsoft para que se estudie c&amp;oacute;mo trabajan&amp;nbsp;millones de usuarios en todo el mundo y as&amp;iacute; poder mejorar el producto. Es importante comentar que la participaci&amp;oacute;n en este programa&amp;nbsp;de &lt;em&gt;feedback&lt;/em&gt;, que oficialmente recibe el nombre de &lt;em&gt;Windows Customer Experience Improvement Program&lt;/em&gt;&amp;nbsp;es completamente voluntaria y se puede activar desde &lt;em&gt;Inicio&lt;/em&gt;, escribiendo &lt;em&gt;CEIP&lt;/em&gt; en la caja de b&amp;uacute;squeda y seleccionando el &amp;iacute;tem de Panel de control ofrecido.&lt;/p&gt;
&lt;p&gt;En cuanto a AutoPlay, el sistema inspecciona el contenido del medio reci&amp;eacute;n insertado con el fin de presentar al usuario tareas espec&amp;iacute;ficas con el tipo de contenido que est&amp;aacute; tratando. En un primer momento, el sistema analiza el fichero Autorun.inf por si hubiera alguna gu&amp;iacute;a acerca del contenido de ese dispositivo. El fichero Autorun.inf admite&amp;nbsp;una&amp;nbsp;secci&amp;oacute;n como&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;[Content] &lt;/p&gt;
&lt;p&gt;MusicFiles = True &lt;/p&gt;
&lt;p&gt;PictureFiles = False &lt;/p&gt;
&lt;p&gt;VideoFiles = False&lt;/p&gt;
&lt;/code&gt;que le dir&amp;iacute;a al sistema que el medio contiene &amp;uacute;nicamente archivos de m&amp;uacute;sica, por lo que se mostrar&amp;iacute;an tareas orientadas&amp;nbsp;a tratar con m&amp;uacute;sica. Es importante resaltar que la secci&amp;oacute;n [Content]&amp;nbsp;es independiente de lo que haya realmente en el medio: Si el fichero Autorun.inf dice que no hay ficheros de v&amp;iacute;deo, la reproducci&amp;oacute;n autom&amp;aacute;tica no mostrar&amp;aacute; tareas relacionadas con el tratamiento de v&amp;iacute;deos, pese a que los haya en el medio. Otras dos secciones del fichero Autorun.inf que est&amp;aacute;n relacionadas con Autoplay son [ExclusiveContentPaths], que contiene las rutas que debe analizar el sistema para extraer el tipo de contenido que hay en el medio, e [IgnoreContentPaths], que contiene rutas que no ser&amp;aacute;n analizadas, pese a que sean subcarpetas de una ruta establecida en la secci&amp;oacute;n [ExclusiveContentPaths]. Estas &amp;uacute;ltimas secciones son &amp;uacute;tiles y recomendables para el caso de medios con una cantidad bastante considerable de contenido, pues el sistema se demorar&amp;aacute; recorriendo directorios que no contienen datos relevantes desde el punto de vista de la multimedia. Puede obtener m&amp;aacute;s informaci&amp;oacute;n sobre estas secciones del fichero Autorun.inf en el siguiente art&amp;iacute;culo de MSDN: &lt;a href="http://msdn.microsoft.com/en-us/library/cc144200(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc144200(VS.85).aspx&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Este art&amp;iacute;culo pretende ser un repaso general de las funcionalidades Autorun/AutoPlay de Windows 7, clarificando las dudas que hay sobre el fichero Autorun.inf en unidades USB en Windows 7, y haciendo hincapi&amp;eacute; en aquellos aspectos que pueden desactivar la reproducci&amp;oacute;n autom&amp;aacute;tica, por si en alg&amp;uacute;n momento tuviera que abordar un sistema con este problema.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1740381" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consultas/default.aspx">Consultas</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Funcionamiento/default.aspx">Funcionamiento</category></item><item><title>Sobre el error "La operación solicitada requiere elevación" que puede devolver Runas.exe en Windows Vista/7</title><link>http://msmvps.com/blogs/dmartin/archive/2009/10/03/sobre-runas-exe-en-windows-7.aspx</link><pubDate>Sun, 04 Oct 2009 01:32:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1724594</guid><dc:creator>dmartin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1724594</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1724594</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/10/03/sobre-runas-exe-en-windows-7.aspx#comments</comments><description>&lt;p&gt;En un foro que frecuento un usuario ten&amp;iacute;a el siguiente problema: Al intentar ejecutar como administrador un programa en Windows 7 usando el comando Runas.exe, le aparec&amp;iacute;a el siguiente mensaje de error:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;740: La operaci&amp;oacute;n solicitada requiere elevaci&amp;oacute;n.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ciertamente el usuario estaba proporcionando el nombre de usuario y la contrase&amp;ntilde;a de un usuario con privilegios administrativos as&amp;iacute; que... &amp;iquest;d&amp;oacute;nde estar&amp;iacute;a el problema?&lt;/p&gt;
&lt;p&gt;En primer lugar, vamos a analizar con calma lo que quiere decir el mensaje de error. El mensaje de error &amp;quot;La operaci&amp;oacute;n solicitada requiere elevaci&amp;oacute;n&amp;quot; est&amp;aacute; recogido en el fichero de cabecera Ntstatus.h del SDK de Windows Vista y posteriores. Concretamente est&amp;aacute; definido con el nombre de macro ERROR_ELEVATION_REQUIRED.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Cu&amp;aacute;ndo se devuelve ese c&amp;oacute;digo de error durante el funcionamiento de Windows?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En Windows los procesos se crean usando la API CreateProcess. Uno de los pasos que se siguen antes de crear un proceso en Windows Vista y posteriores es comprobar si el proceso en cuesti&amp;oacute;n necesita elevar sus privilegios o no. A la hora de determinar este aspecto, entran en juego, entre otros,&amp;nbsp;dos par&amp;aacute;metros: El nivel de ejecuci&amp;oacute;n (&lt;em&gt;runlevel&lt;/em&gt;) impuesto por el manifiesto de la propia aplicaci&amp;oacute;n, y el token del usuario que est&amp;aacute; lanzando ese programa. Existen tres posibles niveles de ejecuci&amp;oacute;n para una aplicaci&amp;oacute;n:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;asInvoker&lt;/em&gt;: El nivel de ejecuci&amp;oacute;n es el mismo que el del proceso padre.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;highestAvailable&lt;/em&gt;: El nivel de ejecuci&amp;oacute;n es el de mayores privilegios posibles, considerando el tipo de cuenta desde la&amp;nbsp;cual&amp;nbsp;se ejecuta el proceso.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;requireAdministrator&lt;/em&gt;: El nivel de ejecuci&amp;oacute;n es administrativo, independientemente de las dem&amp;aacute;s circunstancias.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta tabla recoge de forma b&amp;aacute;sica las posibilidades:&lt;/p&gt;
&lt;table style="width:100%;"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="width:239px;"&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Nivel de ejecuci&amp;oacute;n de la aplicaci&amp;oacute;n&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;&lt;em&gt;Token&lt;/em&gt; del usuario&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;Requiere elevaci&amp;oacute;n o no&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="width:239px;"&gt;AsInvoker&lt;/td&gt;
&lt;td&gt;Cualquiera&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="width:239px;"&gt;highestAvailable&lt;/td&gt;
&lt;td&gt;Administrador &amp;quot;elevado&amp;quot;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="width:239px;"&gt;highestAvailable&lt;/td&gt;
&lt;td&gt;Administrador &amp;quot;est&amp;aacute;ndar&amp;quot;&lt;/td&gt;
&lt;td&gt;S&amp;iacute;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="width:239px;"&gt;highestAvailable&lt;/td&gt;
&lt;td&gt;Otro caso&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="width:239px;"&gt;requireAdministrator&lt;/td&gt;
&lt;td&gt;Administrador &amp;quot;elevado&amp;quot;&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="width:239px;"&gt;requireAdministrator&lt;/td&gt;
&lt;td&gt;Otro caso&lt;/td&gt;
&lt;td&gt;S&amp;iacute;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Por administrador &amp;quot;elevado&amp;quot; me refiero a aquella cuenta con privilegios administrativos pero que, o bien ya ha elevado expl&amp;iacute;citamente sus privilegios (a trav&amp;eacute;s de un cuadro de UAC), o bien no tiene activada la caracter&amp;iacute;stica Modo de aprobaci&amp;oacute;n del administrador (&lt;em&gt;Admin Approval Mode&lt;/em&gt;). Esta caracter&amp;iacute;stica se puede desactivar desde Directiva de grupo, pero yo personalmente lo desaconsejo.&amp;nbsp;Un ejemplo de este tipo de cuentas es la cuenta &amp;quot;Administrador&amp;quot;, creada durante la instalaci&amp;oacute;n del sistema operativo. Recuerde que el resto de cuentas con privilegios administrativos poseen dos &lt;em&gt;tokens&lt;/em&gt;: uno limitado, con el que &amp;quot;act&amp;uacute;an&amp;quot; por defecto, y otro &amp;quot;administrativo&amp;quot;, que pueden aplicar si el usuario as&amp;iacute; lo indica a trav&amp;eacute;s de un cuadro de UAC.&lt;/p&gt;
&lt;p&gt;Una vez que CreateProcess falla (devuelve un valor distinto de 1) y el &amp;uacute;ltimo error se establece como ERROR_ELEVATION_REQUIRED (columna &amp;quot;Requiere elevaci&amp;oacute;n&amp;nbsp;o no&amp;quot; de la tabla anterior), es asunto del proceso padre el tratar convenientemente este error. Si no lo hace, se registrar&amp;aacute; en Visor de sucesos, apartado dedicado a UAC, un evento informando de que el proceso padre no trat&amp;oacute; apropiadamente el error&amp;nbsp;&lt;span lang="EN"&gt;ERROR_ELEVATION_REQUIRED.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN"&gt;&lt;strong&gt;&amp;iquest;Qu&amp;eacute; ocurre cuando se lanza una aplicaci&amp;oacute;n desde la l&amp;iacute;nea de comandos?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN"&gt;Imaginemos que el usuario intenta ejecutar el desfragmentador de disco de Windows 7 usando para ello una sintaxis de Runas.exe como esta:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN"&gt;&lt;strong&gt;runas /u:UsuarioAdministrador dfrgui.exe&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN"&gt;&lt;/span&gt;&lt;span lang="EN"&gt;B&amp;aacute;sicamente la l&amp;iacute;nea de comandos detecta que no se trata de un comando interno, sino que se trata del programa Runas.exe, y por tanto&amp;nbsp;se dispone a ejecutarlo usando CreateProcess. Como Runas.exe no es un programa que est&amp;aacute; marcado para requerir elevaci&amp;oacute;n de privilegios, CreateProcess retorna &amp;eacute;xito.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN"&gt;Una vez que el planificador del sistema operativo&amp;nbsp;cede el control al proceso Runas.exe reci&amp;eacute;n creado, este se dispone a analizar su l&amp;iacute;nea de comandos. Se encuentra con una petici&amp;oacute;n de ejecutar Dfrgui.exe como si fuera el usuario administrador pasado como par&amp;aacute;metro. Sin embargo, Runas.exe&amp;nbsp;es poco&amp;nbsp;m&amp;aacute;s que un &amp;quot;envoltorio&amp;quot; de la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms682431(VS.85).aspx"&gt;CreateProcessWithLogonW&lt;/a&gt;, que a su vez es poco m&amp;aacute;s que un envoltorio de la API CreateProcess, pero pasando otro perfil de usuario distinto como par&amp;aacute;metro.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN"&gt;Durante su ejecuci&amp;oacute;n, CreateProcess determina que Dfrgui.exe requiere privilegios administrativos (puesto que as&amp;iacute; se lo indica su manifiesto), y por ello devuelve falso y establace el &amp;uacute;ltimo error como ERROR_ELEVATION_REQUIRED. Como Runas.exe es una herramienta que no est&amp;aacute; dise&amp;ntilde;ada para tratar apropiadamente ese error, simplemente lo devuelve por pantalla de la forma &amp;quot;740: La operaci&amp;oacute;n solicitada requiere elevaci&amp;oacute;n&amp;quot;.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN"&gt;Una vez desvelado el misterio, resta por comentar un aspecto que a estas alturas quiz&amp;aacute; ya se haya planteado:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN"&gt;&lt;strong&gt;&amp;iquest;C&amp;oacute;mo es posible que ejecutando Dfrgui.exe desde la l&amp;iacute;nea de comandos -sin usar Runas.exe- s&amp;iacute; que aparezca un cuadro de UAC?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN"&gt;El secreto est&amp;aacute; en que la l&amp;iacute;nea de comandos, antes de llamar a CreateProcess, informa al sistema de que va a tratar los posibles ERROR_ELEVATION_REQUIRED que puedan surgir. Esto lo consigue estableciendo unos atributos no documentados a la estructura &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms686329(VS.85).aspx"&gt;STARTUPINFOEX&lt;/a&gt;, que se pasa como par&amp;aacute;metro a la familia de API CreateProcess. Esto hace que no se registre el correspondiente error en el apartado UAC del Visor de sucesos. Seguidamente, la l&amp;iacute;nea de comandos, sabiendo que se trata de un programa que debe elevar sus privilegios, lo intenta ejecutar mediante la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/bb762154(VS.85).aspx"&gt;ShellExecuteEx&lt;/a&gt;. &lt;strong&gt;Esta API s&amp;iacute; muestra el correspondiente cuadro de UAC, as&amp;iacute; que es la v&amp;iacute;a apropiada para ejecutar una aplicaci&amp;oacute;n que requiera privilegios administrativos.&lt;/strong&gt;&lt;/span&gt;
&lt;p&gt;En resumen, me gustar&amp;iacute;a resaltar estos puntos&amp;nbsp;del tema del art&amp;iacute;culo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;En Windows Vista y Windows 7 la &amp;uacute;nica forma de ejecutar algo con privilegios administrativos es mediante un cuadro de UAC. No vale con poner el nombre de usuario y la contrase&amp;ntilde;a de un administrador en la l&amp;iacute;nea de comandos.&lt;/li&gt;
&lt;li&gt;Todo lo que se ejecute mediante la API CreateProcess, o alguna derivada de ella,&amp;nbsp;&lt;strong&gt;no har&amp;aacute; que aparezca un cuadro de UAC&lt;/strong&gt;. Un ejemplo de ello es la utilidad Runas.exe.&lt;/li&gt;
&lt;li&gt;Runas.exe, en Windows Vista/7, sirve para ejecutar una aplicaci&amp;oacute;n como si fuera otro usuario, &lt;strong&gt;pero no sirve para ejecutarla con mayores privilegios.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Si quiere que se ejecute una aplicaci&amp;oacute;n que requiere privilegios administrativos, &lt;strong&gt;use la API ShellExecuteEx&lt;/strong&gt;, o alguna de sus derivadas. Esta API s&amp;iacute; permite la aparici&amp;oacute;n de un cuadro de UAC para que el usuario eleve sus privilegios.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1724594" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consultas/default.aspx">Consultas</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Curiosidades/default.aspx">Curiosidades</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consejos/default.aspx">Consejos</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Funcionamiento/default.aspx">Funcionamiento</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Tips/default.aspx">Tips</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/UAC/default.aspx">UAC</category></item><item><title>Sobre la nueva sintaxis del Panel de control en Windows Vista/Windows 7</title><link>http://msmvps.com/blogs/dmartin/archive/2009/09/11/sobre-la-nueva-sintaxis-del-panel-de-control-en-windows-vista-windows-7.aspx</link><pubDate>Fri, 11 Sep 2009 23:42:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1722676</guid><dc:creator>dmartin</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1722676</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1722676</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/09/11/sobre-la-nueva-sintaxis-del-panel-de-control-en-windows-vista-windows-7.aspx#comments</comments><description>&lt;p&gt;Quiz&amp;aacute; ya se haya dado cuenta de que en Windows Vista/Windows 7&amp;nbsp;algunos m&amp;oacute;dulos del Panel de control que anteriormente estaban implementados en la cl&amp;aacute;sica forma de un fichero .cpl ahora lo est&amp;aacute;n en la forma de un fichero ejecutable (.exe). El motivo de este cambio es que con la introducci&amp;oacute;n de Control de cuentas de usuario (UAC),&amp;nbsp;se da el caso de que algunos de estos m&amp;oacute;dulos requieren privilegios administrativos para ejecutarse. Ve&amp;aacute;moslo con un ejemplo:&lt;/p&gt;
&lt;p&gt;El ejecutable DPIScaling.exe del&amp;nbsp;directorio \Windows\System32&amp;nbsp;implementa la opci&amp;oacute;n del&amp;nbsp;Panel de control que permite cambiar&amp;nbsp;la&amp;nbsp;escala DPI del sistema. Este m&amp;oacute;dulo requiere privilegios administrativos&amp;nbsp;para ejecutarse, como as&amp;iacute; indica su fichero de manifiesto. Para verlo pr&amp;aacute;cticamente, descargue Strings desde&amp;nbsp;&lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb897439.aspx"&gt;http://technet.microsoft.com/en-us/sysinternals/bb897439.aspx&lt;/a&gt;&amp;nbsp;y abra una&amp;nbsp;ventana de l&amp;iacute;nea de comandos en el directorio donde la&amp;nbsp;ha extra&amp;iacute;do. Introduzca este comando y pulse INTRO:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;strings %SystemRoot%\System32\DPIScaling.exe&amp;nbsp;| findstr /i requireAdministrator&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;La salida del comando, &lt;code&gt;level=&amp;quot;requireAdministrator&amp;quot;&lt;/code&gt;, nos indica que el ejecutable en cuesti&amp;oacute;n requerir&amp;aacute; privilegios administrativos cuando lo invoquemos. Otros posibles valores para el atributo level son:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;asInvoker:&lt;/em&gt; El ejecutable no requerir&amp;aacute; privilegios administrativos.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;highestAvailable:&lt;/em&gt; El ejecutable se ejecutar&amp;aacute; con los m&amp;aacute;ximos privilegios que le permita la cuenta de&amp;nbsp;usuario&amp;nbsp;desde la que ha sido invocado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nombres can&amp;oacute;nicos en Windows Vista/Windows 7&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esta reestructuraci&amp;oacute;n de buena parte de los elementos del Panel de control trajo consigo una de las novedades&amp;nbsp;que se introdujeron en&amp;nbsp;Windows Vista y que se han mantenido en&amp;nbsp;Windows 7: la posibilidad de abrir elementos del Panel de control usando un nombre can&amp;oacute;nico. Un nombre can&amp;oacute;nico es un nombre en ingl&amp;eacute;s, no traducible, que describe de manera cercana al usuario el cometido de ese elemento del Panel de control. Esto evita que el usuario tenga que aprender el nombre de ficheros .cpl, muchas veces cr&amp;iacute;pticos, y adem&amp;aacute;s permite separar el nombre del &amp;iacute;tem de su implementaci&amp;oacute;n, ya sea en un cl&amp;aacute;sico fichero .cpl o, ya sea en un fichero .dll o .exe.&lt;/p&gt;
&lt;p&gt;Por ejemplo, para abrir el panel Agregar o quitar programas de Windows Vista/Windows 7, se puede usar esta sintaxis:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%windir%\system32\control.exe /name Microsoft.ProgramsAndFeatures&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;De d&amp;oacute;nde proviene ese nombre can&amp;oacute;nico, Microsoft.ProgramsAndFeatures?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cuando el ejecutable Control.exe recibe el par&amp;aacute;metro /name seguido de un nombre can&amp;oacute;nico, se invoca a la funci&amp;oacute;n &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/bb775394(VS.85).aspx"&gt;IOpenControlPanel::Open&lt;/a&gt;, la cual&amp;nbsp;en primer lugar busca el elemento correspondiente del Panel de control al que se est&amp;aacute; haciendo referencia. Cabe destacar que el Panel de control es un directorio &lt;strong&gt;virtual&lt;/strong&gt; (no reside f&amp;iacute;sicamente en el disco, sino que est&amp;aacute; implementado por el &lt;em&gt;shell&lt;/em&gt;), situado en la clave de Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace. El valor &lt;em&gt;(Predeterminado)&lt;/em&gt; de cada una de las subclaves de esa rama de Registro contiene el nombre con el que se mostrar&amp;aacute; en Panel de control (no el nombre can&amp;oacute;nico). Para encontrar la implementaci&amp;oacute;n de, digamos, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace\{0DF44EAA-FF21-4412-828E-260A8728E7F1} (&amp;iacute;tem de las propiedades de la barra de tareas y men&amp;uacute; Inicio), se accede a la clave de registro HKEY_CLASSES_ROOT\CLSID\{0DF44EAA-FF21-4412-828E-260A8728E7F1}, en la cual existe un valor de registro de nombre &lt;em&gt;System.ApplicationName&lt;/em&gt; y cuyo contenido es el nombre can&amp;oacute;nico: &lt;em&gt;Microsoft.TaskbarAndStartMenu&lt;/em&gt;. As&amp;iacute; pues, para abrir las propiedades de la barra de tareas y del men&amp;uacute; Inicio ya sabemos que&amp;nbsp;bastar&amp;iacute;a con ejecutar lo siguiente:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%windir%\system32\control.exe /name Microsoft.TaskbarAndStartMenu&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para ver qu&amp;eacute; es lo que realmente se ejecuta, eche un vistazo a la clave HKEY_CLASSES_ROOT\CLSID\{0DF44EAA-FF21-4412-828E-260A8728E7F1}\Shell\Open\Command.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cada &amp;iacute;tem del Panel de control puede implementar varias p&amp;aacute;ginas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Podemos entender las p&amp;aacute;ginas como subsecciones espec&amp;iacute;ficas del &amp;iacute;tem del Panel de control. Para indicar una, debe usarse la sintaxis&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%windir%\system32\control.exe /name &lt;em&gt;Nombre_can&amp;oacute;nico&lt;/em&gt; /page &lt;em&gt;P&amp;aacute;gina&lt;/em&gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ve&amp;aacute;moslo con un ejemplo:&lt;/p&gt;
&lt;p&gt;Con los conocimientos que hemos adquirido, nos resulta sencillo determinar que el &amp;iacute;tem Personalizar del Panel de control est&amp;aacute; implementado en la DLL Themecpl.dll. Es en esta DLL donde encontraremos informaci&amp;oacute;n acerca de las posibles p&amp;aacute;ginas de este &amp;iacute;tem, en la forma, como no, de fichero XML.&lt;/p&gt;
&lt;p&gt;Esta vez usaremos la aplicaci&amp;oacute;n gr&amp;aacute;fica Resource Hacker, que puede descargar gratuitamente desde &lt;a href="http://www.angusj.com/resourcehacker/"&gt;http://www.angusj.com/resourcehacker/&lt;/a&gt;. Al abrir el fichero Themecpl.dll en&amp;nbsp;esta aplicaci&amp;oacute;n,&amp;nbsp;nos encontramos con dos ficheros XML adicionales al t&amp;iacute;pico fichero de manifiesto (.manifest) que hab&amp;iacute;amos visto hasta ahora.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/7838.Tasks_5F00_CPL.PNG"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x494/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/7838.Tasks_5F00_CPL.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/7838.Tasks_5F00_CPL.PNG"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Este primer fichero XML especifica una serie de tareas que puede realizar el elemento del Panel de control &amp;quot;Personalizar&amp;quot;. Estas tareas (cambiar los colores, el fondo de pantalla, etc.) se muestran como enlaces de texto justo debajo del elemento del Panel de control (suponiendo que est&amp;eacute; configurado en la vista por categor&amp;iacute;as). Y lo que es m&amp;aacute;s importante, estas tareas son indizables por el sistema de b&amp;uacute;squeda de Windows Vista. Puede obtener m&amp;aacute;s informaci&amp;oacute;n en este art&amp;iacute;culo de MSDN: &lt;a href="http://msdn.microsoft.com/en-us/library/bb776840(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/bb776840(VS.85).aspx&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/0027.Paginas_5F00_CPL.PNG"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/0027.Paginas_5F00_CPL.PNG"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x494/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/0027.Paginas_5F00_CPL.PNG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Esta segunda imagen hace referencia&amp;nbsp;al segundo fichero XML, que&amp;nbsp;es el que contiene la informaci&amp;oacute;n acerca de cada una de las p&amp;aacute;ginas que implementa este &amp;iacute;tem del Panel de control. Entre las etiquetas &lt;em&gt;&amp;lt;pagedefinition&amp;gt;&amp;lt;/pagedefinition&amp;gt;&lt;/em&gt; nos encontramos con una etiqueta &lt;em&gt;&amp;lt;properties&amp;gt;,&lt;/em&gt; que hace referencia a cada una de las p&amp;aacute;ginas. El atributo &lt;em&gt;canonicalName&lt;/em&gt; nos ofrece su nombre can&amp;oacute;nico.&lt;/p&gt;
&lt;p&gt;Como vemos, el &amp;iacute;tem &amp;quot;Personalizar&amp;quot; del Panel de control admite como sintaxis:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%windir%\system32\control.exe /name Microsoft.Personalization /page pageColorization&lt;/code&gt; (para cambiar la configuraci&amp;oacute;n de color)&lt;/p&gt;
&lt;p&gt;&lt;code&gt;%windir%\system32\control.exe /name Microsoft.Personalization /page pageWallpaper&lt;/code&gt; (para cambiar el fondo de escritorio)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejercicio&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ahora que ya sabe c&amp;oacute;mo escudri&amp;ntilde;ar en los &amp;iacute;tems del Panel de control con el fin de construir accesos directos lo m&amp;aacute;s directos posibles (valga la redundancia), le propongo como ejercicio que en un sistema Windows 7 averig&amp;uuml;e la sintaxis para un acceso directo al Monitor de confiabilidad, que como sabe en Windows 7 est&amp;aacute; algo escondido dentro del Centro de actividades (&lt;em&gt;Action Center&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Si se rinde, puede ver la soluci&amp;oacute;n&amp;nbsp;seleccionando texto a partir de aqu&amp;iacute;: &lt;span style="color:white;"&gt;control.exe /name&amp;nbsp;Microsoft.ActionCenter /page pageReliabilityView&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1722676" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consultas/default.aspx">Consultas</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Curiosidades/default.aspx">Curiosidades</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Funcionamiento/default.aspx">Funcionamiento</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Tips/default.aspx">Tips</category></item><item><title>Descubrir valores de Registro no documentados usando Process Monitor</title><link>http://msmvps.com/blogs/dmartin/archive/2009/08/16/descubrir-valores-de-registro-no-documentados-usando-process-monitor.aspx</link><pubDate>Sun, 16 Aug 2009 23:01:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1716254</guid><dc:creator>dmartin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1716254</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1716254</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/08/16/descubrir-valores-de-registro-no-documentados-usando-process-monitor.aspx#comments</comments><description>&lt;p&gt;A mucha gente le gusta&amp;nbsp;personalizar su sistema de escritorio al m&amp;aacute;ximo posible. Por ello, Microsoft acostumbra a incorporar en sus sistemas operativos bastantes men&amp;uacute;s y cuadros de di&amp;aacute;logo capaces de personalizar muchos de los detalles de funcionamiento de Windows. Sin embargo, hay ciertos detalles que no son modificables desde la interfaz gr&amp;aacute;fica, solamente desde el Registro; siempre&amp;nbsp;siguiendo los pasos de alg&amp;uacute;n art&amp;iacute;culo de la documentaci&amp;oacute;n oficial de Microsoft (KB, MSDN LIbrary, Technet Library, etc.). Tambi&amp;eacute;n hay detalles que no est&amp;aacute;n documentados pero que&amp;nbsp;pueden &amp;quot;descubrirse&amp;quot; utilizando herramientas de monitoreo del Registro, como Process Monitor, tal y como se explica en este art&amp;iacute;culo.&lt;/p&gt;
&lt;p&gt;En el caso que nos ocupa, el usuario quer&amp;iacute;a modificar el tiempo de aparici&amp;oacute;n de la vista en miniatura de una aplicaci&amp;oacute;n en la barra de tareas de Windows Vista. En Windows Vista, la funcionalidad Windows Aero permite ver, a golpe de rat&amp;oacute;n, el contenido de todas y cada una de las ventanas minimizadas en la barra de tareas. El usuario intentaba buscar una forma de acortar ese tiempo de aparici&amp;oacute;n de la vista en miniatura, pues le parec&amp;iacute;a excesivo. En Internet la alternativa que es m&amp;aacute;s popular es la de modificar el valor de Registro &lt;em&gt;MouseHoverTime&lt;/em&gt; de la clave de Registro HKEY_CURRENT_USER\Control Panel\Mouse. Sin embargo, este valor influye en el tiempo que tarda en reconocerse un posicionamiento del cursor del rat&amp;oacute;n, en cualquier parte de la interfaz gr&amp;aacute;fica de Windows. Era necesario buscar alg&amp;uacute;n valor de Registro m&amp;aacute;s espec&amp;iacute;fico, y para ello iba a recurrir a Process Monitor.&lt;/p&gt;
&lt;p&gt;Antes de nada hay que comentar que no ten&amp;iacute;a la garant&amp;iacute;a de que existiera un valor de Registro que controlara ese aspecto tan espec&amp;iacute;fico de la interfaz gr&amp;aacute;fica de Windows. De existir, suelen ser par&amp;aacute;metros que solo se tienen en cuenta en las versiones de depuraci&amp;oacute;n (&lt;em&gt;checked&lt;/em&gt;) del sistema operativo. De todas formas, abr&amp;iacute; Process Monitor y establec&amp;iacute; un filtro de aquellos eventos de Registro que contuvieran en su ruta la palabra&amp;nbsp;&amp;quot;Thumbnail&amp;quot;. Inici&amp;eacute; Explorer.exe y r&amp;aacute;pidamente me encontr&amp;eacute; con&amp;nbsp;tres eventos bastante interesantes:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/5140.ExplorerThumbnails.PNG"&gt;&lt;img src="http://msmvps.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/5140.ExplorerThumbnails.PNG" border="0" style="max-height:63px;max-width:1023px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;El primer evento indica el momento en que Explorer.exe examina una directiva, &lt;em&gt;TaskbarNoThumbnail&lt;/em&gt;, configurable desde Directiva de grupo, encargada&amp;nbsp;de desactivar las vistas en miniatura de la barra de tareas. La lectura de este valor me hizo pensar que los dos valores siguientes podr&amp;iacute;an estar relacionados con lo que buscaba.&lt;/p&gt;
&lt;p&gt;Esos dos eventos siguientes hacen referencia a una b&amp;uacute;squeda de cierta rama en el Registro (&lt;em&gt;ExplorerThumbnails&lt;/em&gt;), tanto en la rama HKEY_CURRENT_USER como en la rama HKEY_LOCAL_MACHINE. El primer evento hace referencia al SID de mi usuario dentro de la rama HKEY_USERS (HKU) simplemente porque ejecut&amp;eacute; Process Monitor desde una cuenta limitada, proporcionando obviamente&amp;nbsp;el nombre de usuario y contrase&amp;ntilde;a del administrador.&lt;/p&gt;
&lt;p&gt;&amp;iquest;Qu&amp;eacute; ser&amp;iacute;a esa rama &lt;em&gt;ExplorerThumbnails&lt;/em&gt;? La verdad es que no encontr&amp;eacute; nada documentado en Internet, pero su nombre era lo suficientemente atractivo como para seguir indagando. Una de las cosas que suelo hacer en casos como este es crear la clave que busca en este caso Explorer.exe y ver qu&amp;eacute; valores o subclaves de Registro busca a continuaci&amp;oacute;n. Eso hice: Abr&amp;iacute; Editor del Registro y cre&amp;eacute; la clave de Registro &lt;em&gt;ExplorerThumbnails&lt;/em&gt;. Volv&amp;iacute; a capturar una traza con Process Monitor y el resultado ofreci&amp;oacute; otros tres valores tan interesantes como desconocidos:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://msmvps.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/3733.Contenidos_5F00_ExplorerThumbnails.PNG" border="0" style="max-height:146px;max-width:1031px;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Los valores &lt;em&gt;InitialThumbnail&lt;/em&gt;, &lt;em&gt;InitialTooltip&lt;/em&gt; y &lt;em&gt;AutoPopTooltip&lt;/em&gt; me hac&amp;iacute;an pensar que efectivamente estaban relacionados con lo que realmente buscaba: Modificar el tiempo de aparici&amp;oacute;n de la vista en miniatura. En este caso podr&amp;iacute;a haber experimentado introduciendo algunos valores aleatorios para esos valores de Registro y observar los resultados, aunque en este caso recurr&amp;iacute; a una lectura del c&amp;oacute;digo fuente de Explorer.&lt;/p&gt;
&lt;p&gt;Al parecer, el valor &lt;em&gt;InitialThumbnail&lt;/em&gt; tiene que ver con el tiempo en milisegundos que tarda en aparecer la vista en miniatura desde que se sit&amp;uacute;a el cursor del rat&amp;oacute;n en la aplicaci&amp;oacute;n minimizada en la barra de tareas; &lt;em&gt;InitialTooltip&lt;/em&gt; influye en el tiempo de aparici&amp;oacute;n del texto emergente que siempre aparece encima de la vista en miniatura, un tiempo despu&amp;eacute;s. Por &amp;uacute;ltimo, &lt;em&gt;AutoPopTooltip&lt;/em&gt; influye en el tiempo que tarda en desaparecer el texto emergente. Por defecto, si no se encuentran esos valores en el Registro, el sistema supone, respectivamente, 500, 1000 y 5000 milisegundos.&lt;/p&gt;
&lt;p&gt;Para concluir, codifiqu&amp;eacute; una aplicaci&amp;oacute;n gr&amp;aacute;fica que facilitara la modificaci&amp;oacute;n de estos valores en el&amp;nbsp;Registro: &lt;a href="http://winvista.mvps.org/Ficheros/TweakThumbnails.zip"&gt;http://winvista.mvps.org/Ficheros/TweakThumbnails.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ya conoce otro posible uso de Process Monitor: Intentar descubrir valores de Registro (o ficheros) no documentados pero que pueden permitirnos configurar aspectos m&amp;aacute;s o menos interesantes del sistema operativo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Como indico en el margen izquierdo de este &lt;em&gt;blog&lt;/em&gt;, toda la informaci&amp;oacute;n que no est&amp;aacute; documentada por Microsoft es muy susceptible de cambiar e incluso de desaparecer en versiones posteriores de Windows. Este es el caso particular de esta rama del Registro, pues no es tenida en cuenta en Windows 7. Adicionalmente, deber&amp;aacute; tomar las medidas oportunas si aplica este&lt;em&gt; tip&lt;/em&gt; en un entorno de producci&amp;oacute;n, pues de seguro se trata de un par&amp;aacute;metro que no est&amp;aacute; tan probado como el resto de personalizaciones conocidas en el sistema operativo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1716254" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consultas/default.aspx">Consultas</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Curiosidades/default.aspx">Curiosidades</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Explorer/default.aspx">Explorer</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Tips/default.aspx">Tips</category></item><item><title>Sobre el atributo de sólo lectura aplicado a carpetas</title><link>http://msmvps.com/blogs/dmartin/archive/2009/06/02/sobre-el-atributo-de-s-243-lo-lectura-aplicado-a-carpetas.aspx</link><pubDate>Tue, 02 Jun 2009 13:21:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1693647</guid><dc:creator>dmartin</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1693647</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1693647</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/06/02/sobre-el-atributo-de-s-243-lo-lectura-aplicado-a-carpetas.aspx#comments</comments><description>&lt;p&gt;Si se hiciera un listado con las consultas m&amp;aacute;s frecuentes en los foros de Windows, seguro que esta ocupar&amp;iacute;a una posici&amp;oacute;n bastante destacada: &amp;iquest;Por qu&amp;eacute; no puedo cambiar el atributo de solo lectura a una carpeta de mi sistema?&lt;/p&gt;
&lt;p&gt;Pese a que Microsoft dispone de un art&amp;iacute;culo al respecto (&lt;a target="_blank" href="http://support.microsoft.com/kb/326549/es"&gt;KB326549&lt;/a&gt;), considero que mucha gente a&amp;uacute;n tiene dudas sobre este tema y por eso me he decidido a escribir este art&amp;iacute;culo.&lt;/p&gt;
&lt;p&gt;Si un usuario hace clic con el bot&amp;oacute;n derecho sobre una carpeta de su sistema y selecciona &lt;em&gt;Propiedades&lt;/em&gt;, le aparecer&amp;aacute; un cuadro de di&amp;aacute;logo similar al siguiente (en un sistema XP):&lt;/p&gt;
&lt;p&gt;&lt;img height="457" width="427" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/Solo_5F00_lectura_5F00_XP.PNG" alt="Cuadro de di&amp;aacute;logo Propiedades de carpeta en Windows XP" style="vertical-align:middle;" /&gt;&lt;/p&gt;
&lt;p&gt;Como puede observar en la imagen, la casilla &lt;em&gt;S&amp;oacute;lo lectura&lt;/em&gt; tiene un aspecto particular: No est&amp;aacute; marcada, pues no aparece la t&amp;iacute;pica marca de verificaci&amp;oacute;n en el cuadrado blanco, ni tampoco est&amp;aacute; desmarcada, pues el color del cuadrado no es blanco sino verdoso. &amp;iquest;Qu&amp;eacute; significa esto? Esa casilla es una casilla de tipo triestado; es decir, hay tres posibles estados para esa casilla: &lt;em&gt;Marcada&lt;/em&gt;, &lt;em&gt;desmarcada&lt;/em&gt; e &lt;em&gt;indeterminada&lt;/em&gt;, que es el caso que nos ocupa. Si hace clic varias veces sobre la casilla &lt;em&gt;S&amp;oacute;lo lectura&lt;/em&gt; podr&amp;aacute; ver que va cambiando el estado de la misma. Sin embargo, pese a dejar la casilla en estado marcado y pulsar &lt;em&gt;Aceptar&lt;/em&gt;, al volver a abrir las propiedades de la carpeta la casilla vuelve al estado indeterminado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Cu&amp;aacute;l es la causa de esto?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La causa de este comportamiento es que el atributo de s&amp;oacute;lo lectura no se puede cambiar, para carpetas, desde la interfaz de Windows. Microsoft tom&amp;oacute; esta decisi&amp;oacute;n porque el atributo de s&amp;oacute;lo lectura aplicado a carpetas tiene una sem&amp;aacute;ntica que nada tiene que ver con la del atributo de s&amp;oacute;lo lectura aplicado a ficheros. El atributo de s&amp;oacute;lo lectura aplicado a carpetas &amp;uacute;nicamente quiere decir que la carpeta es una carpeta personalizada (con un icono distintivo, con un fondo, etc.). &lt;/p&gt;
&lt;p&gt;Debe quedar claro que el atributo de s&amp;oacute;lo lectura aplicado a una carpeta no quiere decir que la carpeta no se pueda eliminar o cosas por el estilo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Para qu&amp;eacute; est&amp;aacute; la casilla S&amp;oacute;lo lectura en las propiedades de una carpeta?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Est&amp;aacute; presente porque puede aplicarse a los ficheros que contenga esa carpeta. Si desmarca la casilla &lt;em&gt;S&amp;oacute;lo lectura&lt;/em&gt; en las propiedades de una carpeta y pulsa &lt;em&gt;Aceptar&lt;/em&gt;, lo que ocurre es que se quita el atributo de s&amp;oacute;lo lectura a todos los ficheros que contenga esa carpeta, si es que contiene alguno. De igual forma, si establece el estado de la casilla como marcado (con una marca de verificaci&amp;oacute;n en el cuadrado blanco) y pulsa &lt;em&gt;Aceptar&lt;/em&gt;, todos los ficheros de esa carpeta pasar&amp;aacute;n a tomar el atributo de s&amp;oacute;lo lectura.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entonces, &amp;iquest;c&amp;oacute;mo cambiar el atributo de s&amp;oacute;lo lectura a una carpeta?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Como ha podido ver, Explorador de Windows no permite que el usuario cambie el atributo de s&amp;oacute;lo lectura a una carpeta. Esto se debe a que Microsoft no quiere que los usuarios &amp;quot;jueguen&amp;quot; con este atributo, lo que podr&amp;iacute;a suponer que se perdieran las personalizaciones de algunas carpetas del equipo, incluidas algunas carpetas de sistema importantes para Windows. As&amp;iacute; pues, si un usuario quiere &amp;quot;jugar&amp;quot; con el atributo de s&amp;oacute;lo lectura aplicado a una carpeta, debe hacerlo desde la l&amp;iacute;nea de comandos usando el comando Attrib.exe de un modo similar al siguiente:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;attrib +r &lt;em&gt;&amp;lt;Ruta_carpeta&amp;gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esto aplicar&amp;iacute;a el atributo de s&amp;oacute;lo lectura a la carpeta indicada por &amp;lt;Ruta_carpeta&amp;gt;&lt;/p&gt;
&lt;p&gt;Similarmente, el comando&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;attrib -r &lt;em&gt;&amp;lt;Ruta_carpeta&amp;gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;desactivar&amp;iacute;a este atributo.&lt;/p&gt;
&lt;p&gt;Espero que este art&amp;iacute;culo sirva para aclarar de manera definitiva en qu&amp;eacute; consiste exactamente el atributo de s&amp;oacute;lo lectura cuando se aplica a una carpeta, por qu&amp;eacute; Explorador de Windows siempre muestra la casilla correspondiente como indeterminada, y qu&amp;eacute; ocurre cuando el usuario deja esa casilla en estado marcado o en estado desmarcado y pulsa sobre &lt;em&gt;Aceptar&lt;/em&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1693647" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consultas/default.aspx">Consultas</category></item><item><title>"MMC no puede abrir el archivo". Cómo analizar el error</title><link>http://msmvps.com/blogs/dmartin/archive/2009/05/03/quot-mmc-no-puede-abrir-el-archivo-quot-c-243-mo-analizar-el-error.aspx</link><pubDate>Sun, 03 May 2009 14:28:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1691784</guid><dc:creator>dmartin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1691784</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1691784</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/05/03/quot-mmc-no-puede-abrir-el-archivo-quot-c-243-mo-analizar-el-error.aspx#comments</comments><description>&lt;p&gt;Un problema que le ocurre a no poca gente que usa Windows XP consiste en que al intentar abrir un fichero con extensi&amp;oacute;n MSC (Services.msc, Diskmgmt.msc, etc.) el sistema muestra el siguiente mensaje de error:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;MMC no puede abrir el archivo C:\WINDOWS\system32\services.msc.&lt;/p&gt;
&lt;p&gt;Puede ser que el archivo no exista, no sea una consola de MMC o fue creado por una versi&amp;oacute;n m&amp;aacute;s reciente de MMC. Tambi&amp;eacute;n puede ser que no tiene suficientes derechos de acceso para abrir el archivo.&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;El propio mensaje nos explica las posibles causas del problema, pero ciertamente la informaci&amp;oacute;n que ofrece es algo vaga e inespec&amp;iacute;fica. El principal problema con el que se encuentra el usuario al recibir este mensaje de error es que, al tratarse de un mensaje de error gen&amp;eacute;rico, es posible que la causa del problema que est&amp;aacute; experimentando&amp;nbsp;no quede recogida en el texto del mensaje de error.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;C&amp;oacute;mo actuar en casos como este?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Hay muchas formas de actuar ante un mensaje de error de este estilo. Una manera consiste en observar si hay alg&amp;uacute;n tipo de LOG que registre informaci&amp;oacute;n detallada sobre el error (lo primero que debemos buscar es el c&amp;oacute;digo de error exacto). Es bastante probable que, de existir la posibilidad de registrar en un fichero LOG la informaci&amp;oacute;n correspondiente a un mensaje de error, esta opci&amp;oacute;n deba activarse expl&amp;iacute;citamente a trav&amp;eacute;s del registro del sistema operativo, o mediante alg&amp;uacute;n otro m&amp;eacute;todo avanzado similar. En ocasiones, como &amp;uacute;ltimo recurso para obtener informaci&amp;oacute;n detallada sobre un mensaje de error tendremos que instalar una versi&amp;oacute;n de depuraci&amp;oacute;n del sistema operativo o aplicaci&amp;oacute;n (versi&amp;oacute;n &lt;em&gt;checked&lt;/em&gt;). Las versiones &lt;em&gt;checked&lt;/em&gt; son versiones que incorporan informaci&amp;oacute;n detallada de depuraci&amp;oacute;n (trazas, aserciones, etc.) que son de mucha utilidad a los programadores de aplicaciones. De hecho, para adquirir la versi&amp;oacute;n &lt;em&gt;checked&lt;/em&gt; de un sistema operativo de Microsoft debe ser suscriptor de MSDN. Las versiones de depuraci&amp;oacute;n de los Service Packs s&amp;iacute; est&amp;aacute;n disponibles p&amp;uacute;blicamente desde el Centro de descargas de Microsoft. Por ejemplo, &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=D811F258-C95F-479A-BDF1-0D1154D700A5&amp;amp;displaylang=en"&gt;este&lt;/a&gt; es el enlace para descargar la versi&amp;oacute;n de depuraci&amp;oacute;n del SP3 de Windows XP.&lt;/p&gt;
&lt;p&gt;En este art&amp;iacute;culo se va a describir un m&amp;eacute;todo menos complicado que puede sacarnos del atolladero en bastantes casos. De hecho, nos va a sacar del atolladero en el problema concreto que se describe m&amp;aacute;s arriba.&lt;/p&gt;
&lt;p&gt;En primer lugar, instale la &amp;uacute;ltima versi&amp;oacute;n de Debugging Tools for Windows y configure el depurador Windbg apropiadamente. Para saber c&amp;oacute;mo hacer esto, siga los pasos de &lt;a target="_blank" href="http://msmvps.com/blogs/dmartin/archive/2009/04/04/tutorial-sobre-windbg-parte-i.aspx"&gt;este&lt;/a&gt; tutorial.&lt;/p&gt;
&lt;p&gt;A continuaci&amp;oacute;n, vamos a ejecutar la aplicaci&amp;oacute;n desde dentro del depurador. Para ello, haga clic sobre &lt;em&gt;File&lt;/em&gt;, &lt;em&gt;Open Executable&lt;/em&gt;. En la caja de texto &lt;em&gt;Nombre&lt;/em&gt;, escriba lo siguiente: &lt;em&gt;%SystemRoot%\system32\mmc.exe&lt;/em&gt; En la caja de texto &lt;em&gt;Arguments&lt;/em&gt;, escriba lo siguiente: &lt;em&gt;Services.msc&lt;/em&gt; (o el nombre del fichero MSC que no es capaz de abrir). Pulse &lt;em&gt;Abrir&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Aseg&amp;uacute;rese de que Windbg le informe de que la informaci&amp;oacute;n sobre los s&amp;iacute;mbolos es correcta y pulse F5 (Go).&lt;/p&gt;
&lt;p&gt;Cuando se muestre el mensaje de error en pantalla, active la ventana de Windbg y pulse Ctrl+Pausa o haga clic sobre &lt;em&gt;Debug&lt;/em&gt;, &lt;em&gt;Break&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Ahora tendr&amp;aacute; que examinar la pila de ejecuci&amp;oacute;n de todos y cada uno de los hilos activos de la aplicaci&amp;oacute;n para ver si encuentra el c&amp;oacute;digo de error como&amp;nbsp;par&amp;aacute;metro de alguna de&amp;nbsp;las funciones que all&amp;iacute; aparezcan. Para cambiar de hilo, puede hacerlo&amp;nbsp;gr&amp;aacute;ficamente desde el men&amp;uacute; &lt;em&gt;View&lt;/em&gt;, &lt;em&gt;Processes and Threads&lt;/em&gt;. Seleccione con un simple clic el hilo que quiera examinar (quedar&amp;aacute; marcado en negrita) e introduzca en la caja de texto de Windbg el comando &lt;em&gt;kb&lt;/em&gt; para mostrar la pila de ejecuci&amp;oacute;n. En mi caso, esta es la pila de ejecuci&amp;oacute;n del hilo responsable de abrir el fichero MSC:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:000&amp;gt; kb&lt;br /&gt;ChildEBP RetAddr&amp;nbsp; Args to Child&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;0007f030 7c91df4a 7c809590 00000002 0007f05c ntdll!KiFastSystemCallRet&lt;br /&gt;0007f034 7c809590 00000002 0007f05c 00000001 ntdll!ZwWaitForMultipleObjects+0xc&lt;br /&gt;0007f0d0 7e3995f9 00000002 0007f0f8 00000000 kernel32!WaitForMultipleObjectsEx+0x12c&lt;br /&gt;0007f12c 6c6d4b52 00000001 0007f160 ffffffff USER32!RealMsgWaitForMultipleObjectsEx+0x13e&lt;br /&gt;0007f14c 6c6d4cbd 000024ff ffffffff 00000000 DUSER!CoreSC::Wait+0x3a&lt;br /&gt;0007f170 6c6d4eb9 000024ff 00000000 0007f19c DUSER!CoreSC::WaitMessage+0x40&lt;br /&gt;0007f180 7e3d8e33 000024ff 00000000 00000064 DUSER!MphWaitMessageEx+0x22&lt;br /&gt;0007f19c 7c91e473 0007f1ac 00000008 000024ff USER32!__ClientWaitMessageExMPH+0x1e&lt;br /&gt;0007f1b0 7e399418 7e3a770a 00000000 00000000 ntdll!KiUserCallbackDispatcher+0x13&lt;br /&gt;0007f1e8 7e3a49c4 000301b4 00000000 00000001 USER32!NtUserWaitMessage+0xc&lt;br /&gt;0007f210 7e3ba956 7e390000 000c44f8 00000000 USER32!InternalDialogBox+0xd0&lt;br /&gt;0007f4d0 7e3ba2bc 0007f62c 00000001 00000000 USER32!SoftModalMessageBox+0x938&lt;br /&gt;0007f620 7e3e63fd 0007f62c 00000028 00000000 USER32!MessageBoxWorker+0x2ba&lt;br /&gt;0007f678 7e3d0853 00000000 00e76008 00bafeb0 USER32!MessageBoxTimeoutW+0x7a&lt;br /&gt;0007f698 7e3e6579 00000000 00e76008 00bafeb0 USER32!MessageBoxExW+0x1b&lt;br /&gt;0007f6b4 4754f5fe 00000000 00e76008 00bafeb0 USER32!MessageBoxW+0x45&lt;br /&gt;0007f6f0 0107a216 00e76008 00002010 00e86458 mmcbase!MMCErrorBox+0x7f&lt;br /&gt;0007f740 01058ce9 00000003 &lt;strong&gt;80040154&lt;/strong&gt; 00000000 mmc!DisplayFileOpenError+0x191&lt;br /&gt;0007f794 0104093c 0007f748 00000004 00e6e018 mmc!CAMCDoc::OnOpenDocument+0x90&lt;br /&gt;0007f7e0 5f81424a 0007fc14 00000001 00038988 mmc!CAMCMultiDocTemplate::OpenDocumentFile+0x21f&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Marcada en negrita est&amp;aacute; la parte importante de la traza, el error en cuesti&amp;oacute;n (0x80040154). &amp;iquest;Qu&amp;eacute; quiere decir ese c&amp;oacute;digo de error? El propio Windbg nos lo puede decir:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:001&amp;gt; !error 80040154&lt;br /&gt;Error code: (HRESULT) 0x80040154 (2147746132) - Clase no registrada&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Un error de clase no registrada. Para sab&amp;eacute;r qu&amp;eacute; clase es la afectada, puede usar Process Monitor (&lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx"&gt;http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx&lt;/a&gt;), monitorizar el sistema mientras intenta volver a abrir el archivo MSC y analizar con calma los resultados NOT FOUND que hagan referencia al Registro del sistema, o bien puede seguir las pautas de &lt;a target="_blank" href="http://msmvps.com/blogs/dmartin/archive/2008/08/04/problemas-con-la-inicializaci-243-n-de-explorer-exe.aspx"&gt;este&lt;/a&gt; art&amp;iacute;culo referido a Explorer.exe.&lt;/p&gt;
&lt;p&gt;Para no hacerle perder el tiempo, le dir&amp;eacute; que en este caso la clase afectada est&amp;aacute; en la librer&amp;iacute;a Msxml3.dll y se puede volver a registrar con el comando &lt;em&gt;regsvr32 msxml3.dll&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Otro c&amp;oacute;digo de error que se puede encontrar es el c&amp;oacute;digo 0x2 (archivo no encontrado). En este caso lo ideal es hacer uso de Process Monitor (&lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx"&gt;http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx&lt;/a&gt;), monitorizar el sistema mientras intenta volver a abrir el archivo MSC y analizar con calma los resultados NOT FOUND que hagan referencia, en esta ocasi&amp;oacute;n, al sistema de archivos. Un caso que he analizado ten&amp;iacute;a como culpable al virus Vundo, aunque en general podr&amp;iacute;a tratarse de cualquier otro tipo de &lt;em&gt;malware&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Una duda que quiz&amp;aacute; tenga es, &amp;iquest;c&amp;oacute;mo distinguir en la salida del comando &lt;em&gt;kb&lt;/em&gt; lo que es un c&amp;oacute;digo de error de lo que no? En general yo suelo descartar en primer lugar lo que seguro s&amp;eacute; que no es un c&amp;oacute;digo de error. Por ejemplo, en la traza de pila del ejemplo puede ver que 7e3a770a es un valor que est&amp;aacute; cerca de las direcciones de retorno de cada una de las funciones, por lo que probablemente no&amp;nbsp;sea un c&amp;oacute;digo de error. Los valores 00bafeb0 y similares, es decir, un n&amp;uacute;mero hexadecimal no muy alto, suelen ser punteros a estructuras de datos, por lo que tampoco suelen ser c&amp;oacute;digos de error. Los valores muy bajos (00000002), o que comiencen por 8 (80040154), s&amp;iacute; suelen ser c&amp;oacute;digos de error. Por supuesto, en este caso el nombre de la funci&amp;oacute;n mmc!DisplayFileOpenError+0x191, nos da la pista fundamental.&lt;/p&gt;
&lt;p&gt;Espero que este art&amp;iacute;culo les ayude a investigar a fondo los mensajes de error en Windows en los que no aparece de manera expl&amp;iacute;cita el c&amp;oacute;digo de error. En futuros art&amp;iacute;culos ver&amp;aacute; c&amp;oacute;mo atacar un problema similar pero esta vez&amp;nbsp;causado por una excepci&amp;oacute;n de aplicaci&amp;oacute;n, o bien por una versi&amp;oacute;n incompatible de una DLL en el sistema, usando para ello la aplicaci&amp;oacute;n Dependency Walker.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1691784" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consultas/default.aspx">Consultas</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consejos/default.aspx">Consejos</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>Nuevo artículo sobre el proceso Explorer.exe</title><link>http://msmvps.com/blogs/dmartin/archive/2009/04/10/nuevo-art-237-culo-sobre-el-proceso-explorer-exe.aspx</link><pubDate>Sat, 11 Apr 2009 02:26:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1686808</guid><dc:creator>dmartin</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1686808</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1686808</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/04/10/nuevo-art-237-culo-sobre-el-proceso-explorer-exe.aspx#comments</comments><description>&lt;p&gt;He a&amp;ntilde;adido a mi p&amp;aacute;gina web&amp;nbsp;un art&amp;iacute;culo que explica&amp;nbsp;lo que ocurre cuando se ejecuta el comando Explorer.exe tanto sin par&amp;aacute;metros como con par&amp;aacute;metros, en sistemas XP y Vista. Se incluye toda la casu&amp;iacute;stica, lista completa de par&amp;aacute;metros soportados, c&amp;oacute;mo forzar la creaci&amp;oacute;n de un nuevo proceso, etc. El art&amp;iacute;culo lo puede leer en la direcci&amp;oacute;n &lt;a href="http://winvista.mvps.org/Tema.aspx?ID=233"&gt;http://winvista.mvps.org/Tema.aspx?ID=233&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cualquier duda o sugerencia la puede hacer llegar a trav&amp;eacute;s de la secci&amp;oacute;n de comentarios de esta entrada o mediante el enlace Contact de la parte izquierda del &lt;em&gt;blog&lt;/em&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1686808" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Funcionamiento/default.aspx">Funcionamiento</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Explorer/default.aspx">Explorer</category></item><item><title>¿Cómo agrupar de manera lógica el contenido de una carpeta?</title><link>http://msmvps.com/blogs/dmartin/archive/2008/12/05/191-c-243-mo-agrupar-de-manera-l-243-gica-el-contenido-de-una-carpeta.aspx</link><pubDate>Fri, 05 Dec 2008 22:50:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1655935</guid><dc:creator>dmartin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1655935</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1655935</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2008/12/05/191-c-243-mo-agrupar-de-manera-l-243-gica-el-contenido-de-una-carpeta.aspx#comments</comments><description>&lt;p&gt;El art&amp;iacute;culo de hoy trata de una consulta bastante interesante sobre Windows XP que he recibido. En resumen, el usuario preguntaba si es posible organizar el contenido de una carpeta usando apartados, de manera similar a como est&amp;aacute; organizado por defecto Mi PC. En este art&amp;iacute;culo describo algunas alternativas para lograr esto.&lt;/p&gt;
&lt;p&gt;La opci&amp;oacute;n para organizar el contenido de una carpeta en apartados est&amp;aacute; presente en&amp;nbsp;el men&amp;uacute; &lt;em&gt;Ver&lt;/em&gt;, &lt;em&gt;Organizar iconos&lt;/em&gt;, &lt;em&gt;Organizar en grupos&lt;/em&gt;. El criterio que se emplee para agrupar se establece tambi&amp;eacute;n desde dicho submen&amp;uacute; y puede incluir el nombre, el tipo, el tama&amp;ntilde;o total, etc. Cabe destacar que&amp;nbsp;existe una serie de par&amp;aacute;metros adicionales en el men&amp;uacute; &lt;em&gt;Ver&lt;/em&gt;, &lt;em&gt;Seleccionar detalles&lt;/em&gt;. Simplemente marque las casillas correspondientes a los par&amp;aacute;metros que desee a&amp;ntilde;adir y ya estar&amp;aacute;n disponibles para ser seleccionados desde el submen&amp;uacute; &lt;em&gt;Organizar iconos&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Quiz&amp;aacute; el atributo m&amp;aacute;s flexible sea el atributo &lt;em&gt;Comentarios&lt;/em&gt;, que permite a&amp;ntilde;adir un texto emergente a una carpeta. &amp;iquest;C&amp;oacute;mo se a&amp;ntilde;ade dicho texto? Debe crear (o modificar) un fichero oculto y de sistema con el nombre Desktop.ini que tenga, como m&amp;iacute;nimo, este contenido:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;[.ShellClassInfo] &lt;br /&gt;InfoTip=Mi comentario&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Para que Explorador de Windows tenga en cuenta esta personalizaci&amp;oacute;n, la carpeta debe tener aplicado el atributo de solo lectura (o de sistema). El comando Attrib.exe logra esto a trav&amp;eacute;s de las sintaxis, respectivamente:&lt;/p&gt;
&lt;p&gt;attrib +r NombreCarpeta&lt;/p&gt;
&lt;p&gt;attrib +s NombreCarpeta&lt;/p&gt;
&lt;p&gt;&amp;iquest;Qu&amp;eacute; ocurre si ninguna de las opciones del cuadro &lt;em&gt;Seleccionar detalles&lt;/em&gt; nos convence?&amp;nbsp;Es posible que queramos a&amp;ntilde;adir informaci&amp;oacute;n relativa a la propia&amp;nbsp;carpeta, como su tama&amp;ntilde;o, por ejemplo. Para ello podemos crear una extensi&amp;oacute;n de &lt;em&gt;shell&lt;/em&gt;, concretamente del tipo &lt;em&gt;column handler&lt;/em&gt; (manejador de columna). Windows no&amp;nbsp;incluye ninguna columna que muestre el tama&amp;ntilde;o de una carpeta, ya que dicho c&amp;oacute;mputo es una tarea costosa, sobre todo si la carpeta reside en un servidor remoto. Sin embargo, s&amp;iacute; existen en la red manejadores de columnas de terceros, por lo que en principio ser&amp;iacute;a posible agrupar carpetas seg&amp;uacute;n su tama&amp;ntilde;o. Una de estas herramientas es &lt;a target="_blank" href="http://foldersize.sourceforge.net/about.html"&gt;Folder Size for Windows&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Si se animara a desarrollar manejadores de columnas, le recomiendo echar un vistazo a la documentaci&amp;oacute;n presente en el sitio web de MSDN: &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/bb776831(VS.85).aspx"&gt;Creating Column Handlers&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1655935" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consultas/default.aspx">Consultas</category></item><item><title>Problemas con la inicialización de Explorer.exe (II)</title><link>http://msmvps.com/blogs/dmartin/archive/2008/09/17/problemas-con-la-inicializaci-243-n-de-explorer-exe-ii.aspx</link><pubDate>Wed, 17 Sep 2008 21:07:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1648116</guid><dc:creator>dmartin</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1648116</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1648116</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2008/09/17/problemas-con-la-inicializaci-243-n-de-explorer-exe-ii.aspx#comments</comments><description>&lt;p&gt;Completando &lt;a target="_blank" href="http://msmvps.com/blogs/dmartin/archive/2008/08/04/problemas-con-la-inicializaci-243-n-de-explorer-exe.aspx"&gt;mi art&amp;iacute;culo anterior&lt;/a&gt; sobre problemas durante la inicializaci&amp;oacute;n de Explorer.exe, este art&amp;iacute;culo se centrar&amp;aacute; en otra posible causa del problema: una infecci&amp;oacute;n de virus.&lt;/p&gt;
&lt;p&gt;Es posible que&amp;nbsp;se encuentre con&amp;nbsp;un sistema con los siguientes s&amp;iacute;ntomas: Al iniciar el sistema, no aparece ni el escritorio ni la barra de tareas. Al abrir Administrador de tareas, hacer clic sobre Archivo, Nueva tarea y tratar de ejecutar Explorer.exe no ocurre nada, al menos aparentemente. Digo aparentemente porque es posible que un virus haya modificado el registro de tal forma que al intentar ejecutar Explorer.exe se est&amp;eacute; ejecutando un componente malicioso del virus. Este art&amp;iacute;culo tratar&amp;aacute; una posible v&amp;iacute;a de infecci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La clave de registro Image File Execution Options&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En mi anterior &lt;em&gt;blog&lt;/em&gt; tengo &lt;a target="_blank" href="http://rinconwindows.blogspot.com/2007/06/cmo-funciona-el-motor-de-compatibilidad.html"&gt;algo de informaci&amp;oacute;n&lt;/a&gt; sobre los pasos que realiza la funci&amp;oacute;n CreateProcess antes de &amp;quot;dar a luz&amp;quot; al correspondiente proceso hijo en Windows NT. En dicho art&amp;iacute;culo me centr&amp;eacute; &amp;uacute;nicamente en la parte que tiene que ver con la compatibilidad con sistemas anteriores mediante la aplicaci&amp;oacute;n de &lt;em&gt;shims&lt;/em&gt;. En Windows Vista la creaci&amp;oacute;n de procesos ha variado de manera muy considerable con respecto a Windows XP. Si le interesa saber los detalles sobre esto, reserve una copia de la quinta edici&amp;oacute;n del libro &amp;quot;&lt;a target="_blank" href="http://www.amazon.com/Windows%C2%AE-Internals-Including-Windows-PRO-Developer/dp/0735625301/ref=pd_bbs_sr_2?ie=UTF8&amp;amp;s=books&amp;amp;qid=1221689954&amp;amp;sr=1-2"&gt;Windows Internals&lt;/a&gt;&amp;quot;, donde se explican &amp;eacute;ste y otros aspectos.&lt;/p&gt;
&lt;p&gt;En Windows existe la posibilidad de ejecutar un proceso directamente en un depurador, y una de las formas de conseguir esto es mediante la clave de Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options. Dicha clave puede contener una subclave con el mismo nombre que el proceso que quiere depurar y, dentro de &amp;eacute;sta, un valor alfanum&amp;eacute;rico Debugger que indique qu&amp;eacute; depurador se quiere utilizar. Dos usos pr&amp;aacute;cticos de esta clave de Registro son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Depurar procesos cr&amp;iacute;ticos del sistema operativo, como Lsass.exe o Winlogon.exe. Para ello lo que se suele hacer es agregar la clave&amp;nbsp;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Winlogon.exe y, dentro de ella, crear un valor alfanum&amp;eacute;rico de nombre Debugger cuyo contenido sea por ejemplo &amp;quot;C:\Depuradores\ntsd.exe -d -g -G&amp;quot; Con esto, cada vez que el sistema ejecute Winlogon.exe vamos a a&amp;ntilde;adir el depurador &lt;em&gt;NT Symbolic Debugger&lt;/em&gt;, Ntsd. (La &amp;uacute;ltima versi&amp;oacute;n est&amp;aacute; disponible en el paquete &lt;a target="_blank" href="http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx"&gt;Debugging Tools for Windows&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Process Explorer emplea esta clave de registro cuando&amp;nbsp;se hace uso de la opci&amp;oacute;n que permite&amp;nbsp;reemplazar Administrador de tareas por Process Explorer (algo bastante recomendable, por cierto). As&amp;iacute; logra que cuando el sistema trate de ejecutar Taskmgr.exe (el ejecutable de Administrador de tareas), Process Explorer se ejecute en su lugar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;El software malicioso tambi&amp;eacute;n hace uso de esta clave&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Los autores de software malicioso pronto se dieron cuenta de las enormes&amp;nbsp;posibilidades que ofrece esta clave de Registro y comenzaron a crear c&amp;oacute;digo malicioso que se agregara a dicha clave con nombres de ejecutables leg&amp;iacute;timos del sistema operativo, como el caso de Explorer.exe que nos ocupa. En concreto, un usuario afectado ten&amp;iacute;a en su sistema la clave de Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\Explorer, y dentro de ella, un valor Debugger con contenido &amp;quot;C:\Archivos de programa\Microsoft Common\Wuauclt.exe&amp;quot;. Lo que se consigue con esto es que, cada vez que o bien el usuario o el sistema intente ejecutar Explorer.exe (algo que ocurre naturalmente durante el inicio de sesi&amp;oacute;n), acabe ejecut&amp;aacute;ndose ese tal ejecutable C:\Archivos de programa\Microsoft Common\wuauclt.exe, que es un troyano. Por la informaci&amp;oacute;n que he recabado de diversas empresas de seguridad, parece formar parte de los &amp;uacute;ltimamente tan populares virus del tipo &amp;quot;Autorun&amp;quot;, es decir, los que infectan unidades USB y agregan ficheros ocultos Autorun.inf que apuntan a c&amp;oacute;digo malicioso. La documentaci&amp;oacute;n que he encontrado indica&amp;nbsp;tambi&amp;eacute;n que&amp;nbsp;hay variantes &lt;em&gt;rootkit&lt;/em&gt; de este tipo de virus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C&amp;oacute;mo solucionar el problema&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La soluci&amp;oacute;n en este caso consiste en pasar primero un antivirus actualizado al sistema. De todas formas, la desinfecci&amp;oacute;n raramente es completa tras el an&amp;aacute;lisis de un&amp;nbsp;&amp;uacute;nico&amp;nbsp;antivirus. Bien porque sus firmas no son capaces de detectar el virus (ning&amp;uacute;n antivirus es efectivo al 100%), bien porque el entorno infectado impide la actuaci&amp;oacute;n correcta del antivirus.&amp;nbsp;En estos casos se puede probar con otro antivirus (una segunda opini&amp;oacute;n), o bien abordar una desinfecci&amp;oacute;n manual. No comentar&amp;eacute; en detalle los detalles de una desinfecci&amp;oacute;n manual entre otros motivos porque no soy experto en la eliminaci&amp;oacute;n de &lt;em&gt;malware&lt;/em&gt; y adem&amp;aacute;s cada &lt;em&gt;malware&lt;/em&gt; emplea sus trucos para pasar desapercibido de cara al usuario. Mi recomendaci&amp;oacute;n en estos casos es hacer uso de las herramientas &lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb963902.aspx"&gt;Autoruns&lt;/a&gt; y &lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx"&gt;Process Explorer&lt;/a&gt; iniciando el sistema en Modo seguro.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prevenci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Las infecciones de virus se aprovechan en gran medida de los privilegios del usuario infectado. En la mayor&amp;iacute;a de casos, al menos en sistemas XP, estos privilegios son administrativos, por lo que los da&amp;ntilde;os pueden ser catastr&amp;oacute;ficos. Mis recomendaciones para evitar este tipo de infecciones son las ya conocidas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Utilizar una cuenta de usuario limitado para el trabajo cotidiano con el PC.&lt;/li&gt;
&lt;li&gt;Mantener actualizado el sistema operativo desde Windows Update.&lt;/li&gt;
&lt;li&gt;Activar un antivirus y un cortafuegos y mantenerlos al d&amp;iacute;a.&lt;/li&gt;
&lt;li&gt;Desconfiar del software que provenga de fuentes no oficiales.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Resumen&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dejo finalmente un resumen con los posibles problemas de inicializaci&amp;oacute;n de Explorer.exe. Recuerde los s&amp;iacute;ntomas: El sistema llega a la pantalla de bienvenida o de inicio de sesi&amp;oacute;n pero, una vez el usuario se ha autenticado correctamente, solo se muestra un escritorio vac&amp;iacute;o, sin iconos, sin barra de tareas.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Si al iniciar manualmente Explorer.exe desde Administrador de tareas (Ctrl+Alt+Supr, men&amp;uacute; Archivo, Nueva tarea) todo funciona correctamente&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Causa 1: Virus. Leer &lt;a target="_blank" href="http://rinconwindows.blogspot.com/2008/02/al-iniciar-sesin-slo-se-muestra-el.html"&gt;este art&amp;iacute;culo&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Si al iniciar manualmente Explorer.exe desde Administrador de tareas (Ctrl+Alt+Supr, men&amp;uacute; Archivo, Nueva tarea) sigue fallando&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Causa 1: Virus. Leer este mismo art&amp;iacute;culo para intentar localizar d&amp;oacute;nde est&amp;aacute; el componente malicioso que est&amp;aacute; interfiriendo con la carga del proceso Explorer.exe&lt;/li&gt;
&lt;li&gt;Causa 2: Explorer.exe o alg&amp;uacute;n componente relacionado con su carga est&amp;aacute; da&amp;ntilde;ado o mal registrado. &lt;a target="_blank" href="http://msmvps.com/blogs/dmartin/archive/2008/08/04/problemas-con-la-inicializaci-243-n-de-explorer-exe.aspx"&gt;Este art&amp;iacute;culo&lt;/a&gt; ofrece pautas para depurar el problema.&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1648116" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consultas/default.aspx">Consultas</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Explorer/default.aspx">Explorer</category></item><item><title>Windows Sidebar no se abre correctamente</title><link>http://msmvps.com/blogs/dmartin/archive/2008/09/04/windows-sidebar-no-se-abre-correctamente.aspx</link><pubDate>Thu, 04 Sep 2008 13:12:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1644660</guid><dc:creator>dmartin</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1644660</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1644660</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2008/09/04/windows-sidebar-no-se-abre-correctamente.aspx#comments</comments><description>&lt;p&gt;Un usuario ten&amp;iacute;a el siguiente problema con Windows Sidebar: Al intentar iniciar esta aplicaci&amp;oacute;n, no ocurr&amp;iacute;a nada, ni&amp;nbsp;siquiera se mostraba&amp;nbsp;un mensaje de error.&lt;/p&gt;
&lt;p&gt;Ante un problema de este estilo, lo primero que suelo decirle al usuario es que abra Administrador de tareas y observe si la aplicaci&amp;oacute;n aparece residente en el equipo aunque no muestre su interfaz gr&amp;aacute;fica. En tal caso lo que suele ocurrir es que la aplicaci&amp;oacute;n est&amp;aacute; estancada&amp;nbsp;esperando a que ocurra alg&amp;uacute;n evento de sincronizaci&amp;oacute;n que debe se&amp;ntilde;alizar otro hilo, pero esto no ocurre nunca (interbloqueo). En&amp;nbsp;el&amp;nbsp;caso que nos ocupa&amp;nbsp;lo que ocurr&amp;iacute;a es que el proceso desparec&amp;iacute;a al poco tiempo de ser iniciado, as&amp;iacute; que los pasos a seguir ser&amp;iacute;an algo diferentes.&lt;/p&gt;
&lt;p&gt;En Windows XP y anteriores, un proceso pod&amp;iacute;a generar una excepci&amp;oacute;n y desaparecer de la memoria sin mostrarse un cuadro de di&amp;aacute;logo que invitase a enviar el reporte a Microsoft. En Windows Vista, la &lt;a target="_blank" href="http://rinconwindows.blogspot.com/2008/02/qu-sucede-cuando-ocurre-una-excepcin-no.html"&gt;nueva arquitectura&lt;/a&gt; del sistema de excepciones no manejadas en modo usuario impide que esto ocurra. As&amp;iacute; pues, determin&amp;eacute; que&amp;nbsp;el problema de inicializaci&amp;oacute;n no se deb&amp;iacute;a, por ejemplo,&amp;nbsp;a un puntero que estuviera accediendo a una direcci&amp;oacute;n inv&amp;aacute;lida de memoria,&lt;/p&gt;
&lt;p&gt;Una vez focalizado el problema, lo primero que suelo hacer es trazar la inicializaci&amp;oacute;n de la aplicaci&amp;oacute;n y comparar el resultado con una captura obtenida mediante &lt;a target="_blank" href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx"&gt;Process Monitor&lt;/a&gt; en el sistema afectado. Esto me ayuda a determinar el momento exacto en el que ocurre el error para as&amp;iacute; desarrollar una soluci&amp;oacute;n lo m&amp;aacute;s precisa y sencilla de aplicar posible. Podr&amp;iacute;amos aplicar m&amp;eacute;todos generales como reinstalar Windows Sidebar (si esto fuera posible) y quiz&amp;aacute; solucionar el problema, pero a m&amp;iacute; me gusta llegar a la causa exacta del problema, adem&amp;aacute;s, este blog trata de eso, &amp;iquest;no? ;-)&lt;/p&gt;
&lt;p&gt;Al abrir la captura de Process Monitor suelo posicionarme en el evento Process Exit, que suele estar situado casi al final de la captura.&lt;/p&gt;
&lt;p&gt;&lt;img width="545" src="http://msmvps.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/Process_5F00_Exit.png" alt="Finalizaci&amp;oacute;n del proceso" height="104" style="vertical-align:middle;" /&gt;&lt;/p&gt;
&lt;p&gt;Entre otra informaci&amp;oacute;n, Process Monitor nos proporciona el c&amp;oacute;digo de salida del proceso (en la columna Detail). A partir de este evento, al dirigirme hacia arriba encontr&amp;eacute; una discrepancia interesante:&lt;/p&gt;
&lt;p&gt;&lt;img width="774" src="http://msmvps.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/Imagen_5F00_Movavi.png" alt="La DLL Atl.dll no se encontraba en el directorio registrado" height="193" style="vertical-align:middle;" /&gt;&lt;/p&gt;
&lt;p&gt;Como puede ver, cierta informaci&amp;oacute;n de Registro referente a la DLL &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/3ax346b7(VS.71).aspx"&gt;Atl.dll&lt;/a&gt; apuntaba a una carpeta creada por una aplicaci&amp;oacute;n de terceros: &lt;a target="_blank" href="http://movavi.com/"&gt;Movavi&lt;/a&gt;. Inmediatamente despu&amp;eacute;s, el acceso a la correspondiente ruta ten&amp;iacute;a como resultado &amp;quot;PATH NOT FOUND&amp;quot;, es decir, ruta no encontrada. Al no encontrar la DLL, Sidebar.exe finalizaba de manera imprevista. Para solucionar el problema,&amp;nbsp;invit&amp;eacute; al usuario&amp;nbsp;a que registrara la DLL Atl.dll con el siguiente comando (ejecutado desde una consola con privilegios administrativos):&lt;/p&gt;
&lt;p&gt;regsvr32 atl.dll&lt;/p&gt;
&lt;p&gt;En resumen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El usuario hab&amp;iacute;a instalado la aplicaci&amp;oacute;n Movavi en su sistema.&lt;/li&gt;
&lt;li&gt;Dicha aplicaci&amp;oacute;n incluye su propia versi&amp;oacute;n de la DLL Atl.dll y la registra en su subcarpeta de %ProgramFiles%\Common Files.&lt;/li&gt;
&lt;li&gt;El usuario desinstal&amp;oacute; la aplicaci&amp;oacute;n. La desinstalaci&amp;oacute;n no es completa por alg&amp;uacute;n motivo y el Registro a&amp;uacute;n apunta a una ubicaci&amp;oacute;n que no existe.&lt;/li&gt;
&lt;li&gt;Como consecuencia de todo esto, Sidebar no se abre.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una vez reunida toda la informaci&amp;oacute;n sobre el problema, siempre&amp;nbsp;intento reproducirlo en mis sistemas y, si procede. alerto al fabricante para que corrija el defecto en versiones posteriores de su software.&lt;/p&gt;
&lt;p&gt;&amp;iexcl;Caso cerrado!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1644660" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consultas/default.aspx">Consultas</category></item><item><title>Cerrar Explorer sin cerrar la sesión</title><link>http://msmvps.com/blogs/dmartin/archive/2008/08/11/cerrar-explorer-sin-cerrar-la-sesi-243-n.aspx</link><pubDate>Mon, 11 Aug 2008 13:50:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1644234</guid><dc:creator>dmartin</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1644234</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1644234</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2008/08/11/cerrar-explorer-sin-cerrar-la-sesi-243-n.aspx#comments</comments><description>&lt;p&gt;Completando la informaci&amp;oacute;n del art&amp;iacute;culo anterior sobre Explorer, dejo por aqu&amp;iacute; un &amp;quot;truco&amp;quot; que quiz&amp;aacute; no conozca: En Windows Vista, al abrir el men&amp;uacute; Inicio, pulsar simult&amp;aacute;neamente las teclas Ctrl y Shift (May&amp;uacute;sculas) y hacer clic con el bot&amp;oacute;n derecho sobre una regi&amp;oacute;n libre del men&amp;uacute;, nos aparecer&amp;aacute; una opci&amp;oacute;n adicional a la ya cl&amp;aacute;sica &amp;quot;Propiedades&amp;quot;: &amp;quot;Salir de Explorer&amp;quot;. Esta opci&amp;oacute;n es especialmente &amp;uacute;til cuando haya realizado alg&amp;uacute;n cambio en la configuraci&amp;oacute;n que requiera de un reinicio del explorador para que surta efecto. Hasta ahora quiz&amp;aacute;&amp;nbsp;lo que haya hecho es &amp;quot;matar&amp;quot; al proceso Explorer.exe usando Process Explorer, con todos los riesgos que conlleva el &amp;quot;matar&amp;quot; a un proceso. La opci&amp;oacute;n &amp;quot;Salir de Explorer&amp;quot; realiza los pasos correctos de cierre del explorador, que incluyen, entre otras cosas,&amp;nbsp;el almacenar en el Registro del sistema ciertas configuraciones residentes en memoria. Al &amp;quot;matar&amp;quot; al proceso estas configuraciones se pierden irremediablemente.&lt;/p&gt;
&lt;p&gt;Lamentablemente, esta opci&amp;oacute;n no est&amp;aacute; presente en Windows XP y anteriores, por lo que tendr&amp;aacute; que, como m&amp;iacute;nimo, reiniciar la sesi&amp;oacute;n para lograr un efecto similar en esos sistemas.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1644234" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Curiosidades/default.aspx">Curiosidades</category></item><item><title>Problemas con la inicialización de Explorer.exe</title><link>http://msmvps.com/blogs/dmartin/archive/2008/08/04/problemas-con-la-inicializaci-243-n-de-explorer-exe.aspx</link><pubDate>Mon, 04 Aug 2008 14:39:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1643312</guid><dc:creator>dmartin</dc:creator><slash:comments>45</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1643312</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1643312</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2008/08/04/problemas-con-la-inicializaci-243-n-de-explorer-exe.aspx#comments</comments><description>&lt;p&gt;Uno de los problemas m&amp;aacute;s frustrantes para un usuario es que su sistema no consiga iniciarse correctamente. En general estamos acostumbrados a trabajar con una m&amp;aacute;quina &amp;quot;m&amp;aacute;s o menos operativa&amp;quot;, pero cuando nos encontramos con un sistema que no&amp;nbsp;llega al escritorio de Windows, empiezan a sonar las alarmas y la palabra &amp;quot;formateo&amp;quot; ronda nuestra cabeza. Este art&amp;iacute;culo intentar&amp;aacute; evitar que esto sea as&amp;iacute;.&lt;/p&gt;
&lt;p&gt;El proceso de arranque de Windows es un proceso complejo que va desde la carga del sector de arranque de la partici&amp;oacute;n del sistema hasta la aparici&amp;oacute;n del escritorio de Windows y la barra de tareas. Este art&amp;iacute;culo se centrar&amp;aacute; en la parte final de este proceso: la carga del &lt;em&gt;shell&lt;/em&gt; del sistema operativo (t&amp;iacute;picamente Explorer.exe) y c&amp;oacute;mo abordar un problema de inicializaci&amp;oacute;n del mismo.&lt;/p&gt;
&lt;p&gt;El proceso de inicializaci&amp;oacute;n de Explorer.exe podr&amp;iacute;a decirse que consta de tres fases bien diferenciadas: Una fase inicial en la que se prepara el &lt;em&gt;shell&lt;/em&gt;, otra fase central en la que se crea el escritorio y la barra de tareas (esta es la fase principal), y otra fase de postinicializaci&amp;oacute;n que se inicia una vez que tenemos el escritorio, los iconos y la barra de tareas en pantalla. Obviamente un fallo en alguna de las dos primeras fases va a derivar en que el sistema solo muestre un escritorio vac&amp;iacute;o en el que no podremos hacer nada m&amp;aacute;s. Este art&amp;iacute;culo se centra s&amp;oacute;lo en las dos primeras fases por ser en las que influyen en que un sistema no muestre ni barra de tareas ni escritorio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fase de preinicializaci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una cosa que no mucha gente sabe es que Explorer.exe admite par&amp;aacute;metros. Si ejecutamos Explorer.exe /separate, le estamos diciendo al sistema que debe ejecutar obligatoriamente una nueva instancia de Explorer.exe. Por lo regular, Explorer.exe se ejecuta sin par&amp;aacute;metros, como as&amp;iacute; indica la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon, valor Shell. Una de las primeras cosas que se realizan en esta fase es la creaci&amp;oacute;n (si no existiera ya) de la clave de Registro HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer. En ella se almacenan la mayor&amp;iacute;a de par&amp;aacute;metros de configuraci&amp;oacute;n que tienen relaci&amp;oacute;n con la interfaz gr&amp;aacute;fica.&lt;/p&gt;
&lt;p&gt;Posteriormente,&amp;nbsp;tiene lugar la&amp;nbsp;inicializaci&amp;oacute;n la tecnolog&amp;iacute;a de comunicaci&amp;oacute;n &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms648774(VS.85).aspx"&gt;DDE&lt;/a&gt; (Dynamic Data Exchange), que pese a ser ya bastante antigua, se usa a&amp;uacute;n&amp;nbsp;en algunas partes del &lt;em&gt;shell&lt;/em&gt;, como la parte relacionada&amp;nbsp;con las asociaciones de ficheros. Se establece en este momento el orden de apagado de Explorer.exe: Ante un apagado o un reinicio de la m&amp;aacute;quina, Explorer.exe terminar&amp;aacute; su ejecuci&amp;oacute;n en &amp;uacute;ltimo o pen&amp;uacute;ltimo&amp;nbsp;lugar, dependiendo de si hay alg&amp;uacute;n depurador en la m&amp;aacute;quina en ese mismo momento. Seguidamente se inicializa la cache de iconos, proceso explicado en &lt;a target="_blank" href="http://msmvps.com/blogs/dmartin/archive/2008/07/25/191-c-243-mo-funciona-la-cache-de-iconos-en-windows-vista.aspx"&gt;uno&lt;/a&gt; de los art&amp;iacute;culos anteriores.&lt;/p&gt;
&lt;p&gt;Quiz&amp;aacute; el momento m&amp;aacute;s importante de esta fase es la ejecuci&amp;oacute;n autom&amp;aacute;tica de los programas presentes en la clave&amp;nbsp;de Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce. Estos programas se ejecutan, como su propio nombre indica, una sola vez: en el momento que un usuario con privilegios administrativos inicie sesi&amp;oacute;n en la m&amp;aacute;quina. Hay un programa encargado de realizar este proceso: C:\Windows\system32\Runonce.exe. Se llama al comando &amp;quot;Runonce.exe /Explorer&amp;quot;, el cual, si el usuario es administrador del equipo, se encarga de ejecutar el contenido de la clave RunOnce (que por lo regular son fases finales de la instalaci&amp;oacute;n de alg&amp;uacute;n programa). Quiz&amp;aacute; se pregunte qu&amp;eacute; es lo que ocurre en Windows Vista, en el que todo intento de elevaci&amp;oacute;n de privilegios es bloqueado seg&amp;uacute;n el art&amp;iacute;culo &lt;a target="_blank" href="http://support.microsoft.com/kb/930367/es"&gt;KB930367&lt;/a&gt;. La clave RunOnce es una excepci&amp;oacute;n de la regla (tenga en cuenta que s&amp;oacute;lo un proceso que haya elevado sus privilegios ha sido capaz de escribir en la clave RunOnce, por lo que esto no es ninguna vulnerabilidad). Tambi&amp;eacute;n&amp;nbsp;es posible desactivar la ejecuci&amp;oacute;n de la rama RunOnce mediante la siguiente pol&amp;iacute;tica: &lt;a target="_blank" href="http://technet2.microsoft.com/windowsserver/en/library/8ad1cafb-8619-4389-bbc4-bd9ce690393b1033.mspx"&gt;DisableLocalMachineRunOnce&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Por &amp;uacute;ltimo, se crean (si no existieran ya), tres de las carpetas del perfil de usuario relacionadas con el &lt;em&gt;shell&lt;/em&gt;: C:\Users\Usuario\Desktop, C:\Users\Usuario\AppData\Roaming\Microsoft\Windows\Start Menu y C:\Users\Usuario\AppData\Roaming\Microsoft\Windows\Start Menu\Programs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fase de inicializaci&amp;oacute;n del escritorio y la barra de tareas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Esta es la fase crucial. Cualquier fallo que ocurra en esta fase (y en la anterior, pero seg&amp;uacute;n mi experiencia es menos probable que esto ocurra) significar&amp;aacute; que Explorer.exe terminar&amp;aacute; abruptamente y no ver&amp;aacute; nada en pantalla, nada m&amp;aacute;s que su escritorio sin ning&amp;uacute;n icono. Si se encuentra en una situaci&amp;oacute;n como &amp;eacute;sta, primero abra Administrador de tareas pulsando Ctrl+Alt+Supr e intente ejecutar el proceso Explorer.exe. Si se ejecutara correctamente, m&amp;aacute;s que seguramente se trate de un virus que ha modificado la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon. En mi anterior blog tengo unas &lt;a target="_blank" href="http://rinconwindows.blogspot.com/2008/02/al-iniciar-sesin-slo-se-muestra-el.html"&gt;instrucciones&lt;/a&gt; al respecto. Si al ejecutar Explorer.exe observa que el proceso aparece un instante para luego desaparecer, primeramente intente un inicio limpio de Windows: inicie el sistema en Modo seguro y compruebe si persiste el problema. Si en Modo seguro todo funcionara correctamente, vaya a&amp;ntilde;adiendo elementos al inicio mediante Msconfig hasta dar con el culpable. Hay un caso en el&amp;nbsp;cual detect&amp;eacute; que el servicio Shell Hardware Detection puede ser el culpable (en tal caso, lo que ocurre es que si espera unos 3 &amp;oacute; 4 minutos observa que el &lt;em&gt;shell&lt;/em&gt; se inicia correctamente). El art&amp;iacute;culo &lt;a target="_blank" href="http://support.microsoft.com/kb/913630/en-us"&gt;KB913630&lt;/a&gt; explica el problema, pero solo ofrece un &lt;em&gt;workaround&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Si nada de lo anterior le diera resultado, es posible que se encuentre ante un problema con alguno de los componentes encargado de crear el escritorio y la barra de tareas. Explorer.exe se apoya en multitud de clases COM en su mayor&amp;iacute;a presentes en librer&amp;iacute;as de Internet Explorer (como Browseui.dll, por ejemplo). Es por ello que alg&amp;uacute;n que otro art&amp;iacute;culo antiguo&amp;nbsp;de la KB recomendaba reinstalar Internet Explorer como medida de correcci&amp;oacute;n. El problema es que las &amp;uacute;ltimas versiones de Internet Explorer est&amp;aacute;n m&amp;aacute;s y m&amp;aacute;s separadas de lo que es el &lt;em&gt;shell&lt;/em&gt; del sistema, por lo que una reinstalaci&amp;oacute;n de Internet Explorer probablemente no solucione el problema. &amp;iquest;C&amp;oacute;mo detectar d&amp;oacute;nde est&amp;aacute;, pues, el fallo?&lt;/p&gt;
&lt;p&gt;Seg&amp;uacute;n mi experiencia, un alt&amp;iacute;simo n&amp;uacute;mero de problemas con la interfaz gr&amp;aacute;fica se deben a que el m&amp;eacute;todo &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms686615.aspx"&gt;CoCreateInstance&lt;/a&gt; de Ole32.dll falla por alg&amp;uacute;n motivo. Este motivo suele ser que la clase correspondiente no est&amp;aacute; registrada en el Registro del sistema. Una manera de abordar este problema es adjuntar Process Monitor al proceso en cuesti&amp;oacute;n (en nuestro caso Explorer.exe) y filtrar por resultado&amp;nbsp;&amp;quot;NAME NOT FOUND&amp;quot;. N&amp;oacute;tese que no todas las entradas que se indiquen como &amp;quot;NAME NOT FOUND&amp;quot; son posibles causantes del problema; en muchas ocasiones un proceso busca una determinada clave en el Registro y, en caso de no encontrarla, establece valores por defecto para esa configuraci&amp;oacute;n. En este art&amp;iacute;culo se describe una manera en la que abord&amp;eacute; el problema de un usuario usando Windbg:&lt;/p&gt;
&lt;p&gt;Ejecute el programa Explorer.exe desde dentro de Windbg&amp;nbsp;e introduzca este comando:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:000&amp;gt; bp ole32!CoCreateInstance &amp;quot;dt ntdll!_GUID poi(@esp+4);gu;j (@eax &amp;amp; 0x0`ffffffff) = 0x0`80040154&amp;nbsp; &amp;#39;&amp;#39;;&amp;#39;gc&amp;#39;&amp;quot;&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;No se asuste, este comando lo que hace es crear un punto de ruptura (&lt;em&gt;breakpoint&lt;/em&gt;) cada vez que alcancemos la funci&amp;oacute;n CoCreateInstance. Seguidamente nos muestra el contenido de su primer par&amp;aacute;metro (el CLSID implicado), y avanza hasta el retorno de la funci&amp;oacute;n (con &lt;strong&gt;gu&lt;/strong&gt;). En este momento, la instrucci&amp;oacute;n condicional &lt;strong&gt;j&lt;/strong&gt; compara el contenido del registro EAX (donde se almacena el retorno de la funci&amp;oacute;n) con el valor 0x80040154, que seg&amp;uacute;n MSDN quiere decir REGDB_E_CLASSNOTREG. Si lo encuentra, detenemos la depuraci&amp;oacute;n; si no, seguimos adelante.&lt;/p&gt;
&lt;p&gt;Ejecutamos el proceso y vemos lo siguiente:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:000&amp;gt; g&lt;br /&gt;ModLoad: 5cf60000 5cf86000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\ShimEng.dll&lt;br /&gt;ModLoad: 6fdb0000 6ff7a000&amp;nbsp;&amp;nbsp; C:\WINDOWS\AppPatch\AcGenral.DLL&lt;br /&gt;ModLoad: 76b00000 76b2e000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\WINMM.dll&lt;br /&gt;ModLoad: 77bb0000 77bc5000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\MSACM32.dll&lt;br /&gt;ModLoad: 76630000 766e5000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\USERENV.dll&lt;br /&gt;ModLoad: 76340000 7635d000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\IMM32.DLL&lt;br /&gt;ModLoad: 773a0000 774a3000&amp;nbsp;&amp;nbsp; C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.5512_x-ww_35d4ce83\comctl32.dll&lt;br /&gt;ModLoad: 74dc0000 74e2d000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\RichEd20.dll&lt;br /&gt;ModLoad: 58c30000 58cca000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\comctl32.dll&lt;br /&gt;ModLoad: 746b0000 746fc000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\MSCTF.dll&lt;br /&gt;ModLoad: 75160000 7518e000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\msctfime.ime&lt;br /&gt;ModLoad: 77b10000 77b32000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\appHelp.dll&lt;br /&gt;&amp;nbsp;&lt;strong&gt;{750fdf0e-2a26-11d1-a3ea-080036587f03}&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp; +0x000 Data1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x750fdf0e&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x004 Data2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x2a26&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x006 Data3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x11d1&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x008 Data4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 8&amp;nbsp; &amp;quot;???&amp;quot;&lt;br /&gt;ModLoad: 76f90000 7700f000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\CLBCATQ.DLL&lt;br /&gt;ModLoad: 77010000 770e0000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\COMRes.dll&lt;br /&gt;ModLoad: 779f0000 77a45000&amp;nbsp;&amp;nbsp; C:\WINDOWS\System32\cscui.dll&lt;br /&gt;ModLoad: 765b0000 765cd000&amp;nbsp;&amp;nbsp; C:\WINDOWS\System32\CSCDLL.dll&lt;br /&gt;ModLoad: 58e40000 58e65000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\desk.cpl&lt;br /&gt;&lt;strong&gt;&amp;nbsp;{b12ae898-d056-4378-a844-6d393fe37956}&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x000 Data1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xb12ae898&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x004 Data2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xd056&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x006 Data3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x4378&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x008 Data4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 8&amp;nbsp; &amp;quot;???&amp;quot;&lt;br /&gt;ModLoad: 5ba10000 5ba83000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\themeui.dll&lt;br /&gt;ModLoad: 76330000 76335000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\MSIMG32.dll&lt;br /&gt;&lt;strong&gt;&amp;nbsp;{4c892621-6757-4fe0-ad8c-a6301be7fba2}&lt;/strong&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x000 Data1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x4c892621&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x004 Data2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x6757&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x006 Data3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x4fe0&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x008 Data4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 8&amp;nbsp; &amp;quot;???&amp;quot;&lt;br /&gt;ModLoad: 01110000 013e6000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\xpsp2res.dll&lt;br /&gt;&amp;nbsp;&lt;strong&gt;{ecd4fc4d-521c-11d0-b792-00a0c90312e1}&lt;br /&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp; +0x000 Data1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0xecd4fc4d&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x004 Data2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x521c&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x006 Data3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 0x11d0&lt;br /&gt;&amp;nbsp;&amp;nbsp; +0x008 Data4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; : 8&amp;nbsp; &amp;quot;???&amp;quot;&lt;br /&gt;eax=80040154 ebx=00000000 ecx=00000000 edx=80040154 esi=000ee4a0 edi=001a009c&lt;br /&gt;eip=01017362 esp=0146f66c ebp=0146f674 iopl=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nv up ei pl zr na pe nc&lt;br /&gt;cs=001b&amp;nbsp; ss=0023&amp;nbsp; ds=0023&amp;nbsp; es=0023&amp;nbsp; fs=003b&amp;nbsp; gs=0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; efl=00000246&lt;br /&gt;explorer!BandSite_CreateView+0x3b:&lt;br /&gt;01017362 85c0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; test&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,eax&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Marcadas en negrita est&amp;aacute;n las clases CLSID pasadas como primer par&amp;aacute;metro a CoCreateInstance. El depurador se detuvo en este caso en la funci&amp;oacute;n BandSite_CreateView, que es parte de la creaci&amp;oacute;n de la barra de tareas. Como ve, el CLSID es {ecd4fc4d-521c-11d0-b792-00a0c90312e1}, as&amp;iacute; que inmediatamente&amp;nbsp;sospech&amp;eacute; que la clave HKEY_CLASSES_ROOT\CLSID\{ecd4fc4d-521c-11d0-b792-00a0c90312e1} faltaba o estaba da&amp;ntilde;ada. Mis sospechas se confirmaron:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:004&amp;gt; !dreg hkcr\clsid\{ecd4fc4d-521c-11d0-b792-00a0c90312e1}&lt;br /&gt;Could not open subkey clsid\{ecd4fc4d-521c-11d0-b792-00a0c90312e1}. Error (2).&lt;br /&gt;No subkeys&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Al importar dicha clave desde un sistema que funcionaba correctamente, el usuario logr&amp;oacute; solucionar su problema con Explorer sin necesidad de reinstalar Windows.&lt;/p&gt;
&lt;p&gt;Quiz&amp;aacute; este escenario de depuraci&amp;oacute;n no sea aplicable a su caso, pero seguramente le habr&amp;aacute; dado un punto de partida para enfrentarse a este tipo de problemas sin necesidad de reinstalar ni de instalar en limpio el sistema operativo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1643312" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Explorer/default.aspx">Explorer</category></item><item><title>¿Cómo funciona la cache de iconos en Windows Vista?</title><link>http://msmvps.com/blogs/dmartin/archive/2008/07/25/191-c-243-mo-funciona-la-cache-de-iconos-en-windows-vista.aspx</link><pubDate>Fri, 25 Jul 2008 17:27:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1642153</guid><dc:creator>dmartin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1642153</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1642153</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2008/07/25/191-c-243-mo-funciona-la-cache-de-iconos-en-windows-vista.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Los detalles de implementaci&amp;oacute;n podr&amp;iacute;an variar completamente en una siguiente versi&amp;oacute;n de Windows, o incluso en un pr&amp;oacute;ximo Service Pack. Por lo tanto, nunca base sus desarrollos en aspectos concretos&amp;nbsp;de implementaci&amp;oacute;n. Este art&amp;iacute;culo&amp;nbsp;pretende ser&amp;nbsp;&amp;uacute;nicamente informativo.&lt;/p&gt;
&lt;p&gt;En computaci&amp;oacute;n, el t&amp;eacute;rmino &lt;em&gt;cache&lt;/em&gt; se refiere a una forma de almacenamiento de muy r&amp;aacute;pido acceso pero peque&amp;ntilde;a capacidad que sirve para reducir dr&amp;aacute;sticamente el tiempo de acceso a datos que est&amp;aacute;n pr&amp;oacute;ximos en ubicaci&amp;oacute;n o en tiempo. Este art&amp;iacute;culo trata sobre una importante &lt;em&gt;cache&lt;/em&gt; presente en Windows desde hace ya bastantes a&amp;ntilde;os, pero que no ha parado de mejorar: la &lt;em&gt;cache&lt;/em&gt; de iconos.&lt;/p&gt;
&lt;p&gt;En Windows Vista la &lt;em&gt;cache&lt;/em&gt; de iconos est&amp;aacute; implementada en memoria principal y en disco, la mayor&amp;iacute;a de sus funciones residen en la DLL Shell32.dll y b&amp;aacute;sicamente consta de un conjunto de listas de im&amp;aacute;genes y varias tablas utilizadas para reducir al m&amp;aacute;ximo el tiempo de b&amp;uacute;squeda del icono correspondiente.&amp;acute;&lt;/p&gt;
&lt;p&gt;Las b&amp;uacute;squedas internamente se pueden realizar por&amp;nbsp;nombre de fichero o por una cadena cualquiera, por lo que se mantienen sendas tablas en memoria. Una tercera tabla sirve como &amp;quot;manual&amp;quot; para que el &lt;em&gt;shell&lt;/em&gt; sepa exactamente c&amp;oacute;mo extraer el correspondiente icono. Por ejemplo, una entrada de dicha tabla podr&amp;iacute;a ser similar a esto:&lt;/p&gt;
&lt;p&gt;3 Programa.exe 2&lt;/p&gt;
&lt;p&gt;Es decir, la entrada n&amp;uacute;mero 3 de la tabla dice que el imagen proviene del ejecutable &amp;quot;Programa.exe&amp;quot; y concretamente es el icono de &amp;iacute;ndice n&amp;uacute;mero 2 (consulte la documentaci&amp;oacute;n de la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms648068(VS.85).aspx"&gt;ExtractIcon&lt;/a&gt; y similares para m&amp;aacute;s informaci&amp;oacute;n). Si, por ejemplo, el &lt;em&gt;shell&lt;/em&gt; necesitara un icono para el acceso directo en el escritorio que el usuario ha hecho para &amp;quot;Programa.exe&amp;quot;, lo que har&amp;aacute; en primer lugar es generar un &lt;em&gt;hash&lt;/em&gt; del fichero para comprobar si tiene alguna correspondencia en la primera tabla, con el mismo contenido y tama&amp;ntilde;o (de ah&amp;iacute; la necesidad del &lt;em&gt;hash&lt;/em&gt;). Si es as&amp;iacute;, la primera tabla le dir&amp;aacute; exactamente en qu&amp;eacute; entrada de la tercera tabla est&amp;aacute; la informaci&amp;oacute;n correspondiente (recuerde que las entradas de la tercera tabla almacenan la representaci&amp;oacute;n propiamente dicha). En este caso&amp;nbsp;le dir&amp;aacute; que es la entrada 3 y el sistema no habr&amp;aacute; visto penalizado su rendimiento porque no ha tenido que acceder al disco a por el icono. &amp;iquest;Qu&amp;eacute; ocurre cuando el icono no est&amp;aacute; en la &lt;em&gt;cache&lt;/em&gt;? Cuando un icono&amp;nbsp;no est&amp;aacute; en &lt;em&gt;cache&lt;/em&gt;, la funci&amp;oacute;n de dispersi&amp;oacute;n&amp;nbsp;acabar&amp;aacute; por determinar&amp;nbsp;que el elemento&amp;nbsp;a buscar no est&amp;aacute; en ninguna de las dos tablas, ni la indizada por nombre de fichero ni la indizada por cadenas. En&amp;nbsp;este caso, no queda otra opci&amp;oacute;n que acceder al disco para extraer el icono correspondiente (n&amp;oacute;tese que esto es similar a lo que ocurre&amp;nbsp;cuando el procesador tiene que acceder a memoria a por una instrucci&amp;oacute;n porque &amp;eacute;sta no se encuentra en su primer nivel de &lt;em&gt;cache&lt;/em&gt;). El &lt;em&gt;shell&lt;/em&gt; crea una nueva entrada en la tercera tabla:&lt;/p&gt;
&lt;p&gt;4 Programa_nuevo.exe 3&lt;/p&gt;
&lt;p&gt;y&amp;nbsp;crea las correspondientes entradas en las dos primeras tablas para poder acceder r&amp;aacute;pidamente. Para terminar, con una llamada a la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms648071(VS.85).aspx"&gt;GetIconInfoEx&lt;/a&gt; de User32.dll&amp;nbsp;se obtiene&amp;nbsp;la informaci&amp;oacute;n&amp;nbsp;correspondiente al mapa de bits del icono y se almacena en la &lt;em&gt;cache&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Como toda &lt;em&gt;cache&lt;/em&gt;, la &lt;em&gt;cache&lt;/em&gt; de iconos tiene su propia pol&amp;iacute;tica de reemplazamiento; es decir, en el caso de que est&amp;eacute; llena y haya que introducir un nuevo elemento, &amp;iquest;cu&amp;aacute;l reemplazamos? La pol&amp;iacute;tica t&amp;iacute;pica en las &lt;em&gt;caches&lt;/em&gt; es la LRU (&lt;em&gt;Least Recently Used&lt;/em&gt;, es decir, se reemplaza el que m&amp;aacute;s tiempo hace que ha sido accedido);&amp;nbsp;la &lt;em&gt;cache&lt;/em&gt; de iconos del &lt;em&gt;shell&lt;/em&gt; no iba a ser menos y sigue m&amp;aacute;s o menos la misma pol&amp;iacute;tica, se reemplaza el icono que m&amp;aacute;s tiempo ha tardado en ser accedido.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La &lt;em&gt;cache &lt;/em&gt;de iconos tiene apoyo en el disco&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La &lt;em&gt;cache&lt;/em&gt; de iconos reside en todo momento en memoria principal, pero en ciertas circunstancias es necesario que se almacene en el disco, para preservar su contenido cuando el usuario&amp;nbsp;apague el sistema. Cuando el usuario se dispone a apagar o reiniciar su equipo, el sistema observa si la &lt;em&gt;cache&lt;/em&gt; ha experimentado cambios desde la &amp;uacute;ltima vez que se trajo del disco a memoria. Se dice que&amp;nbsp;una &lt;em&gt;cache&lt;/em&gt; est&amp;aacute; &amp;quot;sucia&amp;quot; si ha ocurrido esto. En ese caso, el sistema guardar&amp;aacute; una copia de la &lt;em&gt;cache&lt;/em&gt; en disco, en el fichero&amp;nbsp;de sistema&amp;nbsp;IconCache.db del directorio %USERPROFILE%\AppData\Local\. El sistema genera el tama&amp;ntilde;o final de este fichero&amp;nbsp;desde un principio para evitar la fragmentaci&amp;oacute;n del disco.&lt;/p&gt;
&lt;p&gt;En una fase de la inicializaci&amp;oacute;n de Explorer.exe (tema que se tratar&amp;aacute; en detalle en un pr&amp;oacute;ximo art&amp;iacute;culo), se determina si la &lt;em&gt;cache&lt;/em&gt; de iconos almacenada en disco tiene el tama&amp;ntilde;o y profundidad de color apropiados seg&amp;uacute;n la configuraci&amp;oacute;n actual; si es as&amp;iacute;, se copiar&amp;aacute; su contenido a memoria principal y permanecer&amp;aacute; all&amp;iacute; hasta el pr&amp;oacute;ximo apagado o reinicio.&lt;/p&gt;
&lt;p&gt;Algunas preguntas frecuentes sobre la &lt;em&gt;cache&lt;/em&gt; de iconos:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Se puede ampliar el tama&amp;ntilde;o de la &lt;em&gt;cache&lt;/em&gt; de iconos?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Es posible ampliar el tama&amp;ntilde;o de la &lt;em&gt;cache&lt;/em&gt; de iconos, tanto en XP como en Vista, modificando la clave de Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current Version\Explorer, valor Max Cached Icons. Si este valor no existe, el &lt;em&gt;shell&lt;/em&gt; tomar&amp;aacute; por defecto un valor de 500. Si usa la versi&amp;oacute;n de depuraci&amp;oacute;n de XP/Vista (versi&amp;oacute;n &lt;em&gt;checked&lt;/em&gt;), este valor es menor (200) para poder experimentar m&amp;aacute;s f&amp;aacute;cilmente con el llenado de la &lt;em&gt;cache&lt;/em&gt; de iconos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;C&amp;oacute;mo se refresca la cache de iconos en Windows Vista?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Un m&amp;eacute;todo sencillo de refrescar la &lt;em&gt;cache&lt;/em&gt; de iconos en Windows Vista es cambiar moment&amp;aacute;neamente la profundidad de color de 32 bits a 16 bits, por ejemplo. Tenga en cuenta que si tiene activada la&amp;nbsp;composici&amp;oacute;n de escritorio, moment&amp;aacute;neamente se desactivar&amp;aacute; hasta que revierta la profundidad de color a 32 bits. Esto es por dise&amp;ntilde;o. Eche un vistazo a este art&amp;iacute;culo para m&amp;aacute;s informaci&amp;oacute;n: &lt;a href="http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/aero_rules.doc"&gt;http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/aero_rules.doc&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1642153" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Shell/default.aspx">Shell</category></item></channel></rss>