<?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</title><link>http://msmvps.com/blogs/dmartin/default.aspx</link><description>Este blog trata de Windows: técnicas avanzadas de solución de problemas y detalles de funcionamiento que espero sean de utilidad tanto a desarrolladores como a administradores de sistemas.</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>La opción "Ocultar unidades vacías en la carpeta Equipo" no hace lo que mucha gente cree</title><link>http://msmvps.com/blogs/dmartin/archive/2010/01/25/la-opci-243-n-quot-ocultar-unidades-vac-237-as-en-la-carpeta-equipo-quot-no-hace-lo-que-mucha-gente-cree.aspx</link><pubDate>Mon, 25 Jan 2010 20:47:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1752087</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=1752087</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1752087</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2010/01/25/la-opci-243-n-quot-ocultar-unidades-vac-237-as-en-la-carpeta-equipo-quot-no-hace-lo-que-mucha-gente-cree.aspx#comments</comments><description>&lt;p&gt;Por lo que he ido viendo desde que Windows 7 sali&amp;oacute; a la luz, mucha gente no tiene totalmente claro a qu&amp;eacute; se refiere la opci&amp;oacute;n &amp;quot;Ocultar unidades vac&amp;iacute;as en la carpeta Equipo&amp;quot; que est&amp;aacute; en el panel Opciones de carpeta, pesta&amp;ntilde;a Ver. De hecho, mucha gente recomienda cambiar el estado de esa casilla cuando la unidad de CD/DVD no se muestra en Equipo.&lt;/p&gt;
&lt;p&gt;La respuesta corta es que la funcionalidad que ofrece esa casilla no es aplicable a las unidades de CD/DVD. Solo es aplicable a lectores de tarjetas y dispositivos similares.&lt;/p&gt;
&lt;p&gt;Cuando Windows tiene que decidir si debe mostrar o no una unidad en Equipo, en primer lugar comprueba si hay alguna configuraci&amp;oacute;n que evite su aparici&amp;oacute;n. Se puede evitar la aparici&amp;oacute;n de una unidad en Equipo de dos formas, mediante una directiva o mediante un valor de Registro por usuario, nuevo en Windows 7.&lt;/p&gt;
&lt;p&gt;El nuevo valor de Registro est&amp;aacute; en la clave de Registro HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced, es de tipo DWORD y su nombre es NeverShowDrivesMask.&lt;/p&gt;
&lt;p&gt;La directiva se denomina NoDrives y est&amp;aacute; presente en versiones anteriores de Windows: &lt;a href="http://technet.microsoft.com/en-us/library/cc938267.aspx"&gt;http://technet.microsoft.com/en-us/library/cc938267.aspx&lt;/a&gt;. En el art&amp;iacute;culo de Technet puede ver la clave de registro que activa esta directiva.&lt;/p&gt;
&lt;p&gt;El contenido de los valores DWORD NeverShowDrivesMask y NoDrives es un campo de 32 bits, de los cuales se usan los 26 de m&amp;aacute;s a la derecha.&amp;nbsp;Basta con poner&amp;nbsp;un 1 binario en&amp;nbsp;la posici&amp;oacute;n correspondiente a la unidad o unidades que queremos ocultar. Por ejemplo, si queremos ocultar las unidades C y D, pondr&amp;iacute;amos un 1 binario en la tercera y cuarta posici&amp;oacute;n (1100). Por tanto, el valor de tipo decimal que tenemos que poner en este caso&amp;nbsp;es el 12. Puede aplicar simult&amp;aacute;neamente la directiva de grupo y el valor de registro por usuario.&lt;/p&gt;
&lt;p&gt;Si la unidad no estuviera siendo ocultada por alguna de las configuraciones anteriores, se comprueba si la casilla &amp;quot;Ocultar unidades vac&amp;iacute;as en la carpeta Equipo&amp;quot; est&amp;aacute; marcada. Si as&amp;iacute; fuese, si la unidad est&amp;aacute; vac&amp;iacute;a&amp;nbsp;&lt;strong&gt;y no es una unidad de CD/DVD&lt;/strong&gt;, no se muestra en Equipo. Las unidades que entran en juego en este punto son aquellas que son capaces de notificar si tienen contenido o no; es decir, lectores de tarjetas y similares (las unidades lectoras de disquetes no suelen permitir esta caracter&amp;iacute;stica). Las unidades de CD/DVD tambi&amp;eacute;n notifican si tienen un disco o no, pero como se ha comentado, no se ven afectadas por esta configuraci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Si en Equipo no se mostrara su unidad de CD/DVD y ha comprobado que no est&amp;aacute; oculta por alguna de las dos directivas antes mencionadas, lo primero que deber&amp;iacute;a hacer es ejecutar el solucionador de problemas de hardware de Windows 7. Este solucionador de problemas incorpora el m&amp;eacute;todo de soluci&amp;oacute;n de problemas descrito en este art&amp;iacute;culo de la KB: &lt;a href="http://support.microsoft.com/kb/314060/es"&gt;http://support.microsoft.com/kb/314060/es&lt;/a&gt;. Suele ocurrir cuando software de grabaci&amp;oacute;n o similar instala filtros en la unidad de CD/DVD.&lt;/p&gt;
&lt;p&gt;Si persistiera el problema y la unidad&amp;nbsp;es reconocida por la BIOS de la m&amp;aacute;quina (si no la reconociera, casi con total seguridad se trata de un problema de hardware o de configuraci&amp;oacute;n de hardware), pruebe a desinstalar desde Administrador de dispositivos el canal IDE del que cuelgue la unidad y reinicie el sistema para forzar a que la reconozca nuevamente.&lt;/p&gt;
&lt;p&gt;Espero que este art&amp;iacute;culo haya aclarado las dudas que hay con respecto a la opci&amp;oacute;n &amp;quot;Ocultar unidades vac&amp;iacute;as en la carpeta Equipo&amp;quot; para que as&amp;iacute; evite perder tiempo cambiando opciones que no le van a ayudar a solucionar su problema concreto.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1752087" 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/Windows+7/default.aspx">Windows 7</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Funcionamiento/default.aspx">Funcionamiento</category></item><item><title>¿En qué consiste una versión localizada de Windows Vista/7? [Parte II]</title><link>http://msmvps.com/blogs/dmartin/archive/2010/01/16/191-en-qu-233-consiste-una-versi-243-n-localizada-de-windows-vista-7-parte-i.aspx</link><pubDate>Sat, 16 Jan 2010 22:14:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1749679</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=1749679</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1749679</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2010/01/16/191-en-qu-233-consiste-una-versi-243-n-localizada-de-windows-vista-7-parte-i.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Art&amp;iacute;culos anteriores&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://msmvps.com/blogs/dmartin/archive/2009/10/24/191-en-qu-233-consiste-una-versi-243-n-localizada-de-windows-vista-7.aspx"&gt;&amp;iquest;En qu&amp;eacute; consiste una versi&amp;oacute;n localizada de Windows Vista/7? [Parte I]&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En el anterior art&amp;iacute;culo&amp;nbsp;vimos de forma resumida en qu&amp;eacute; consiste la nueva arquitectura MUI de Windows Vista/7, as&amp;iacute; como los beneficios que conlleva el separar f&amp;iacute;sicamente los&amp;nbsp;recursos dependientes del idioma del resto de binarios del sistema. En esta parte&amp;nbsp;vamos a&amp;nbsp;ver que la configuraci&amp;oacute;n de idioma va m&amp;aacute;s alla de la interfaz que se le muestra al usuario.&lt;/p&gt;
&lt;p&gt;Es importante que resalte un punto que coment&amp;eacute; en mi anterior art&amp;iacute;culo: Cuando se separan los archivos binarios (independientes del idioma) de los archivos de recursos, se corre el riesgo de juntarse con miles de ficheros si la aplicaci&amp;oacute;n tiene el calibre de un sistema operativo. Y lo que es m&amp;aacute;s importante, se trata en su mayor&amp;iacute;a de ficheros muy peque&amp;ntilde;os (menos de 4 KB), lo que tiene un importante impacto negativo en el sistema pues las reservas de memoria f&amp;iacute;sica se hacen con una granularidad de 4 KB (64 KB en el caso de memoria virtual). Por este motivo, Microsoft decidi&amp;oacute; que un mismo fichero alojara recursos de m&amp;uacute;ltiples idiomas.&lt;/p&gt;
&lt;p&gt;Los recursos que forman parte de un m&amp;oacute;dulo de recursos suelen ser los de los componentes adicionales de los que dependa la aplicaci&amp;oacute;n (como DLL, por ejemplo), pues el sistema va a requerirlos en alg&amp;uacute;n momento y el tenerlos simult&amp;aacute;neamente en memoria ahorra operaciones de E/S, que como son dif&amp;iacute;cilmente optimizables hay que intentar reducirlas a toda costa.&lt;/p&gt;
&lt;p&gt;En Windows Vista/7 existen varios &amp;aacute;mbitos para un idioma o conjunto de idiomas instalados. En este ep&amp;iacute;grafe se explicar&amp;aacute;n cu&amp;aacute;les son estos &amp;aacute;mbitos, cu&amp;aacute;ndo y d&amp;oacute;nde se configuran y qu&amp;eacute; implicaciones pr&amp;aacute;cticas tienen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Idioma de instalaci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tambi&amp;eacute;n denominado idioma por defecto de la interfaz de sistema, es el idioma que selecciona el usuario al comenzar la instalaci&amp;oacute;n del sistema operativo.&lt;/p&gt;
&lt;p&gt;La lista de idiomas se genera a partir del fichero \sources\Lang.ini del DVD de instalaci&amp;oacute;n. En caso de que el idioma o idiomas&amp;nbsp;no estuviera(n) ya instalado(s) en la imagen WIM de Windows, el programa de instalaci&amp;oacute;n lo(s) instala. En Windows&amp;nbsp;Vista esto se realiza llamando a la herramienta Pkgmgr.exe, pero en Windows 7 se usa la nueva herramienta Dism.exe. Concretamente, el par&amp;aacute;metro&amp;nbsp;/Add-Package permite instalar paquetes (ya sea paquetes de idiomas o actualizaciones) en una imagen de Windows 7. Puede obtener m&amp;aacute;s informaci&amp;oacute;n sobre Dism.exe en esta p&amp;aacute;gina: &lt;a href="http://technet.microsoft.com/en-us/library/dd744382(WS.10).aspx"&gt;http://technet.microsoft.com/en-us/library/dd744382(WS.10).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En caso de que la imagen tenga instalados varios idiomas y la edici&amp;oacute;n de Windows no fuera Ultimate o Enterprise, el resto de idiomas se desinstalan autom&amp;aacute;ticamente al finalizar la instalaci&amp;oacute;n, mediante la tarea programada LPRemove.&lt;/p&gt;
&lt;p&gt;Resumidamente, el idioma de instalaci&amp;oacute;n por as&amp;iacute; decirlo&amp;nbsp;es el idioma &amp;quot;por defecto&amp;quot; del sistema operativo; es el primer idioma que se configura en el sistema y no se puede cambiar posteriormente.&amp;nbsp;En general, tiene un uso bastante reducido pues se tiene m&amp;aacute;s&amp;nbsp;en cuenta la lista de idiomas por sistema, que se describe a continuaci&amp;oacute;n. Si desarrolla aplicaciones y quiere saber qu&amp;eacute; idioma es el idioma de instalaci&amp;oacute;n, puede usar la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd318123(VS.85).aspx"&gt;GetSystemDefaultUILanguage&lt;/a&gt;. Ojo, tenga especialmente en cuenta que el idioma de instalaci&amp;oacute;n y el idioma de la interfaz gr&amp;aacute;fica del usuario pueden ser diferentes.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lista de idiomas por sistema&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La lista de idiomas por sistema contiene el idioma de instalaci&amp;oacute;n, el idioma principal de sistema, y una lista de idiomas de apoyo (&lt;em&gt;fallback languages&lt;/em&gt;)&amp;nbsp;para el caso en que el idioma principal fuese un idioma parcialmente traducido o un LIP (&lt;em&gt;Language Interface Pack&lt;/em&gt;) como el hindi o el catal&amp;aacute;n.&lt;/p&gt;
&lt;p&gt;El idioma de sistema es el idioma que se usa cuando no hay ning&amp;uacute;n usuario con sesi&amp;oacute;n iniciada o bien cuando el usuario no ha cambiado su configuraci&amp;oacute;n de idioma. Se puede cambiar siguiendo los pasos de este art&amp;iacute;culo de la documentaci&amp;oacute;n de Windows 7: &lt;a href="http://windows.microsoft.com/es-ES/windows7/Apply-regional-and-language-settings-to-reserved-accounts"&gt;http://windows.microsoft.com/es-ES/windows7/Apply-regional-and-language-settings-to-reserved-accounts&lt;/a&gt;. Una aplicaci&amp;oacute;n no puede cambiar la lista de idiomas por sistema, pero s&amp;iacute; consultarla mediante la API de Win32 &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd318124(VS.85).aspx"&gt;GetSystemPreferredUILanguages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lista de idiomas por usuario&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En Windows Vista/7 cada usuario puede establecer un idioma de su elecci&amp;oacute;n (si la edici&amp;oacute;n de Windows 7 as&amp;iacute; lo permite). Para cambiarlo se deben seguir los pasos de este art&amp;iacute;culo de la documentaci&amp;oacute;n de Windows 7: &lt;a href="http://windows.microsoft.com/es-ES/windows7/Install-or-change-a-display-language"&gt;http://windows.microsoft.com/es-ES/windows7/Install-or-change-a-display-language&lt;/a&gt;. Como en el caso anterior, para dar el control al usuario las aplicaciones no pueden modificar esta lista de idiomas. Para consultarla puede llamar a la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd318139(VS.85).aspx"&gt;GetUserPreferredUILanguages&lt;/a&gt;. El primer idioma de la lista es el idioma de la interfaz gr&amp;aacute;fica.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lista de idiomas por proceso&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cada proceso puede establecer una lista de hasta 5 idiomas. Esta lista se almacena en el bloque de control de proceso (PEB), que es una estructura del n&amp;uacute;cleo de Windows que mantiene informaci&amp;oacute;n sobre cada uno de los procesos del sistema. En un pr&amp;oacute;ximo art&amp;iacute;culo se detallar&amp;aacute; qu&amp;eacute; informaci&amp;oacute;n sobre MUI est&amp;aacute; almacenada en el bloque de control de proceso y de qu&amp;eacute; forma.&lt;/p&gt;
&lt;p&gt;Para consultar el idioma por proceso una aplicaci&amp;oacute;n puede llamar a la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd374050(VS.85).aspx"&gt;GetProcessPreferredUILanguages&lt;/a&gt;. Para modificar esa lista, se puede usar la funci&amp;oacute;n &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd374050(VS.85).aspx"&gt;SetProcessPreferredUILanguages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lista de idiomas por hilo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cada hilo de un proceso puede establecer su lista de 5 idiomas preferidos.&amp;nbsp; Esta lista se almacena en el bloque de control de hilo (TEB), que es una estructura del n&amp;uacute;cleo de Windows que mantiene informaci&amp;oacute;n sobre cada uno de los hilos de un proceso. En un pr&amp;oacute;ximo art&amp;iacute;culo se detallar&amp;aacute; qu&amp;eacute; informaci&amp;oacute;n sobre MUI est&amp;aacute; almacenada en el hilo de control de proceso y de qu&amp;eacute; forma.&lt;/p&gt;
&lt;p&gt;Para consultar el idioma por proceso una aplicaci&amp;oacute;n puede llamar a la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd318128(VS.85).aspx"&gt;GetThreadPreferredUILanguages&lt;/a&gt;. Para modificar esa lista, se puede usar la funci&amp;oacute;n &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/dd374052(VS.85).aspx"&gt;SetThreadPreferredUILanguages&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Este diagrama muestra una posible configuraci&amp;oacute;n de idioma en Windows 7:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/8400.Lista_5F00_idiomas.png"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x197/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/8400.Lista_5F00_idiomas.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En el ejemplo la lista de idiomas por hilo son el espa&amp;ntilde;ol y el ingl&amp;eacute;s, el idioma por proceso es el alem&amp;aacute;n, se ha instalado el paquete de idiomas catal&amp;aacute;n, que junto al idioma espa&amp;ntilde;ol forman la lista de idiomas por usuario; la lista de idiomas por sistema es el &amp;aacute;rabe, apoyado en el ingl&amp;eacute;s para aquellos recursos que no est&amp;eacute;n traducidos; y por &amp;uacute;ltimo, el idioma en el que se instal&amp;oacute; el sistema operativo es el ingl&amp;eacute;s. La nueva arquitectura MUI de Windows Vista/7 permite este tipo de escenarios con m&amp;uacute;ltiples idiomas.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Es mejor instalar una versi&amp;oacute;n en ingl&amp;eacute;s y aplicarle el MUI en espa&amp;ntilde;ol o instalar directamente una versi&amp;oacute;n en espa&amp;ntilde;ol?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En este punto surge esta duda que asalta a no pocas personas que usan Windows. Realmente, la versi&amp;oacute;n en espa&amp;ntilde;ol y en ingl&amp;eacute;s no son m&amp;aacute;s que una versi&amp;oacute;n independiente del idioma a la que se le ha aplicado el correspondiente paquete de idiomas. Por este motivo, no hay diferencias ni de rendimiento, estabilidad, seguridad, etc.&lt;/p&gt;
&lt;p&gt;En cuanto a la versi&amp;oacute;n inglesa con el MUI espa&amp;ntilde;ol aplicado, es una versi&amp;oacute;n casi id&amp;eacute;ntica a la versi&amp;oacute;n en espa&amp;ntilde;ol; la &amp;uacute;nica diferencia es que en este caso tanto el idioma de instalaci&amp;oacute;n como la lista de idiomas por sistema se mantienen en ingl&amp;eacute;s, lo &amp;uacute;nico que cambia es el idioma por usuario. Aunque el idioma de sistema se puede cambiar (tal y como se ha explicado anteriormente), no ocurre lo mismo con el idioma de instalaci&amp;oacute;n, que aunque tiene poca relevancia&amp;nbsp;s&amp;iacute; que condiciona algunos aspectos de la m&amp;aacute;quina, como puede ser algunas rutas o nombres de usuarios del sistema.&amp;nbsp;En ning&amp;uacute;n caso hay diferencias de rendimiento, ni de estabilidad, ni de disponibilidad de actualizaciones.&lt;/p&gt;
&lt;p&gt;En general mi consejo es el siguiente:&lt;/p&gt;
&lt;p&gt;Si el usuario se maneja nativamente en un idioma, se deber&amp;iacute;a instalar la versi&amp;oacute;n en ese idioma en concreto. Instalar la versi&amp;oacute;n en ingl&amp;eacute;s solo va a complicar el aprendizaje del sistema, sin ning&amp;uacute;n beneficio por parte del usuario.&lt;/p&gt;
&lt;p&gt;Si la m&amp;aacute;quina la usan personas que hablan distintos idiomas y la versi&amp;oacute;n de Windows 7 lo permite, lo ideal es configurar cada cuenta de usuario para que muestre la interfaz en un idioma distinto, instalando antes los correspondientes paquetes de idiomas. Este es el escenario t&amp;iacute;pico de una multinacional.&lt;/p&gt;
&lt;p&gt;En pr&amp;oacute;ximos art&amp;iacute;culos veremos qu&amp;eacute; estructuras tiene el sistema para almacenar toda la informaci&amp;oacute;n MUI, as&amp;iacute; como las caches, tanto en modo usuario como en modo n&amp;uacute;cleo, que sirven para aligerar la carga de recursos en un determinado idioma&amp;nbsp;por parte de una aplicaci&amp;oacute;n o del propio sistema operativo. Tambi&amp;eacute;n veremos en qu&amp;eacute; consiste el cargador de recursos de Windows, que es el componente&amp;nbsp;encargado de proporcionar a una aplicaci&amp;oacute;n un recurso en un determinado idioma.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1749679" width="1" height="1"&gt;</description><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><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Multilingual+User+Interface+_2800_MUI_2900_/default.aspx">Multilingual User Interface (MUI)</category></item><item><title>Microsoft MVP 2010</title><link>http://msmvps.com/blogs/dmartin/archive/2010/01/01/microsoft-mvp-2010.aspx</link><pubDate>Fri, 01 Jan 2010 17:38:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1748868</guid><dc:creator>dmartin</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1748868</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1748868</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2010/01/01/microsoft-mvp-2010.aspx#comments</comments><description>&lt;p&gt;Microsoft acaba de informarme de que he sido galardonado con el premio MVP para este a&amp;ntilde;o 2010. Parece que fue ayer cuando recib&amp;iacute; la primera nominaci&amp;oacute;n, pero este ser&amp;aacute; ya el quinto a&amp;ntilde;o que forme parte de este&amp;nbsp;programa. Espero seguir contribuyendo a la riqueza de contenido&amp;nbsp;de las comunidades t&amp;eacute;cnicas en espa&amp;ntilde;ol sobre Windows. Tambi&amp;eacute;n agradezco la fidelidad de los lectores de este &lt;em&gt;blog&lt;/em&gt; en particular, pues poco a poco se ha convertido en un sitio en la red&amp;nbsp;con un tr&amp;aacute;fico considerable.&lt;/p&gt;
&lt;p&gt;Aprovecho tambi&amp;eacute;n&amp;nbsp;para desear un buen a&amp;ntilde;o 2010 a todos.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1748868" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/MVP/default.aspx">MVP</category></item><item><title>¿Cuándo se crea una partición de sistema durante la instalación de Windows 7?</title><link>http://msmvps.com/blogs/dmartin/archive/2009/12/13/191-cuando-se-crea-una-partici-243-n-de-sistema-durante-la-instalaci-243-n-de-windows-7.aspx</link><pubDate>Mon, 14 Dec 2009 01:50:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1745426</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=1745426</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1745426</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/12/13/191-cuando-se-crea-una-partici-243-n-de-sistema-durante-la-instalaci-243-n-de-windows-7.aspx#comments</comments><description>&lt;p&gt;Antes de la primera &lt;em&gt;beta&lt;/em&gt; de Windows 7 &lt;a target="_blank" href="http://msmvps.com/blogs/dmartin/archive/2008/11/16/sobre-la-nueva-partici-243-n-de-sistema-de-windows-7.aspx"&gt;publiqu&amp;eacute;&lt;/a&gt; un art&amp;iacute;culo referido a la partici&amp;oacute;n de sistema que se&amp;nbsp;crea durante la instalaci&amp;oacute;n de&amp;nbsp;Windows 7, de 200 MB (reducido a 100 MB en la versi&amp;oacute;n final, como ya anticip&amp;eacute; en el art&amp;iacute;culo), con etiqueta &amp;quot;Reservado para el sistema&amp;quot; y sin letra de unidad asignada. Como a&amp;uacute;n existen muchas cuestiones sobre qu&amp;eacute; condiciones tiene que cumplir el disco para que se cree autom&amp;aacute;ticamente dicha partici&amp;oacute;n, este art&amp;iacute;culo intentar&amp;aacute; detallar a&amp;uacute;n m&amp;aacute;s este punto. Como ya sabe, el motivo principal&amp;nbsp;por el cual se le invita al usuario a crear una partici&amp;oacute;n de sistema separada de la partici&amp;oacute;n de arranque es para que la utilidad de Windows 7&amp;nbsp;Bitlocker funcione correctamente y tambi&amp;eacute;n&amp;nbsp;para facilitar los escenarios en los que hay dos o m&amp;aacute;s sistemas operativos instalados en una misma m&amp;aacute;quina.&lt;/p&gt;
&lt;p&gt;Durante la instalaci&amp;oacute;n de Windows 7, se comprueba si existe una unidad de sistema creada con anterioridad (por ejemplo, porque se est&amp;eacute; realizando una actualizaci&amp;oacute;n, una instalaci&amp;oacute;n limpia iniciando el programa de instalaci&amp;oacute;n desde otro Windows, o bien se hayan creado las particiones con otra utilidad). Si es el caso, se comprueba si esta cumple con el requisito de tener al menos 100 MB de espacio libre. Si fuera adem&amp;aacute;s el volumen donde se va a instalar el sistema operativo, este debe tener espacio tambi&amp;eacute;n para los archivos de instalaci&amp;oacute;n del&amp;nbsp;sistema. Si se cumplen estas condiciones, la unidad queda asignada como volumen de sistema, marcada como&amp;nbsp;activa, y el programa de instalaci&amp;oacute;n no hace ninguna modificaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Qu&amp;eacute; ocurre si no hay ning&amp;uacute;n volumen de sistema en el equipo?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En el&amp;nbsp;caso de que no haya ning&amp;uacute;n volumen de sistema en el equipo, normalmente porque se est&amp;aacute; instalando Windows 7 en un disco vac&amp;iacute;o, el programa de instalaci&amp;oacute;n intenta encontrar la mejor unidad de sistema posible. Para ello se siguen estos pasos, que imponen un orden de preferencia:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Se intenta encontrar una regi&amp;oacute;n dentro del espacio no asignado del disco donde se va a instalar el sistema operativo, que cumpla con los requisitos de espacio antes mencionados.&lt;/li&gt;
&lt;li&gt;Si no se ha encontradado nada, se busca en el espacio no asignado del resto de discos.&lt;/li&gt;
&lt;li&gt;Si a&amp;uacute;n as&amp;iacute; no se encontrara un candidato a posible unidad de sistema, se examinar&amp;iacute;a el espacio asignado en todos los discos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Queda una &amp;uacute;ltima restricci&amp;oacute;n: Si el sistema encontrara una regi&amp;oacute;n sin asignar que cumpliera con los requisitos de espacio de la unidad de sistema, esta solo es elegida si en el disco hay menos de 3 particiones.&lt;/p&gt;
&lt;p&gt;Una vez que el programa de instalaci&amp;oacute;n ha encontrado una regi&amp;oacute;n que puede contener la unidad de sistema, consulta al usuario si desea crearla (si procede)&amp;nbsp;y, de contestar afirmativamente, la crea y le da formato NTFS.&lt;/p&gt;
&lt;p&gt;Preguntas m&amp;aacute;s frecuentes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tengo una partici&amp;oacute;n sin letra de 200 MB&amp;nbsp;o de un tama&amp;ntilde;o superior, no de 100 MB&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Es importante comentar que la versi&amp;oacute;n final de Windows 7, de tener que crear una partici&amp;oacute;n de sistema, siempre crear&amp;aacute; una de 100 MB. Si observa una partici&amp;oacute;n de 200 MB o de otro tama&amp;ntilde;o superior, sin letra de unidad, probablemente se trate de una partici&amp;oacute;n&amp;nbsp;activa que ya estaba con anterioridad en ese sistema (quiz&amp;aacute; por la instalaci&amp;oacute;n de una versi&amp;oacute;n &lt;em&gt;beta&lt;/em&gt; de Windows 7)&amp;nbsp;y que el programa de instalaci&amp;oacute;n de Windows 7 ha aprovechado.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Se puede evitar la creaci&amp;oacute;n de esa partici&amp;oacute;n de sistema?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Es posible, pero yo personalmente no lo recomiendo. Quiz&amp;aacute; la forma m&amp;aacute;s sencilla sea pulsar May&amp;uacute;sculas+F10 en la pantalla de creaci&amp;oacute;n de particiones del programa de instalaci&amp;oacute;n de Windows 7 para abrir una consola de comandos. En dicha consola, teclear estos comandos para crear una partici&amp;oacute;n activa que ocupe la totalidad del disco. Esta partici&amp;oacute;n activa la usar&amp;aacute; el programa de instalaci&amp;oacute;n como partici&amp;oacute;n de sistema:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;Diskpart&lt;br /&gt;Select disk 0&lt;br /&gt;Create part prim&lt;br /&gt;Active&lt;br /&gt;Exit&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Es probable que al cerrar la consola tenga que pulsar sobre el bot&amp;oacute;n &lt;em&gt;Actualizar&lt;/em&gt; para ver el nuevo esquema de particiones reci&amp;eacute;n creado.&lt;/p&gt;
&lt;p&gt;Para concluir, este diagrama de flujo resume los pasos que se siguen para determinar si se debe crear una unidad de sistema durante la instalaci&amp;oacute;n de Windows 7:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://msmvps.com/cfs-filesystemfile.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/4201.ParticionSistemaFlujo.png" border="0" style="max-height:738px;max-width:695px;" alt="" /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1745426" width="1" height="1"&gt;</description><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>¿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>Tutorial sobre Windbg [Parte IV]</title><link>http://msmvps.com/blogs/dmartin/archive/2009/11/13/tutorial-sobre-windbg-parte-iv.aspx</link><pubDate>Fri, 13 Nov 2009 13:30:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1738116</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=1738116</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1738116</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/11/13/tutorial-sobre-windbg-parte-iv.aspx#comments</comments><description>&lt;p&gt;En esta cuarta parte del tutorial sobre Windbg, se van a tratar algunos comandos b&amp;aacute;sicos para conocer el estado de la m&amp;aacute;quina que estamos depurando. El primer aspecto que se va a tratar es el estado del banco de registros.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Estado del banco de registros&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Toda computadora dispone de un conjunto compuesto por un cierto n&amp;uacute;mero de registros. El n&amp;uacute;mero de registros y su tama&amp;ntilde;o (en n&amp;uacute;mero de bits) es algo que depende de la arquitectura de la plataforma. Los registros principalmente sirven para almacenar de manera temporal peque&amp;ntilde;os valores que se van necesitando durante la ejecuci&amp;oacute;n del c&amp;oacute;digo m&amp;aacute;quina, as&amp;iacute; como valores de retorno de funciones, &lt;em&gt;flags&lt;/em&gt; de estado del procesador, etc. Si ha seguido la parte tres del tutorial (&lt;a href="http://msmvps.com/blogs/dmartin/archive/2009/08/13/tutorial-sobre-windbg-parte-iii.aspx"&gt;http://msmvps.com/blogs/dmartin/archive/2009/08/13/tutorial-sobre-windbg-parte-iii.aspx&lt;/a&gt;), en ella se indicaron algunos comandos que sirven para detener el flujo de ejecuci&amp;oacute;n de un programa dentro del depurador. Si en ese estado queremos examinar cu&amp;aacute;l es el contenido de los registros de la m&amp;aacute;quina, podemos ejecutar el comando &lt;strong&gt;r&lt;/strong&gt;. Este es un ejemplo de la salida del comando r en un sistema operativo de 32 bits que est&amp;aacute; siendo depurado:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:000&amp;gt; r&lt;br /&gt;eax=00000000 ebx=00000000 ecx=0012fb0c edx=779664f4 esi=fffffffe edi=00000000&lt;br /&gt;eip=779be60e esp=0012fb28 ebp=0012fb54 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;ntdll!LdrpDoDebuggerBreak+0x2c:&lt;br /&gt;779be60e cc&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; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En la salida del comando se muestra el contenido de los registros de la arquitectura IA-32: Eax (registro acumulador), Ebx (registro base), Ecx (registro contador), Esi (registro origen en operaciones con la memoria), Edi (registro destino en operaciones con la memoria), Eip (registro de instrucciones), Esp (registro que contiene el puntero de pila), Ebp (registro con el puntero base de pila), y algunos &lt;em&gt;flags&lt;/em&gt; que est&amp;aacute;n activados en el registro de estado del procesador.&lt;/p&gt;
&lt;p&gt;Sin embargo, estos no son todos los registros que componen el banco de registros del procesador. Por defecto, Windbg aplica una m&amp;aacute;scara al banco de registros que sirve para que solamente se muestren los registros de enteros del procesador. El comando &lt;strong&gt;rm&lt;/strong&gt; devuelve cu&amp;aacute;l es la m&amp;aacute;scara que est&amp;aacute; siendo aplicada:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:000&amp;gt; rm&lt;br /&gt;Register output mask is 9:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 - Integer state (32-bit)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 - Segment registers&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En este ejemplo vemos que se est&amp;aacute;n mostrando los registros de enteros y los registros de segmento del procesador. Si en nuestra depuraci&amp;oacute;n necesit&amp;aacute;ramos echar un vistazo tambi&amp;eacute;n&amp;nbsp;a los registros de punto flotante, el comando&lt;strong&gt; rm ?&lt;/strong&gt; nos puede ayudar a descubrir qu&amp;eacute; m&amp;aacute;scara aplicar:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:000&amp;gt; rm ?&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 - Integer state (32-bit) or&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 - Integer state (64-bit), 64-bit takes precedence&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 - Floating-point state&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 - Segment registers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 - MMX registers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20 - Debug registers and, in kernel, CR4&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40 - SSE XMM registers&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Como queremos establecer el bit&amp;nbsp;0 (registros de enteros), el bit 2 (registros de punto flotante) y el bit 3 (registros de segmento), formamos el n&amp;uacute;mero binario 1101, que en hexadecimal es el n&amp;uacute;mero D. Ejecutamos&lt;strong&gt; rm&amp;nbsp;D&lt;/strong&gt; y a continuaci&amp;oacute;n&lt;strong&gt; rm&lt;/strong&gt; para ver la m&amp;aacute;scara aplicada:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:000&amp;gt; rm D&lt;br /&gt;0:000&amp;gt; rm&lt;br /&gt;Register output mask is d:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 - Integer state (32-bit)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 - Floating-point state&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 - Segment registers&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Comprobamos que efectivamente lo hemos hecho bien:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:000&amp;gt; r&lt;br /&gt;eax=00000000 ebx=00000000 ecx=0012fb0c edx=777e64f4 esi=fffffffe edi=00000000&lt;br /&gt;eip=7783e60e esp=0012fb28 ebp=0012fb54 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;fpcw=027F: rn 53 puozdi&amp;nbsp; fpsw=0000: top=0 cc=0000 --------&amp;nbsp; fptw=FFFF&lt;br /&gt;fopcode=0000&amp;nbsp; fpip=0000:00000000&amp;nbsp; fpdp=0000:00000000&lt;br /&gt;st0= 0.000000000000000000000e+0000&amp;nbsp; st1= 0.000000000000000000000e+0000&lt;br /&gt;st2= 0.000000000000000000000e+0000&amp;nbsp; st3= 0.000000000000000000000e+0000&lt;br /&gt;st4= 0.000000000000000000000e+0000&amp;nbsp; st5= 0.000000000000000000000e+0000&lt;br /&gt;st6= 0.000000000000000000000e+0000&amp;nbsp; st7= 0.000000000000000000000e+0000&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Es destacable comentar que en Windbg existe el concepto de &lt;em&gt;pseudo-registros&lt;/em&gt;. Dependiendo de la arquitectura de la computadora en la que estemos trabajando, los nombres de los registros pueden cambiar, pese a que su sem&amp;aacute;ntica sea la misma. Por ejemplo, en la arquitectura x86 el registro de instrucciones es el registro Eip, mientras que en la arquitectura x64 es el registro Rip. Para evitar tener que memorizar este tipo de cosas, podemos hacer uso del &lt;em&gt;pseudo-registro&lt;/em&gt; $ip. Aparte de este, dos de los &lt;em&gt;pseudo-registros&lt;/em&gt; que m&amp;aacute;s uso son $ra, que sirve para hacer referencia a la direcci&amp;oacute;n de retorno de la funci&amp;oacute;n en curso, y $retreg, que hace referencia al registro que almacena el resultado de una funci&amp;oacute;n, una vez que esta ha finalizado (en el caso de la arquitectura x86, se trata del registro f&amp;iacute;sico Eax).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vista del c&amp;oacute;digo en ejecuci&amp;oacute;n&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Otro aspecto muy importante durante una sesi&amp;oacute;n de depuraci&amp;oacute;n es tener acceso al c&amp;oacute;digo ensamblador que est&amp;aacute; siendo ejecutado por el procesador. Windbg nos permite desensamblar el c&amp;oacute;digo m&amp;aacute;quina (binario)&amp;nbsp;presente en la memoria del computador para convertirlo al lenguaje ensamblador, mucho m&amp;aacute;s legible.&lt;/p&gt;
&lt;p&gt;Para desensamblar las instrucciones de la funci&amp;oacute;n en curso, podemos hacer uso del comando &lt;strong&gt;uf .&lt;/strong&gt;&amp;nbsp;(&lt;em&gt;Unassemble function&lt;/em&gt;). El punto que hay despu&amp;eacute;s de &amp;quot;uf&amp;quot; sirve como referencia a la instrucci&amp;oacute;n presente en el registro de instrucciones, pero en general despu&amp;eacute;s de &amp;quot;uf&amp;quot; puede ponerse cualquier otra&amp;nbsp;direcci&amp;oacute;n de memoria.&lt;/p&gt;
&lt;p&gt;Si queremos desensamblar instrucciones a partir de la instrucci&amp;oacute;n actual (para ver qu&amp;eacute; c&amp;oacute;digo va a ejecutar el procesador inmediatamente despu&amp;eacute;s), podemos hacer uso del comando &lt;strong&gt;u .&lt;/strong&gt; (o &lt;strong&gt;u $ip&lt;/strong&gt;, haciendo uso de los &lt;em&gt;pseudo-registros&lt;/em&gt; comentados anteriormente). Por defecto, si no se indica nada, Windbg desensambla 8 instrucciones.&lt;/p&gt;
&lt;p&gt;Si en cambio&amp;nbsp;quisi&amp;eacute;ramos desensamblar 8 instrucciones &lt;em&gt;anteriores&lt;/em&gt; a la instrucci&amp;oacute;n actual, el comando a ejecutar ser&amp;iacute;a &lt;strong&gt;ub $ip&lt;/strong&gt; Esto deber&amp;iacute;a ser uno de los primeros pasos que deber&amp;iacute;amos dar si nos&amp;nbsp;hemos encontrado con un estado de la m&amp;aacute;quina incorrecto y queremos saber por qu&amp;eacute; la m&amp;aacute;quina ha llegado a tal estado, es decir,&amp;nbsp;qu&amp;eacute; se ha estado ejecutando antes de que ocurriera el desastre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Examinar el contenido de la memoria&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La memoria de un computador que est&amp;aacute; ejecutando un programa contiene regiones con diferentes&amp;nbsp;tipos de informaci&amp;oacute;n. Pueden contener el c&amp;oacute;digo del programa,&amp;nbsp;datos, la pila de ejecuci&amp;oacute;n, &lt;em&gt;heap&lt;/em&gt;, etc.&lt;/p&gt;
&lt;p&gt;La extensi&amp;oacute;n de Windbg &lt;strong&gt;!address &lt;em&gt;&amp;lt;Direcci&amp;oacute;n&amp;gt;&lt;/em&gt;&lt;/strong&gt; facilita el saber de qu&amp;eacute; tipo es la regi&amp;oacute;n que engloba a una direcci&amp;oacute;n de memoria determinada. Por ejemplo:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:000&amp;gt; !address $ip&lt;br /&gt;&amp;nbsp;ProcessParametrs 007117a8 in range 00710000 00715000&lt;br /&gt;&amp;nbsp;Environment 00710810 in range 00710000 00715000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 777a0000 : 777a1000 - 000d6000&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01000000 MEM_IMAGE&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Protect&amp;nbsp; 00000020 PAGE_EXECUTE_READ&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; State&amp;nbsp;&amp;nbsp;&amp;nbsp; 00001000 MEM_COMMIT&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Usage&amp;nbsp;&amp;nbsp;&amp;nbsp; RegionUsageImage&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FullPath ntdll.dll&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Aqu&amp;iacute; se puede ver, entre otras cosas,&amp;nbsp;como la direcci&amp;oacute;n de memoria que se est&amp;aacute; ejecutando actualmente contiene c&amp;oacute;digo (&amp;quot;RegionUsageImage&amp;quot;), lo que es algo completamente normal.&lt;/p&gt;
&lt;p&gt;Veamos qu&amp;eacute; ocurre si ejecutamos ese mismo&amp;nbsp;comando pero haciendo referencia esta vez al puntero de pila:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;0:000&amp;gt; !address @esp&lt;br /&gt;&amp;nbsp;ProcessParametrs 007117a8 in range 00710000 00715000&lt;br /&gt;&amp;nbsp;Environment 00710810 in range 00710000 00715000&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 00030000 : 0012e000 - 00002000&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 00020000 MEM_PRIVATE&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Protect&amp;nbsp; 00000004 PAGE_READWRITE&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; State&amp;nbsp;&amp;nbsp;&amp;nbsp; 00001000 MEM_COMMIT&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Usage&amp;nbsp;&amp;nbsp;&amp;nbsp; RegionUsageStack&lt;br /&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Pid.Tid&amp;nbsp; 16fc.c4c&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Podemos ver que, obviamente, se trata de&amp;nbsp;una regi&amp;oacute;n de la pila (&amp;quot;RegionUsageStack&amp;quot;).&lt;/p&gt;
&lt;p&gt;El comando !address personalmente lo uso cuando me encuentro con una direcci&amp;oacute;n de memoria involucrada en alg&amp;uacute;n problema y quiero saber qu&amp;eacute; tipo de contenido tiene. Podr&amp;iacute;a ser que fuera una direcci&amp;oacute;n inv&amp;aacute;lida, o bien que el procesador estuviera intentando ejecutar c&amp;oacute;digo desde una regi&amp;oacute;n de memoria marcada como contenedora de datos, por culpa de&amp;nbsp;alg&amp;uacute;n puntero que apunte a donde no debe o qui&amp;eacute;n sabe si por alg&amp;uacute;n fallo de hardware. Otro uso que le doy a la extensi&amp;oacute;n !address es saber qu&amp;eacute; tipo de fuga de memoria tiene un proceso. Si nos encontramos con un proceso que consume memoria de manera desmedida, existe la posibilidad de que tenga una fuga de memoria. Como un proceso puede fugar diversos tipos de memoria, una manera de saber qu&amp;eacute; tipo de memoria est&amp;aacute; utilizando sin liberar es ejecutar el comando !address sin par&amp;aacute;metros para ver un resumen estad&amp;iacute;stico del consumo de memoria de un proceso.&lt;/p&gt;
&lt;p&gt;Para ver lo que contiene una direcci&amp;oacute;n de memoria, Windbg nos proporciona la familia de comandos &lt;strong&gt;d*&lt;/strong&gt;, que tienen la sintaxis&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;d&lt;em&gt;&amp;lt;Tipo&amp;gt;&lt;/em&gt; &lt;em&gt;&amp;lt;Rango_direcciones&amp;gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;lt;Tipo&amp;gt;&lt;/em&gt; sirve para ayudar al depurador a interpretar el contenido de la memoria situado en el rango &lt;em&gt;&amp;lt;Rango_direcciones&amp;gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;En la documentaci&amp;oacute;n de Windbg est&amp;aacute; disponible una lista con todos los tipos de comando d* que se pueden usar, seg&amp;uacute;n lo que queramos mostrar sean valores ASCII, Unicode, palabras dobles, valores en punto flotante, etc. Si el resultado de un comando d* es una ristra de s&amp;iacute;mbolos &amp;quot;?&amp;quot;, esto quiere decir que Windbg ha intentado acceder a una posici&amp;oacute;n inv&amp;aacute;lida de memoria. Esto merecer&amp;iacute;a una investigaci&amp;oacute;n m&amp;aacute;s en profundidad usando alguno de los comandos que se han descrito anteriormente.&lt;/p&gt;
&lt;p&gt;En el pr&amp;oacute;ximo art&amp;iacute;culo se tratar&amp;aacute;n en detalle&amp;nbsp;los comandos de Windbg que nos permiten explorar dos estructuras muy importantes en el estado de una m&amp;aacute;quina que est&amp;aacute; siendo depurada: El bloque de control de proceso (y de hilo) y la pila de ejecuci&amp;oacute;n.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1738116" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Windbg/default.aspx">Windbg</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>¿En qué consiste una versión localizada de Windows Vista/7? [Parte I]</title><link>http://msmvps.com/blogs/dmartin/archive/2009/10/24/191-en-qu-233-consiste-una-versi-243-n-localizada-de-windows-vista-7.aspx</link><pubDate>Sat, 24 Oct 2009 20:24:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1734902</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=1734902</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1734902</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/10/24/191-en-qu-233-consiste-una-versi-243-n-localizada-de-windows-vista-7.aspx#comments</comments><description>&lt;p&gt;Una pr&amp;aacute;ctica que era com&amp;uacute;n en el desarrollo de&amp;nbsp;software de hace unos a&amp;ntilde;os&amp;nbsp;consist&amp;iacute;a en&amp;nbsp;mezclar el&amp;nbsp;c&amp;oacute;digo fuente de la aplicaci&amp;oacute;n&amp;nbsp;junto con&amp;nbsp;cadenas de texto y otros recursos (iconos, im&amp;aacute;genes, etc.). El siguiente diagrama&amp;nbsp;lo explica gr&amp;aacute;ficamente:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/0456.TextoEnCodigo.png"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/0456.TextoEnCodigo.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Conforme el mercado comenz&amp;oacute; a globalizarse fue surgiendo la necesidad de traducir aplicaciones a m&amp;uacute;ltiples idiomas, y por ende este m&amp;eacute;todo acab&amp;oacute; siendo completamente descartado por los siguientes motivos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Para traducir una aplicaci&amp;oacute;n primero hay que crear una o m&amp;aacute;s copias de su&amp;nbsp;c&amp;oacute;digo fuente, con el consecuente coste a&amp;ntilde;adido que supone el mantenerlas.&lt;/li&gt;
&lt;li&gt;Los traductores, que por lo general no tienen conocimientos de programaci&amp;oacute;n, tienen que manipular el c&amp;oacute;digo fuente para traducir las cadenas de texto. Esto puede introducir errores en el funcionamiento de la aplicaci&amp;oacute;n.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Es en esta &amp;eacute;poca cuando el uso de una versi&amp;oacute;n en ingl&amp;eacute;s (o en el idioma nativo de la empresa que desarrollara ese programa) s&amp;iacute; pod&amp;iacute;a ofrecer ciertas ventajas con respecto al resto de idiomas. La posibilidad de introducir errores en el c&amp;oacute;digo mientras se traduc&amp;iacute;a&amp;nbsp;un programa&amp;nbsp;no era algo descabellado, todo ello debido a que la separaci&amp;oacute;n entre c&amp;oacute;digo fuente y cadenas de texto dependientes del idioma era insuficiente (en este caso particular, inexistente).&lt;/p&gt;
&lt;p&gt;Las versiones de Windows anteriores a Vista introdujeron una nueva arquitectura de localizaci&amp;oacute;n de binarios, con el objetivo de separar el c&amp;oacute;digo fuente (las instrucciones que acaba ejecutando el computador) de las cadenas de texto (mensajes informativos, errores, iconos, etc.). &lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/0871.CodigoSeparado.png"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/0871.CodigoSeparado.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Si bien esta arquitectura es v&amp;aacute;lida y sigue siendo usada por much&amp;iacute;simas aplicaciones hoy en d&amp;iacute;a, presenta algunas deficiencias que se magnifican en una empresa del tama&amp;ntilde;o de Microsoft: Por ejemplo, si se detecta un fallo de seguridad en un binario y se quiere desarrollar una actualizaci&amp;oacute;n de seguridad al respecto, como el c&amp;oacute;digo fuente y las&amp;nbsp;cadenas de texto est&amp;aacute;n en el mismo fichero (pese a estar separados entre s&amp;iacute;),&amp;nbsp;ser&amp;iacute;a necesario generar un par de decenas o m&amp;aacute;s de actualizaciones de seguridad, una para cada idioma en el que est&amp;aacute; disponible Windows. Esto retarda innecesariamente el desarrollo de actualizaciones de seguridad en varios idiomas, pues por lo general los errores de seguridad afectan &amp;uacute;nicamente&amp;nbsp;al c&amp;oacute;digo de la aplicaci&amp;oacute;n, no a las cadenas de texto y otros recursos que pudiera contener.&lt;/p&gt;
&lt;p&gt;Con Windows Vista se redise&amp;ntilde;&amp;oacute; en profundidad la arquitectura MUI (&lt;em&gt;Multilingual User Interface&lt;/em&gt;) que ya estaba presente en la versi&amp;oacute;n Professional de Windows XP (entre otros) para que las cadenas de texto y el c&amp;oacute;digo de las aplicaciones estuviera completamente separado, esto es, en ficheros diferentes.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/0028.BinariosSeparados.png"&gt;&lt;img src="http://msmvps.com/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/0028.BinariosSeparados.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Esta arquitectura MUI introducida con Windows Vista no solo beneficia a Microsoft y al usuario, que ya puede instalar un paquete de idiomas en una versi&amp;oacute;n de Windows&amp;nbsp;que no est&amp;eacute; en ingl&amp;eacute;s, tambi&amp;eacute;n beneficia a los desarrolladores de aplicaciones, pues por f&amp;iacute;n disponen de una arquitectura proporcionada por el sistema operativo para manejar recursos en m&amp;uacute;ltiples idiomas, sin ser ya necesario que se construyan una desde cero.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;Qu&amp;eacute; ocurre al instalar Windows Vista/7?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En un &lt;a target="_blank" href="http://rinconwindows.blogspot.com/2007/04/detalles-sobre-la-instalacin-de-windows.html"&gt;art&amp;iacute;culo&lt;/a&gt; de mi antiguo &lt;em&gt;blog&lt;/em&gt; tengo&amp;nbsp;informaci&amp;oacute;n que explica resumidamente en qu&amp;eacute; consisten las fases de la instalaci&amp;oacute;n de Windows Vista. B&amp;aacute;sicamente lo que ocurre es que en primer lugar se instalan los binarios del sistema (independientes del idioma), y seguidamente se instala uno o varios paquetes de idiomas. Como ve, el ingl&amp;eacute;s no recibe ning&amp;uacute;n tipo de trato preferencial, se le trata como un idioma m&amp;aacute;s. La fase correspondiente a la instalaci&amp;oacute;n del paquete de idiomas inicial se realiza durante la fase&amp;nbsp;&amp;quot;Instalando caracter&amp;iacute;sticas&amp;quot;.&lt;/p&gt;
&lt;p&gt;En Windows Vista la herramienta encargada de instalar un paquete de idiomas es la denominada Package Manager (Pkgmgr.exe). En Windows 7, se usa la herramienta Dism (&lt;em&gt;Deployment Image Servicing and Imaging&lt;/em&gt;), que integra&amp;nbsp;todas las&amp;nbsp;funcionalidades de Package Manager y de otras&amp;nbsp;herramientas igualmente relacionadas con la administraci&amp;oacute;n de im&amp;aacute;genes de instalaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;En este primer art&amp;iacute;culo se ha explicado&amp;nbsp;c&amp;oacute;mo ha ido evolucionando&amp;nbsp;la localizaci&amp;oacute;n del software a lo largo del&amp;nbsp;tiempo y se ha aclarado que en Windows Vista&amp;nbsp;y Windows 7 los binarios est&amp;aacute;n completamente separados&amp;nbsp;de las cadenas de texto, con las ventajas que esto conlleva. Esto implica tambi&amp;eacute;n que Vista/7 sean sistemas idependientes del idioma en el que se utilicen; el ingl&amp;eacute;s es un idioma como otro cualquiera.&lt;/p&gt;
&lt;p&gt;En un siguiente art&amp;iacute;culo se explicar&amp;aacute; en detalle en qu&amp;eacute; consiste exactamente un paquete de idiomas&amp;nbsp;y qu&amp;eacute; es lo que conforma la infraestructura MUI de Windows Vista/7. Se explicar&amp;aacute; tambi&amp;eacute;n c&amp;oacute;mo el sistema obtiene los recursos en el idioma establecido por el usuario. Este aspecto puede ser importante para la gente que le interese saber c&amp;oacute;mo solucionar problemas con Windows, pues me he encontrado con&amp;nbsp;alg&amp;uacute;n que otro sistema cuyo s&amp;iacute;ntoma es que una determinada aplicaci&amp;oacute;n no muestra ning&amp;uacute;n tipo de interfaz gr&amp;aacute;fica (es decir, no se abre)&amp;nbsp;y cuya causa es una configuraci&amp;oacute;n incorrecta de los recursos MUI de ese sistema.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1734902" width="1" height="1"&gt;</description><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><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Multilingual+User+Interface+_2800_MUI_2900_/default.aspx">Multilingual User Interface (MUI)</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>¿Cuándo crea Windows un punto de restauración automático?</title><link>http://msmvps.com/blogs/dmartin/archive/2009/09/17/191-cu-225-ndo-crea-Windows-un-punto-de-restauraci-243-n-autom-225-tico.aspx</link><pubDate>Fri, 18 Sep 2009 02:31:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1723151</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=1723151</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1723151</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/09/17/191-cu-225-ndo-crea-Windows-un-punto-de-restauraci-243-n-autom-225-tico.aspx#comments</comments><description>&lt;p&gt;Una de las dudas que m&amp;aacute;s surgen entre los usuarios de Restaurar sistema es cada cu&amp;aacute;nto tiempo se crear&amp;aacute; un punto de restauraci&amp;oacute;n autom&amp;aacute;tico. Este art&amp;iacute;culo pretende dar una respuesta precisa a esta cuesti&amp;oacute;n para as&amp;iacute; esclarecer aquellos casos en los que el sistema no haya creado un punto de restauraci&amp;oacute;n desde hace tiempo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows XP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En Windows XP cada hora una tarea interna del Programador de tareas se encarga de analizar si el sistema est&amp;aacute; inactivo, es decir, si no est&amp;aacute; haciendo uso de la CPU ni del subsistema de E/S. Si se diera el caso, se realizan dos posibles comprobaciones para determinar si se debe crear un punto de restauraci&amp;oacute;n autom&amp;aacute;tico:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si han pasado m&amp;aacute;s de 24 horas desde el &amp;uacute;ltimo punto de restauraci&amp;oacute;n, se crea uno autom&amp;aacute;ticamente. Este par&amp;aacute;metro (24 horas) es editable desde el Registro del sistema operativo, concretamente en la clave HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\SystemRestore, valor &lt;em&gt;RPGlobalInterval&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Si la sesi&amp;oacute;n actual de trabajo con el PC&amp;nbsp;est&amp;aacute; durando m&amp;aacute;s de X horas y el &amp;uacute;ltimo punto de restauraci&amp;oacute;n es m&amp;aacute;s antiguo, se crea un punto de restauraci&amp;oacute;n autom&amp;aacute;tico. Por defecto, esta configuraci&amp;oacute;n &lt;strong&gt;no est&amp;aacute; establecida&lt;/strong&gt;, pero puede hacerlo desde el Registro en la clave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore, valor &lt;em&gt;RPSessionInterval&lt;/em&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La comprobaci&amp;oacute;n de inactividad se realiza por defecto cada hora pero podr&amp;iacute;a variar dependiendo de los valores de ciertas pol&amp;iacute;ticas de energ&amp;iacute;a de su equipo. Eche un vistazo a los valores &lt;strong&gt;IdleTimeoutDc, IdleTimeoutAc&lt;/strong&gt; de esta p&amp;aacute;gina de MSDN:&lt;strong&gt; &lt;/strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa373239(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/aa373239(VS.85).aspx&lt;/a&gt;. Aprovechando la inactividad, Restaurar sistema realiza otras tareas, tales&amp;nbsp;como eliminar aquellos puntos de restauraci&amp;oacute;n cuyo tiempo de vida ya haya expirado, y de paso comprimir el almac&amp;eacute;n usando compresi&amp;oacute;n NTFS. Estas tareas se realizan solo si el equipo est&amp;aacute; conectado a la corriente el&amp;eacute;ctrica, para evitar que se agote la bater&amp;iacute;a en el caso de port&amp;aacute;tiles.&lt;/p&gt;
&lt;p&gt;Si quiere profundizar en el funcionamiento de la herramienta Restaurar sistema de Windows XP, eche un vistazo a esta serie de art&amp;iacute;culos de mi antiguo &lt;em&gt;blog&lt;/em&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rinconwindows.blogspot.com/2007/02/cmo-funciona-restaurar-sistema-parte-i.html"&gt;http://rinconwindows.blogspot.com/2007/02/cmo-funciona-restaurar-sistema-parte-i.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://rinconwindows.blogspot.com/2007/03/cmo-funciona-restaurar-sistema-parte-ii.html"&gt;http://rinconwindows.blogspot.com/2007/03/cmo-funciona-restaurar-sistema-parte-ii.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows Vista/7&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En Windows Vista/7 el nuevo Programador de tareas muestra informaci&amp;oacute;n detallada acerca de la tarea programada que crea un punto de restauraci&amp;oacute;n autom&amp;aacute;tico. Abra Programador de tareas, apartado \Microsoft\Windows\SystemRestore. La tarea &lt;em&gt;SR&lt;/em&gt; tiene como desencadenantes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El inicio del sistema.&lt;/li&gt;
&lt;li&gt;Diariamente a las 12 AM.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En esos instantes se ejecutar&amp;aacute; el comando %windir%\system32\rundll32.exe /d srrstr.dll,ExecuteScheduledSPPCreation.&lt;/p&gt;
&lt;p&gt;El modificador /d de Rundll32.exe ya lo trat&amp;eacute;&amp;nbsp;ligeramente &lt;a target="_blank" href="http://rinconwindows.blogspot.com/2007/10/sobre-el-mensaje-de-error-ha-ocurrido.html"&gt;en mi antiguo &lt;em&gt;blog&lt;/em&gt;&lt;/a&gt;: Se trata de un modificador que le dice a Rundll32.exe &amp;quot;ejecuta este comando y no captures las posibles excepciones que ocurran&amp;quot;. La funci&amp;oacute;n &lt;em&gt;ExecuteScheduledSPPCreation&lt;/em&gt; es la encargada de verificar si el punto de restauraci&amp;oacute;n m&amp;aacute;s antiguo tiene m&amp;aacute;s de 12 horas (la mitad que en el caso de XP) y, si as&amp;iacute; fuese, crear&amp;aacute; uno nuevo.&lt;/p&gt;
&lt;p&gt;Hay que tener en cuenta otras condiciones adicionales que puede observar en la pesta&amp;ntilde;a &lt;em&gt;Condiciones&lt;/em&gt;: El sistema debe estar inactivo durante al menos 10 minutos y adem&amp;aacute;s, en el caso de port&amp;aacute;tiles, debe estar conectado a la red el&amp;eacute;ctrica.&lt;/p&gt;
&lt;p&gt;Espero que este art&amp;iacute;culo haya aclarado sus dudas con respecto a la creaci&amp;oacute;n autom&amp;aacute;tica de puntos de restauraci&amp;oacute;n por parte de Windows. En resumen, si su sistema no genera periodicamente puntos de restauraci&amp;oacute;n puede deberse a:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El servicio Programador de tareas no est&amp;aacute; iniciado.&lt;/li&gt;
&lt;li&gt;El sistema no est&amp;aacute; inactivo durante los periodos de tiempo impuestos por Windows, seg&amp;uacute;n lo explicado anteriormente.&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1723151" width="1" height="1"&gt;</description><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></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>Tutorial sobre Windbg [Parte III]</title><link>http://msmvps.com/blogs/dmartin/archive/2009/08/13/tutorial-sobre-windbg-parte-iii.aspx</link><pubDate>Thu, 13 Aug 2009 21:44:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1715444</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=1715444</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1715444</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/08/13/tutorial-sobre-windbg-parte-iii.aspx#comments</comments><description>&lt;p&gt;En el anterior art&amp;iacute;culo vimos c&amp;oacute;mo abrir nuestra aplicaci&amp;oacute;n&amp;nbsp;en modo usuario dentro de&amp;nbsp;Windbg y comprendimos mejor qu&amp;eacute; es lo que ocurre cuando este se hace cargo de nuestra aplicaci&amp;oacute;n. Ahora tenemos a nuestra disposici&amp;oacute;n una ventana con salida de texto y una caja de entrada de comandos pero, &amp;iquest;qu&amp;eacute; podemos hacer?&lt;/p&gt;
&lt;p&gt;Es importante saber que podemos manejar la ventana de Windbg e introducir comandos en su caja de texto porque nuestra aplicaci&amp;oacute;n est&amp;aacute; detenida debido a la excepci&amp;oacute;n STATUS_BREAKPOINT que se recibe por defecto nada m&amp;aacute;s abrir la aplicaci&amp;oacute;n en Windbg. As&amp;iacute; pues, lo primero que buscamos es una forma de permitir que&amp;nbsp;nuestra aplicaci&amp;oacute;n&amp;nbsp;contin&amp;uacute;e con su ejecuci&amp;oacute;n. El comando &lt;strong&gt;g&lt;/strong&gt; (o presionar F5) consigue esto mismo. Este comando hace que la aplicaci&amp;oacute;n siga ejecut&amp;aacute;ndose hasta que se encuentre con alguna condici&amp;oacute;n de parada (posteriormente aprenderemos a configurar esto), o bien ocurra alg&amp;uacute;n tipo de excepci&amp;oacute;n (por ejemplo, la aplicaci&amp;oacute;n quiere acceder a una posici&amp;oacute;n de memoria incorrecta).&lt;/p&gt;
&lt;p&gt;El comando g admite alguna que otra variante. Si, por ejemplo, queremos que nuestra aplicaci&amp;oacute;n siga ejecut&amp;aacute;ndose hasta que se alcance una determinada&amp;nbsp;posici&amp;oacute;n de memoria, podemos usar la sintaxis &lt;strong&gt;g &lt;em&gt;&amp;lt;Direcci&amp;oacute;n&amp;gt;&lt;/em&gt;.&lt;/strong&gt; Por otra parte, si solo nos interesa que contin&amp;uacute;e la ejecuci&amp;oacute;n hasta que finalice la funci&amp;oacute;n en curso, podemos usar el comando &lt;strong&gt;gu&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&amp;iquest;C&amp;oacute;mo detener la ejecuci&amp;oacute;n de la aplicaci&amp;oacute;n en los momentos que nos interese?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Uno de los aspectos m&amp;aacute;s importantes en la depuraci&amp;oacute;n de aplicaciones es la creaci&amp;oacute;n de &lt;em&gt;breakpoints&lt;/em&gt;. Windbg nos proporciona los medios necesarios para crear todo tipo de &lt;em&gt;breakpoints&lt;/em&gt;, desde los m&amp;aacute;s sencillos hasta los m&amp;aacute;s imaginativos. Saber qu&amp;eacute; tipo de &lt;em&gt;breakpoint&lt;/em&gt; se debe usar en cada caso nos permitir&amp;aacute; ahorrar horas de trabajo infructuoso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Establecer &lt;em&gt;breakpoints&lt;/em&gt; en c&amp;oacute;digo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;El primer tipo de &lt;em&gt;breakpoints&lt;/em&gt; que voy a tratar son los cl&amp;aacute;sicos &lt;em&gt;breakpoints&lt;/em&gt; en c&amp;oacute;digo. Como su nombre indica, son &lt;em&gt;breakpoints&lt;/em&gt; que se alcanzan en una determinada direcci&amp;oacute;n de c&amp;oacute;digo (t&amp;iacute;picamente el inicio de una funci&amp;oacute;n, pero podr&amp;iacute;a ser cualquier otra cosa). El comando de Windbg para crear este tipo de &lt;em&gt;breakpoints&lt;/em&gt; es &lt;strong&gt;bp&lt;/strong&gt;. Este comando recibe como par&amp;aacute;metro la direcci&amp;oacute;n en la que queremos detener la ejecuci&amp;oacute;n del programa y, opcionalmente, algunas restricciones y comandos que se ejecuten autom&amp;aacute;ticamente cuando se llegue al &lt;em&gt;breakpoint&lt;/em&gt;. El abanico de restricciones que se pueden establecer conforma un amplio tipo de &lt;em&gt;breakpoints&lt;/em&gt; que se conocen como &lt;em&gt;breakpoints condicionales&lt;/em&gt;, que se tratar&amp;aacute;n m&amp;aacute;s adelante en este art&amp;iacute;culo. Por ejemplo, si introducimos el comando &lt;strong&gt;bp MiAplicacion!MiFuncion &amp;quot;kb&amp;quot;&lt;/strong&gt; y pulsamos INTRO, lo que va a ocurrir es que cuando reanudemos la ejecuci&amp;oacute;n de nuestra aplicaci&amp;oacute;n (con el comando g, como ya sabe) y se llegue a la funci&amp;oacute;n cuyo s&amp;iacute;mbolo es &lt;em&gt;MiAplicacion!MiFuncion&lt;/em&gt;, el depurador informar&amp;aacute; sobre esto y autom&amp;aacute;ticamente ejecutar&amp;aacute; el comando &lt;strong&gt;kb&lt;/strong&gt;, que como ver&amp;aacute; posteriormente, sirve para ver el estado de una estructura de datos muy importante para un proceso/hilo, la pila de ejecuci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Una cosa que quiz&amp;aacute; se pregunte es, &amp;iquest;c&amp;oacute;mo averiguar qu&amp;eacute; s&amp;iacute;mbolo de funci&amp;oacute;n me interesa? Una opci&amp;oacute;n de fuerza bruta consiste en mostrar en pantalla todos los s&amp;iacute;mbolos que cumplan con un determinado patr&amp;oacute;n y buscar aquella funci&amp;oacute;n que puede interesarnos. El comando &lt;strong&gt;x&lt;/strong&gt; consigue esto mismo. Por ejemplo, si quisiera mostrar los s&amp;iacute;mbolos de MiAplicacion que contuvieran la palabra &amp;quot;Window&amp;quot;, podr&amp;iacute;amos usar la sintaxis &lt;strong&gt;x MiAplicacion!*Window*&lt;/strong&gt;. Al pulsar INTRO, WIndbg buscar&amp;aacute; entre los s&amp;iacute;mbolos disponibles aquellos que coincidan con el patr&amp;oacute;n establecido y los mostrar&amp;aacute; en pantalla junto con sus correspondientes direcciones. Si bien esta aproximaci&amp;oacute;n de fuerza bruta es &amp;uacute;til en algunos casos, lo m&amp;aacute;s probable es que el s&amp;iacute;mbolo en el que quiera detener la ejecuci&amp;oacute;n del programa lo obtenga de los resultados que le proporcione Windbg al ejecutar otros comandos.&lt;/p&gt;
&lt;p&gt;Por supuesto, tambi&amp;eacute;n&amp;nbsp;podemos crear m&amp;uacute;ltiples &lt;em&gt;breakpoints&lt;/em&gt; sin necesidad de tener que&amp;nbsp;establecerlos uno a uno. Supongamos que nuestra aplicaci&amp;oacute;n tiene alg&amp;uacute;n problema a la hora de escribir ciertos archivos en el disco. Podr&amp;iacute;amos suponer que los s&amp;iacute;mbolos que m&amp;aacute;s nos interesa son los de aquellas funciones que contengan la palabra &amp;quot;Write&amp;quot;. Para agregar &lt;em&gt;breakpoints&lt;/em&gt; para todos y cada uno de los s&amp;iacute;mbolos que cumplan con este patr&amp;oacute;n, podemos usar el comando &lt;strong&gt;bm&lt;/strong&gt;, de la siguiente manera: &lt;strong&gt;bm MiAplicacion!*Write*&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si la aplicaci&amp;oacute;n que se est&amp;aacute; depurando tiene un cierto grado de complejidad, es bastante probable que haga uso de librer&amp;iacute;as din&amp;aacute;micas (DLL) cuya carga no se conoce de antemano y se produce en tiempo de ejecuci&amp;oacute;n. Por este motivo, si necesitara parar la ejecuci&amp;oacute;n en alguna funci&amp;oacute;n dentro de esas librer&amp;iacute;as din&amp;aacute;micas no le ser&amp;iacute;a posible, pues Windbg no conoce la direcci&amp;oacute;n de la funci&amp;oacute;n donde debe detenerse. A fin de cuentas, Windbg solo entiende de direcciones de memoria. Para dar soluci&amp;oacute;n a este problema, existe el comando &lt;strong&gt;bu&lt;/strong&gt;. Por ejemplo, si nuestra aplicaci&amp;oacute;n hiciera uso de una DLL para calcular los primeros d&amp;iacute;gitos decimales del n&amp;uacute;mero pi,&amp;nbsp;podemos&amp;nbsp;detener la ejecuci&amp;oacute;n en dicha funci&amp;oacute;n ejecutando el comando &lt;strong&gt;bu MiDLL!CalcularPI&lt;/strong&gt;. Una vez introducido el comando lo que ocurre es que Windbg sabe que justo en el momento en que el m&amp;oacute;dulo correspondiente a esa DLL (MiDLL)&amp;nbsp;se cargue en memoria (eche un vistazo al art&amp;iacute;culo anterior para obtener m&amp;aacute;s informaci&amp;oacute;n sobre la carga de m&amp;oacute;dulos), debe crear el correspondiente &lt;em&gt;breakpoint&lt;/em&gt;, ahora que sabe cu&amp;aacute;l es su direcci&amp;oacute;n de memoria.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Establecer &lt;em&gt;breakpoints&lt;/em&gt; por acceso a un dato&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En muchos casos vamos a necesitar parar la ejecuci&amp;oacute;n de nuestro programa no cuando se llegue a una porci&amp;oacute;n de c&amp;oacute;digo, sino cuando se acceda a un dato. El escenario t&amp;iacute;pico de esto es una aplicaci&amp;oacute;n que en apariencia sufre un &lt;em&gt;bug&lt;/em&gt; del tipo &lt;em&gt;buffer overrun&lt;/em&gt;. B&amp;aacute;sicamente este tipo de problemas implica que se sobreescriban posiciones de memoria contiguas a las de una porci&amp;oacute;n de datos del programa, por ejemplo un vector. En esta situaci&amp;oacute;n, quiz&amp;aacute; necesitemos indagar sobre todos y cada uno de los accesos que se produzcan hacia este vector. Podemos lograr esto ejecutando el comando &lt;strong&gt;ba w4 miVector&lt;/strong&gt;, suponiendo que el s&amp;iacute;mbolo &lt;em&gt;miVector&lt;/em&gt; sea el correspondiente al vector que queremos examinar. Por supuesto, podemos sustituir el s&amp;iacute;mbolo por una direcci&amp;oacute;n de memoria. &amp;iquest;Qu&amp;eacute; significa el &lt;strong&gt;w4&lt;/strong&gt; que aparece como primer par&amp;aacute;metro del comando ba? &amp;quot;W&amp;quot; indica que estamos buscando accesos de tipo escritura. Otras posibilidades son &amp;quot;E&amp;quot; (ejecuci&amp;oacute;n) y &amp;quot;R&amp;quot; (lectura). El &amp;quot;4&amp;quot; indica el n&amp;uacute;mero de bytes que queremos monitorizar. En las arquitecturas de 32 bits este valor puede ser 1, 2 &amp;oacute; 4. En las de 64 bits existe la posibilidad de establecer tambi&amp;eacute;n 8 bytes como tama&amp;ntilde;o.&lt;/p&gt;
&lt;p&gt;Como habr&amp;aacute; podido observar, la creaci&amp;oacute;n de &lt;em&gt;breakpoints&lt;/em&gt; es un aspecto complejo de Windbg. La capacidad m&amp;aacute;s interesante a mi juicio es la posibilidad de crear &lt;em&gt;breakpoints&lt;/em&gt; condicionales. Como vimos, para crear un &lt;em&gt;breakpoint&lt;/em&gt; se usa el comando &lt;strong&gt;bp&lt;/strong&gt;. Uno de los par&amp;aacute;metros de este comando va entrecomillado y representa una condici&amp;oacute;n adicional a la condici&amp;oacute;n est&amp;aacute;ndar (la llegada&amp;nbsp;a la correspondiente funci&amp;oacute;n). Incluso se puede omitir la funci&amp;oacute;n y dejar solamente la condici&amp;oacute;n. Supongamos que nuestro programa tiene una variable &lt;em&gt;Contador&lt;/em&gt; que va increment&amp;aacute;ndose cada vez que se itera en un bucle, por ejemplo. Quiz&amp;aacute; estemos interesados en parar la ejecuci&amp;oacute;n de nuestra aplicaci&amp;oacute;n cuando la variable Contador adquiera el valor 10, que sabemos que es el valor de finalizaci&amp;oacute;n del bucle. Para ello podr&amp;iacute;amos usar esta sintaxis:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;bp &amp;quot;.if (poi(Contador)==10) {.echo Fin de cuenta }&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Este comando establece un &lt;em&gt;breakpoint&lt;/em&gt; (bp) cuya condici&amp;oacute;n (.if) es que la variable &lt;em&gt;Contador&lt;/em&gt; sea igual al n&amp;uacute;mero 10. En tal caso, sacamos por pantalla (.echo) la cadena &amp;quot;Fin de cuenta&amp;quot;. El comando &lt;strong&gt;poi&lt;/strong&gt; se usa porque de no hacerlo, la variable &lt;em&gt;Contador&lt;/em&gt; ser&amp;iacute;a interpretada como una direcci&amp;oacute;n de memoria, y esto no es lo que queremos. Como queremos tener acceso al contenido de esa direcci&amp;oacute;n de memoria, los programadores de C que est&amp;eacute;n leyendo esto contestar&amp;aacute;n r&amp;aacute;pidamente que necesitamos &lt;em&gt;desreferenciar&lt;/em&gt; ese acceso. En C esto se hace con el operador&amp;nbsp;* y en Windbg con poi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C&amp;oacute;mo mostrar un listado de los &lt;em&gt;breakpoints&lt;/em&gt; que hemos a&amp;ntilde;adido&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Una vez que hayamos establecido los &lt;em&gt;breakpoints&lt;/em&gt; que necesitemos, es posible que queramos ver un listado de los mismos. Puede usar para ello el comando &lt;strong&gt;bl&lt;/strong&gt; o bien usar la interfaz gr&amp;aacute;fica de Windbg: Si pulsa F9, se abrir&amp;aacute; el cuadro de di&amp;aacute;logo &lt;em&gt;Breakpoints&lt;/em&gt;, desde el que podr&amp;aacute; ver un listado de los &lt;em&gt;breakpoints&lt;/em&gt; asociados a la sesi&amp;oacute;n de depuraci&amp;oacute;n actual y crear de manera m&amp;aacute;s o menos intuitiva otros nuevos. Mi consejo es usar siempre que sea posible&amp;nbsp;la propia consola de comandos de Windbg, pues suele ofrecer m&amp;aacute;s flexibilidad que la interfaz gr&amp;aacute;fica, pero comento esta posibilidad por si alguien se siente m&amp;aacute;s c&amp;oacute;modo/a usando cuadros de di&amp;aacute;logo.&lt;/p&gt;
&lt;p&gt;En este art&amp;iacute;culo hemos aprendido a crear &lt;em&gt;breakpoints&lt;/em&gt; b&amp;aacute;sicos y sencillos y otros no tan sencillos. Hemos visto tambi&amp;eacute;n que la potencia de los &lt;em&gt;breakpoints&amp;nbsp;reside &lt;/em&gt;en&lt;em&gt; &lt;/em&gt;los &lt;em&gt;breakpoints&lt;/em&gt; condicionales, pues el &amp;uacute;nico l&amp;iacute;mite pr&amp;aacute;cticamente es el de nuestra imaginaci&amp;oacute;n. La documentaci&amp;oacute;n de Windbg (F1)&amp;nbsp;ofrece informaci&amp;oacute;n m&amp;aacute;s detallada sobre cada uno de los comandos que he tratado aqu&amp;iacute;, pero espero esto que sirva como punto de partida para sacarle el mayor provecho posible a esta funcionalidad que nos proporciona el sistema operativo en conjunci&amp;oacute;n con Windbg. En los pr&amp;oacute;ximos art&amp;iacute;culos veremos comandos que nos permiten examinar el estado de la m&amp;aacute;quina. Para comprender mejor la salida de estos comandos, se explicar&amp;aacute;n tambi&amp;eacute;n algunos conceptos importantes de la estructura de un computador y del sistema operativo, como son el repertorio de registros, la pila de ejecuci&amp;oacute;n o el bloque de control de un proceso/hilo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1715444" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Windbg/default.aspx">Windbg</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>Mostrar una lista de puntos de restauración</title><link>http://msmvps.com/blogs/dmartin/archive/2009/07/23/mostrar-una-lista-de-puntos-de-restauraci-243-n.aspx</link><pubDate>Thu, 23 Jul 2009 12:54:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1706554</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=1706554</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1706554</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/07/23/mostrar-una-lista-de-puntos-de-restauraci-243-n.aspx#comments</comments><description>&lt;p&gt;Hace unos d&amp;iacute;as en un grupo de noticias que frecuento&amp;nbsp;un usuario que estaba utilizando &lt;a target="_blank" href="http://ekort.blogspot.com/2007/03/crear-un-listado-de-todos-los-puntos-de.html"&gt;este &lt;/a&gt;&lt;em&gt;&lt;a target="_blank" href="http://ekort.blogspot.com/2007/03/crear-un-listado-de-todos-los-puntos-de.html"&gt;script&lt;/a&gt; &lt;/em&gt;del MVP Enrique Cort&amp;eacute;s se preguntaba por qu&amp;eacute; en el fichero de resultados las horas de cada punto de restauraci&amp;oacute;n no coincid&amp;iacute;an con las mostradas en el calendario de Restaurar sistema. &lt;/p&gt;
&lt;p&gt;Esto se debe a que en la informaci&amp;oacute;n que se guarda en el almac&amp;eacute;n de puntos de restauraci&amp;oacute;n (y que es accedida por WMI en el &lt;em&gt;script&lt;/em&gt;) las fechas y horas tienen como huso horario +000 (GMT). As&amp;iacute; pues, modifiqu&amp;eacute; el &lt;em&gt;script&lt;/em&gt; para que las fechas se conviertan a la zona horaria del sistema en cuesti&amp;oacute;n y aprovech&amp;eacute; para mostrarlas en un formato m&amp;aacute;s legible. En principio el &lt;em&gt;script&lt;/em&gt; es&amp;nbsp;compatible con cualquier versi&amp;oacute;n a partir de XP, pero en Vista y&amp;nbsp;7 deber&amp;aacute; ejecutarlo con privilegios administrativos.&lt;/p&gt;
&lt;p&gt;Puede descargar el&amp;nbsp;&lt;em&gt;script&lt;/em&gt; modificado&amp;nbsp;desde &lt;a target="_blank" href="http://winvista.mvps.org/Tema.aspx?ID=418"&gt;esta p&amp;aacute;gina&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;iexcl;Que lo disfuten!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1706554" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consultas/default.aspx">Consultas</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/WMI/default.aspx">WMI</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Tips/default.aspx">Tips</category></item><item><title>ProcDump: Una herramienta muy útil</title><link>http://msmvps.com/blogs/dmartin/archive/2009/07/15/procdump-una-herramienta-muy-250-til.aspx</link><pubDate>Wed, 15 Jul 2009 13:29:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1701911</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=1701911</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1701911</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/07/15/procdump-una-herramienta-muy-250-til.aspx#comments</comments><description>&lt;p&gt;A principios de este mes Technet ha publicado una nueva utilidad que no deber&amp;iacute;a faltar en la &amp;laquo;caja de herramientas&amp;raquo; de toda persona que se enfrente a un problema con Windows. ProcDump es una herramienta que se adhiere a un proceso de la m&amp;aacute;quina y genera un volcado de memoria en el momento que se cumplan ciertas condiciones, como por ejemplo un alto consumo de CPU, una &lt;a target="_blank" href="http://rinconwindows.blogspot.com/2007/10/saba-que-vii.html"&gt;ventana que no responde&lt;/a&gt;, una &lt;a target="_blank" href="http://rinconwindows.blogspot.com/2008/02/qu-sucede-cuando-ocurre-una-excepcin-no.html"&gt;excepci&amp;oacute;n no manejada&lt;/a&gt;, etc. En este sentido se trata de una herramienta similar al &lt;em&gt;script&lt;/em&gt; &lt;a target="_blank" href="http://support.microsoft.com/kb/286350/es"&gt;ADPlus.vbs&lt;/a&gt;, aunque considero que ProcDump resulta m&amp;aacute;s intuitiva y algo m&amp;aacute;s sencilla de utilizar.&lt;/p&gt;
&lt;p&gt;Puede descargar la versi&amp;oacute;n 1.0 de ProcDump en &lt;a href="http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx"&gt;http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En alg&amp;uacute;n art&amp;iacute;culo posterior espero poder mostrar el uso de esta&amp;nbsp;vers&amp;aacute;til herramienta para resolver un problema real.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1701911" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Debugging/default.aspx">Debugging</category></item><item><title>¿/Savecred, /Savedcred, /Savedcreds...? Es lo mismo</title><link>http://msmvps.com/blogs/dmartin/archive/2009/07/02/191-savecred-savedcred-savedcreds-es-lo-mismo.aspx</link><pubDate>Thu, 02 Jul 2009 18:57:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1697592</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=1697592</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1697592</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/07/02/191-savecred-savedcred-savedcreds-es-lo-mismo.aspx#comments</comments><description>&lt;p&gt;Como quiz&amp;aacute; sepa, el comando Runas.exe de Windows XP y Windows Server 2003&amp;nbsp;sirve para ejecutar procesos en el contexto de otra cuenta de usuario. Los usuarios dom&amp;eacute;sticos normalmente lo usan para ejecutar un proceso como administrador desde una cuenta limitada. Echando un vistazo al listado de par&amp;aacute;metros de Runas.exe nos encontramos con uno que suele llamar la atenci&amp;oacute;n de bastante gente. Sirve para almacenar temporalmente en el administrador de credenciales (&lt;em&gt;Credential Manager&lt;/em&gt;) el usuario y contrase&amp;ntilde;a que va a ejecutar el programa. El atractivo de este par&amp;aacute;metro es que&amp;nbsp;no tendremos que introducir el nombre de usuario y contrase&amp;ntilde;a para ese programa durante la sesi&amp;oacute;n en curso. Sin embargo, no hay unanimidad con respecto al nombre del par&amp;aacute;metro (incluso la propia documentaci&amp;oacute;n del sistema operativo creo que presenta alguna inconsistencia al respecto): Unos lo llaman&lt;strong&gt; /savecred&lt;/strong&gt;, otros &lt;strong&gt;/savedcred&lt;/strong&gt;, otros&lt;strong&gt; /savedcreds&lt;/strong&gt;... Incluso en algunos sitios se indica que tienen sem&amp;aacute;ntica diferente. &lt;/p&gt;
&lt;p&gt;Nada m&amp;aacute;s lejos de la realidad. Runas.exe solo entiende el par&amp;aacute;metro &lt;strong&gt;/sa&lt;/strong&gt; (que contiene el m&amp;iacute;nimo n&amp;uacute;mero de letras que diferencian&lt;strong&gt; /savecred&lt;/strong&gt; de los&amp;nbsp;par&amp;aacute;metros&lt;strong&gt; /smartcard&lt;/strong&gt; y &lt;strong&gt;/showtrustlevels&lt;/strong&gt;); lo que venga despu&amp;eacute;s le es indiferente. Del mismo modo, en cuanto se encuentra con&lt;strong&gt; /p&lt;/strong&gt; supone el par&amp;aacute;metro &lt;strong&gt;/profile&lt;/strong&gt;; si se encuentra con&lt;strong&gt; /e&lt;/strong&gt; supone&lt;strong&gt; /env&lt;/strong&gt;, y as&amp;iacute; sucesivamente.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Por limitaciones del administrador de credenciales de XP Home Edition, el par&amp;aacute;metro&lt;strong&gt; /savecred&lt;/strong&gt; no es tenido en cuenta en esta versi&amp;oacute;n de Windows. Este art&amp;iacute;culo no es aplicable tampoco a Windows Vista, pues el comando Runas.exe en Windows Vista es bastante diferente del de XP y ser&amp;aacute; tema de un pr&amp;oacute;ximo art&amp;iacute;culo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1697592" width="1" height="1"&gt;</description><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></item><item><title>Mecanismos de protección de integridad en Windows 2000/XP/Vista y 7: Windows File Protection y Windows Resource Protection</title><link>http://msmvps.com/blogs/dmartin/archive/2009/06/07/windo.aspx</link><pubDate>Sun, 07 Jun 2009 16:36:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1694452</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=1694452</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1694452</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/06/07/windo.aspx#comments</comments><description>&lt;p&gt;Desde que sali&amp;oacute; a la luz Windows Vista, y ahora con las versiones preliminares de Windows 7, me he dado cuenta de que el n&amp;uacute;mero de problemas&amp;nbsp;cuya soluci&amp;oacute;n&amp;nbsp;implica el registro de una DLL (mediante el comando&lt;em&gt; regsvr32 nombreDLL&lt;/em&gt;) ha descendido notablemente en estos dos &amp;uacute;ltimos sistemas operativos. Una de las causas de esto, para m&amp;iacute;,&amp;nbsp;es la inclusi&amp;oacute;n de &lt;em&gt;Windows Resource Protection&lt;/em&gt; (WRP), mecanismo que garantiza la integridad de los componentes vitales del sistema operativo y que supone una tremenda mejora con respecto a &lt;em&gt;Windows File Protection&lt;/em&gt; (WFP), sistema de protecci&amp;oacute;n de archivos de sistema presente en Windows 2000 y XP.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Windows File Protection&lt;/em&gt; (WFP)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Windows 2000 y XP incorporaron una caracter&amp;iacute;stica denominada WFP (&lt;em&gt;Windows File Protection&lt;/em&gt;), encargada de proteger los archivos m&amp;aacute;s importantes del sistema operativo para evitar que sean modificados o eliminados.&lt;/p&gt;
&lt;p&gt;Su funcionamiento se basa en uno o varios hilos de tipo centinela residentes en el proceso Winlogon e implementados en la DLL Sfc_os.dll. Es decir,&amp;nbsp;estos hilos&amp;nbsp;est&amp;aacute;n al tanto de cualquier tipo de modificaci&amp;oacute;n que se realice sobre directorios del sistema (t&amp;iacute;picamente \System32 y \System32\drivers). Si hubiera cambiado alguna DLL de estos directorios, se&amp;nbsp;registra dicho suceso en una cola destinada a tal efecto. En ese momento se se&amp;ntilde;aliza un &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms686211(VS.85).aspx"&gt;evento&lt;/a&gt; que despierta a otro hilo encargado de realizar la verificaci&amp;oacute;n del correspondiente archivo y su recuperaci&amp;oacute;n&amp;nbsp;desde la cache (carpeta oculta&amp;nbsp;\WINDOWS\System32\dllcache). Si no estuviera en cache, se mostrar&amp;aacute; una interfaz al usuario inform&amp;aacute;ndole de tal situaci&amp;oacute;n e invit&amp;aacute;ndole a introducir el CD de Windows 2000/XP para intentar recuperar la versi&amp;oacute;n original del archivo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Windows Resource Protection&lt;/em&gt; (WRP)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;La llegada de Windows Vista&amp;nbsp;supuso&amp;nbsp;que la estructura interna del sistema operativo cambiara radicalmente. Ahora el sistema operativo&amp;nbsp;est&amp;aacute; formado por componentes,&amp;nbsp;claves de Registro, manifiestos XML y ficheros binarios,&amp;nbsp;entre otras cosas, por lo que la aproximaci&amp;oacute;n empleada en versiones anteriores de Windows ya no pod&amp;iacute;a seguir siendo v&amp;aacute;lida. Este aspecto puede ser interpretado como una ventaja, pues si se desarrolla un sistema de protecci&amp;oacute;n para cada uno de los componentes del sistema operativo, ya no solo estaremos protegiendo ejecutables y DLL, como en Windows 2000/XP, sino que estaremos protegiendo tambi&amp;eacute;n claves de Registro y otro tipo de recursos que son igualmente vitales para el correcto funcionamiento del equipo. Este sistema de protecci&amp;oacute;n recibi&amp;oacute; el nombre de &lt;em&gt;Windows Resource Protection&lt;/em&gt; (WRP).&lt;/p&gt;
&lt;p&gt;Cada uno de los componentes que conforman el sistema operativo Windows Vista/Windows 7 contiene un fichero denominado manifiesto. Un manifiesto es un fichero de tipo XML que contiene informaci&amp;oacute;n espec&amp;iacute;fica sobre el componente, es decir,&amp;nbsp;archivos que lo componen, archivos de los que depende, claves de Registro, privilegios con los que se ejecutar&amp;aacute; por defecto, idioma, etc. Uno de estos posibles par&amp;aacute;metros (etiquetas XML) es la protecci&amp;oacute;n del recurso en cuesti&amp;oacute;n, etiqueta &amp;lt;systemProtection&amp;gt;&amp;lt;/systemProtection&amp;gt;.&amp;nbsp;Existen distintos valores&amp;nbsp;posibles&amp;nbsp;para el par&amp;aacute;metro &lt;em&gt;behavior&lt;/em&gt; (comportamiento) de esa etiqueta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;readOnlyIgnoreWrites:&lt;/strong&gt; El recurso solo puede ser modificado por el sistema operativo, durante una instalaci&amp;oacute;n (servicio TrustedInstaller). Cualquier intento de escritura por parte de una aplicaci&amp;oacute;n ser&amp;aacute; descartado; es decir, se le informar&amp;aacute; de que la escritura se realiz&amp;oacute; con &amp;eacute;xito pero el fichero no se ver&amp;aacute; modificado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;readOnlyFailWrites:&lt;/strong&gt; El recurso solo puede ser modificado por el sistema operativo, durante una instalaci&amp;oacute;n (servicio TrustedInstaller). Cualquier intento de escritura por parte de una aplicaci&amp;oacute;n tendr&amp;aacute; como consecuencia que reciba un error.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OSOnlyIgnoreWrites:&lt;/strong&gt; Similar a readOnlyIgnoreWrites, pero las modificaciones las puede hacer cualquier componente del sistema operativo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OSOnlyFailWrites:&lt;/strong&gt; Similar a readOnlyFailWrites, pero las modificaciones las puede hacer cualquier componente del sistema operativo.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;applicationVirtualized:&lt;/strong&gt; Cualquier cambio que se haga sobre el recurso supondr&amp;aacute; que el sistema operativo cree una copia privada a la aplicaci&amp;oacute;n que lo ha modificado. El recurso global no se ve modificado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;userVirtualized:&lt;/strong&gt; Similar a applicationVirtualized pero la copia privada es por usuario, no por aplicaci&amp;oacute;n.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En el mismo fichero de manifiesto se indica tambi&amp;eacute;n qu&amp;eacute; descriptor de seguridad usar para dicho componente. Por ejemplo, la carpeta Winsxs de Windows Vista tiene este descriptor de seguridad:&lt;/p&gt;
&lt;li&gt;O:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464 &lt;/li&gt;
&lt;li&gt;G:S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464 &lt;/li&gt;
&lt;li&gt;D:PAI 
&lt;ul&gt;
&lt;li&gt;(A;OICI;FA;;;S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464) &lt;/li&gt;
&lt;li&gt;(A;OICI;0x1200a9;;;BA) &lt;/li&gt;
&lt;li&gt;(A;OICI;0x1200a9;;;SY) &lt;/li&gt;
&lt;li&gt;(A;OICI;0x1200a9;;;BU)&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;p&gt;Donde S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464 es el SID de TrustedInstaller, un servicio encargado de instalar actualizaciones y componentes en Windows Vista y Windows 7.&lt;/p&gt;
&lt;p&gt;Vamos a explicar un poco el descriptor de seguridad: Las dos primeras l&amp;iacute;neas indican que el propietario (O, de &lt;em&gt;owner&lt;/em&gt;) como el grupo (G, de &lt;em&gt;group&lt;/em&gt;) es TrustedInstaller. La l&amp;iacute;nea D:PAI quiere decir que el DACL es protegido (es decir,&amp;nbsp;que no hereda&amp;nbsp;listas de control de acceso&amp;nbsp;o ACL)&amp;nbsp;y adem&amp;aacute;s&amp;nbsp;se hereda autom&amp;aacute;ticamente. A continuaci&amp;oacute;n se indica que TrustedInstaller tiene acceso total al recurso (FA, de&lt;em&gt; full access&lt;/em&gt;); el grupo de administradores, sistema y usuario (BA, SY y BU, respectivamente) tienen acceso gen&amp;eacute;rico de lectura/escritura. As&amp;iacute; pues, ni siquiera un administrador podr&amp;aacute; modificar el contenido del directorio Winsxs. Tan solo TrustedInstaller, con motivo de la instalaci&amp;oacute;n/desinstalaci&amp;oacute;n de actualizaciones, Service Packs o componentes opcionales de Windows podr&amp;aacute; modificar ese directorio. &lt;/p&gt;
&lt;p&gt;Si quiere saber m&amp;aacute;s sobre ACL y DACL le recomiendo el libro&lt;em&gt; Windows Internals&lt;/em&gt;, escrito por Mark Russinovich y David Solomon,&amp;nbsp;ya sea en su cuarta o su quinta edici&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ve&amp;aacute;moslo con un ejemplo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Abriendo el fichero de manifiesto del componente Bloc de notas de Windows Vista podemos observar entre otras cosas&amp;nbsp;lo siguiente:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;&amp;lt;dependentAssembly&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;assemblyIdentity name=&amp;quot;Microsoft-Windows-Kernel32&amp;quot; version=&amp;quot;6.0.6001.18000&amp;quot; processorArchitecture=&amp;quot;x86&amp;quot; language=&amp;quot;neutral&amp;quot; buildType=&amp;quot;release&amp;quot; publicKeyToken=&amp;quot;31bf3856ad364e35&amp;quot; versionScope=&amp;quot;nonSxS&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/dependentAssembly&amp;gt;&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Aqu&amp;iacute; se hace referencia a que Bloc de notas depende del componente Microsoft-Windows-Kernel32 (que contiene entre otras cosas la DLL Kernel32.dll) para funcionar correctamente.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;&amp;lt;systemProtection xmlns=&amp;quot;urn:schemas-microsoft-com:asm.v3&amp;quot; behavior=&amp;quot;readOnlyFailWrites&amp;quot; perUserVirtualization=&amp;quot;Disabled&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Aqu&amp;iacute; se hace referencia a que cualquier intento de escritura sobre el componente Bloc de notas&amp;nbsp;dar&amp;aacute; como resultado un error y no se llevar&amp;aacute; a cabo la modificaci&amp;oacute;n. La virtualizaci&amp;oacute;n est&amp;aacute; desactivada, por tratarse de un componente de Windows.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;&amp;lt;shortCut arguments=&amp;quot;&amp;quot; destinationPath=&amp;quot;$(runtime.documentsSettings)\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Accessories&amp;quot; destinationName=&amp;quot;Notepad.lnk&amp;quot; targetPath=&amp;quot;$(runtime.system32)\notepad.exe&amp;quot; iconPath=&amp;quot;$(runtime.system32)\notepad.exe,0&amp;quot; windowStyle=&amp;quot;normal&amp;quot; workingDirectory=&amp;quot;%HOMEDRIVE%%HOMEPATH%&amp;quot; description=&amp;quot;@%SystemRoot%\system32\Shell32.dll,-22563&amp;quot; displayResource=&amp;quot;$(runtime.system32)\shell32.dll,22051&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Aqu&amp;iacute; se hace referencia a la configuraci&amp;oacute;n del acceso directo al bloc de notas que hay en el men&amp;uacute; Inicio.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;&amp;lt;registryKey keyName=&amp;quot;HKEY_CLASSES_ROOT\Applications\notepad.exe\shell\open\command&amp;quot; owner=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;registryValue name=&amp;quot;&amp;quot; valueType=&amp;quot;REG_EXPAND_SZ&amp;quot; value=&amp;quot;%SystemRoot%\system32\NOTEPAD.EXE %1&amp;quot; operationHint=&amp;quot;replace&amp;quot; owner=&amp;quot;true&amp;quot; /&amp;gt;&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Aqu&amp;iacute; se hace referencia a una de las claves de Registro gobernadas por Bloc de notas, la correspondiente a las asociaciones de ficheros.&lt;/p&gt;
&lt;p&gt;Como puede observar, la integridad del sistema operativo fue uno de los objetivos principales para Microsoft mientras dise&amp;ntilde;aba Windows Vista. La protecci&amp;oacute;n de todos y cada uno de los recursos vitales del sistema operativo mediante &lt;em&gt;Windows Resource Protection&lt;/em&gt; (WRP) hacen que Windows Vista&amp;nbsp;y Windows 7 sean sistemas mucho&amp;nbsp;m&amp;aacute;s estables y robustos que sus predecesores.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1694452" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Component-Based+Servicing+_2800_CBS_2900_/default.aspx">Component-Based Servicing (CBS)</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Funcionamiento/default.aspx">Funcionamiento</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>Tutorial sobre Windbg [Parte II]</title><link>http://msmvps.com/blogs/dmartin/archive/2009/05/15/tutorial-sobre-windbg-parte-ii.aspx</link><pubDate>Fri, 15 May 2009 19:21:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1692497</guid><dc:creator>dmartin</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1692497</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1692497</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2009/05/15/tutorial-sobre-windbg-parte-ii.aspx#comments</comments><description>&lt;p&gt;En la primera parte de esta serie de art&amp;iacute;culos aprendi&amp;oacute; a instalar Windbg y a configurar un aspecto b&amp;aacute;sico, los s&amp;iacute;mbolos de depuraci&amp;oacute;n. En este art&amp;iacute;culo veremos c&amp;oacute;mo configurar otros aspectos menores de Windbg, pero que le pueden resultar necesarios, y depuraremos la primera aplicaci&amp;oacute;n en modo usuario.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configurar la ruta de c&amp;oacute;digo fuente&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si est&amp;aacute; depurando una aplicaci&amp;oacute;n que no haya desarrollado, es probable que no disponga del c&amp;oacute;digo fuente de la misma; sin embargo, si estuviera depurando una aplicaci&amp;oacute;n de la que dispone el c&amp;oacute;digo fuente, es muy buena idea configurar Windbg para que sea capaz de&amp;nbsp;usar toda esa informaci&amp;oacute;n y&amp;nbsp;mostrar la ejecuci&amp;oacute;n paso a paso en formato de instrucciones de c&amp;oacute;digo fuente, no instrucciones m&amp;aacute;quina. Para configurar este aspecto, despliegue el men&amp;uacute; &lt;em&gt;File&lt;/em&gt;, &lt;em&gt;Source File Path&lt;/em&gt; (o pulse Ctrl+P). Tambi&amp;eacute;n puede usar el comando &lt;strong&gt;.srcpath &lt;em&gt;&amp;lt;Ruta_c&amp;oacute;digo_fuente&amp;gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Para que el depurador muestre instrucciones de c&amp;oacute;digo fuente y no instrucciones m&amp;aacute;quina es necesario adem&amp;aacute;s que los s&amp;iacute;mbolos de depuraci&amp;oacute;n contengan informaci&amp;oacute;n acerca del fichero fuente y n&amp;uacute;mero de l&amp;iacute;nea que se corresponde con un determinado s&amp;iacute;mbolo. Estos s&amp;iacute;mbolos, denominados normalmente s&amp;iacute;mbolos privados, no suelen estar a disposici&amp;oacute;n de los usuarios ajenos a la empresa creadora del software en cuesti&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Configurar la ruta de los m&amp;oacute;dulos&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En la mayor&amp;iacute;a de ocasiones, Windbg es capaz por s&amp;iacute; solo de encontrar las im&amp;aacute;genes de los ejecutables implicados en una sesi&amp;oacute;n de depuraci&amp;oacute;n. En determinados casos, como por ejemplo cuando se est&amp;aacute; depurando un volcado de memoria peque&amp;ntilde;o o &lt;em&gt;minidump&lt;/em&gt; (la depuraci&amp;oacute;n de volcados de memoria se tratar&amp;aacute; en un posterior art&amp;iacute;culo), es necesario indicarle al depurador d&amp;oacute;nde debe buscar los m&amp;oacute;dulos (.exe, .dll, .sys, etc.). Para ello, abra &lt;em&gt;File&lt;/em&gt;, &lt;em&gt;Image File Path&lt;/em&gt; (o pulse Ctrl+I). Como siempre, si desea lograr esto mediante un comando de Windbg, ejecute &lt;strong&gt;.exepath &lt;em&gt;&amp;lt;Ruta_ejecutables&amp;gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejecutar una aplicaci&amp;oacute;n dentro del depurador&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ya est&amp;aacute; en condiciones de depurar su primera aplicaci&amp;oacute;n en Windbg y para ello vamos a ejecutar la calculadora de Windows dentro de Windbg.&lt;/p&gt;
&lt;p&gt;Abra &lt;em&gt;File&lt;/em&gt;, &lt;em&gt;Open Executable&lt;/em&gt; (o pulse Ctrl+E) y busque el ejecutable Calc.exe dentro del directorio&amp;nbsp;\Windows\system32\. En este caso deje desmarcada la casilla &lt;em&gt;Debug child processes also&lt;/em&gt;, que sirve para depurar no solo el proceso principal que cree ese ejecutable sino sus procesos hijos tambi&amp;eacute;n. Haga clic sobre &lt;em&gt;Abrir&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;La pantalla de Windbg se rellenar&amp;aacute; con un texto similar al siguiente:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;Microsoft (R) Windows Debugger Version 6.11.0001.404 X86&lt;br /&gt;Copyright (c) Microsoft Corporation. All rights reserved.&lt;/p&gt;
&lt;p&gt;CommandLine: C:\WINDOWS\system32\calc.exe&lt;br /&gt;Symbol search path is: SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols&lt;br /&gt;Executable search path is: &lt;br /&gt;ModLoad: 01000000 0101f000&amp;nbsp;&amp;nbsp; calc.exe&lt;br /&gt;ModLoad: 7c910000 7c9c5000&amp;nbsp;&amp;nbsp; ntdll.dll&lt;br /&gt;ModLoad: 7c800000 7c903000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\kernel32.dll&lt;br /&gt;ModLoad: 7e6a0000 7eec1000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\SHELL32.dll&lt;br /&gt;ModLoad: 77da0000 77e4c000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\ADVAPI32.dll&lt;br /&gt;ModLoad: 77e50000 77ee2000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\RPCRT4.dll&lt;br /&gt;ModLoad: 77fc0000 77fd1000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\Secur32.dll&lt;br /&gt;ModLoad: 77ef0000 77f39000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\GDI32.dll&lt;br /&gt;ModLoad: 7e390000 7e421000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\USER32.dll&lt;br /&gt;ModLoad: 77be0000 77c38000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\msvcrt.dll&lt;br /&gt;ModLoad: 77f40000 77fb6000&amp;nbsp;&amp;nbsp; C:\WINDOWS\system32\SHLWAPI.dll&lt;br /&gt;(23c.24c): Break instruction exception - code 80000003 (first chance)&lt;br /&gt;eax=001a1eb4 ebx=7ffdb000 ecx=00000007 edx=00000080 esi=001a1f48 edi=001a1eb4&lt;br /&gt;eip=7c91120e esp=0007fb20 ebp=0007fc94 iopl=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nv up ei pl nz na po 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=00000202&lt;br /&gt;ntdll!DbgBreakPoint:&lt;br /&gt;7c91120e cc&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; int&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Analicemos detalladamente toda esta informaci&amp;oacute;n:&lt;/p&gt;
&lt;p&gt;La l&amp;iacute;nea &lt;em&gt;CommandLine&lt;/em&gt; nos est&amp;aacute; indicando el archivo que vamos a ejecutar dentro de Windbg, en este caso la calculadora de Windows. A continuaci&amp;oacute;n se muestra la ruta establecida para los s&amp;iacute;mbolos y la ruta de b&amp;uacute;squeda de m&amp;oacute;dulos ejecutables, que en este caso est&amp;aacute; vac&amp;iacute;a porque no la hemos establecido desde la opci&amp;oacute;n &lt;em&gt;File&lt;/em&gt;, &lt;em&gt;Image File Path&lt;/em&gt;. Seguidamente el depurador ha registrado informaci&amp;oacute;n sobre la carga de una serie de m&amp;oacute;dulos de los que depende la calculadora de Windows. Para ver las dependencias de un m&amp;oacute;dulo yo recomiendo usar la herramienta Dependency Walker (&lt;a href="http://www.dependencywalker.com/"&gt;http://www.dependencywalker.com/&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;La siguiente l&amp;iacute;nea, &lt;em&gt;(23c.24c): Break instruction exception - code 80000003 (first chance)&lt;/em&gt;, da pie a comentar bastantes cosas:&lt;/p&gt;
&lt;p&gt;La sintaxis (23c.24c) la va a encontrar no pocas veces en Windbg. Hace referencia a un hilo dentro de un proceso. 23c es el identificador de proceso (PID), en formato hexadecimal. En este caso es el PID del proceso Calc.exe. 24c hace referencia al identificador de hilo (TID), en formato hexadecimal tambi&amp;eacute;n. La excepci&amp;oacute;n recibida en este caso es &amp;quot;Break instruction&amp;quot; (STATUS_BREAKPOINT), identificada por el c&amp;oacute;digo hexadecimal 0x80000003. Vamos a ver qu&amp;eacute; ocurre &amp;quot;por lo bajo&amp;quot; para explicar por qu&amp;eacute; ha ocurrido esto:&lt;/p&gt;
&lt;p&gt;Cuando hemos seleccionado el ejecutable Calc.exe y hemos hecho clic sobre &lt;em&gt;Abrir&lt;/em&gt;, Windbg ha llamado a la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms682425.aspx"&gt;CreateProcess&lt;/a&gt; con el sexto par&amp;aacute;metro establecido a DEBUG_PROCESS. Esto permite crear un proceso e indicarle a Windows que deseamos depurarlo. Pero depurar un proceso requiere de algo m&amp;aacute;s. Requiere que el programa depurador reciba una serie de eventos procedentes de la ejecuci&amp;oacute;n de la aplicaci&amp;oacute;n y los muestre al usuario o los trate de manera conveniente. Lo que ocurre durante una sesi&amp;oacute;n de depuraci&amp;oacute;n se puede entender como un bucle en el cual el depurador espera eventos de depuraci&amp;oacute;n mediante la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms681423(VS.85).aspx"&gt;WaitForDebugEvent&lt;/a&gt;, los trata de manera conveniente, y continua la ejecuci&amp;oacute;n del programa mediante la API &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms679285(VS.85).aspx"&gt;ContinueDebugEvent&lt;/a&gt;. Este bucle&amp;nbsp;se repite indefinidamente hasta que o bien&amp;nbsp;la aplicaci&amp;oacute;n que est&amp;aacute; siendo depurada desaparece de la&amp;nbsp;memoria, o bien finaliza correctamente su ejecuci&amp;oacute;n, o bien desacoplamos el depurador mediante el comando &lt;em&gt;Debug&lt;/em&gt;, &lt;em&gt;Detach Debugee&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;La frase &lt;em&gt;(first chance)&lt;/em&gt; hace referencia al comportamiento de las excepciones. Cuando una aplicaci&amp;oacute;n genera una excepci&amp;oacute;n y est&amp;aacute; siendo depurada, el depurador recibe una excepci&amp;oacute;n de primera oportunidad (&lt;em&gt;first chance&lt;/em&gt;) y le da la opci&amp;oacute;n de tratarla. En este caso, el depurador trata la excepci&amp;oacute;n STATUS_BREAKPOINT deteniendo la ejecuci&amp;oacute;n de la aplicaci&amp;oacute;n permitiendo que el usuario introduzca comandos o examine el estado de la imagen de memoria del proceso&amp;nbsp;y el estado del procesador. Si el depurador no capturase la excepci&amp;oacute;n, se comprueba si el c&amp;oacute;digo de la aplicaci&amp;oacute;n la capturara. Este procedimiento implica verificar en la pila de ejecuci&amp;oacute;n si hay alg&amp;uacute;n c&amp;oacute;digo manejador de excepciones, desde el marco de activaci&amp;oacute;n m&amp;aacute;s reciente hasta&amp;nbsp;al m&amp;aacute;s antiguo. Este procedimiento recibe t&amp;eacute;cnicamente el nombre de &lt;em&gt;stack unwinding&lt;/em&gt;. No se preocupe, en posteriores art&amp;iacute;culos se va a tratar la estructura de datos conocida como pila, pues es de capital importancia a la hora de entender buena parte de la informaci&amp;oacute;n que nos proporcione Windbg. En caso de que el c&amp;oacute;digo no capturase la excepci&amp;oacute;n, se lanza al depurador una excepci&amp;oacute;n de segunda oportunidad (&lt;em&gt;second chance&lt;/em&gt;) y se vuelve a comprobar si el c&amp;oacute;digo captura la excepci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;Lo que aparece a continuaci&amp;oacute;n en la pantalla de Windbg es el estado de los registros del procesador. Para entender esta parte de la salida es necesario disponer de ciertos conocimientos espec&amp;iacute;ficos de la m&amp;aacute;quina que est&amp;aacute; siendo depurada. En este caso se trata de la arquitectura x86, por lo que la referencia obligada es este documento: &lt;a href="http://download.intel.com/design/PentiumII/manuals/24319102.PDF"&gt;http://download.intel.com/design/PentiumII/manuals/24319102.PDF&lt;/a&gt;. Cuando veamos algunos casos de estudio ver&amp;aacute; c&amp;oacute;mo aplicar la informaci&amp;oacute;n sobre los registros de la m&amp;aacute;quina a un caso real.&lt;/p&gt;
&lt;p&gt;Para finalizar&amp;nbsp;nos aparece la &amp;uacute;ltima instrucci&amp;oacute;n ejecutada en el procesador antes de que se pasara el control al depurador. En este caso se trata de una instrucci&amp;oacute;n dentro de&amp;nbsp;la funci&amp;oacute;n DbgBreakPoint&amp;nbsp;dentro del m&amp;oacute;dulo Ntdll.dll. La instrucci&amp;oacute;n en cuesti&amp;oacute;n es la instrucci&amp;oacute;n &lt;em&gt;int 3&lt;/em&gt;, identificada mediante el c&amp;oacute;digo hexadecimal CC. Esta instrucci&amp;oacute;n lanza una interrupci&amp;oacute;n software. El par&amp;aacute;metro 3 indica que ejecutaremos la posici&amp;oacute;n 3 del vector de interrupciones&amp;nbsp;y&amp;nbsp;b&amp;aacute;sicamente&amp;nbsp;se enviar&amp;aacute; la excepci&amp;oacute;n STATUS_BREAKPOINT al depurador, para que haga con ella lo que considere oportuno. La direcci&amp;oacute;n de memoria que contiene esa instrucci&amp;oacute;n es la 7c91120e (en este ejemplo particular).&lt;/p&gt;
&lt;p&gt;Para concluir, puede configurar Windbg para que no informe de ciertos eventos (tales como la finalizaci&amp;oacute;n de un proceso, la carga de una DLL, etc.). Para ello puede ir al men&amp;uacute; &lt;em&gt;Debug&lt;/em&gt;, &lt;em&gt;Event Filters&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img height="465" width="531" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/dmartin/Filtro_5F00_eventos.PNG" alt="Cuadro de di&amp;aacute;logo Event Filter" style="vertical-align:middle;" /&gt;&lt;/p&gt;
&lt;p&gt;Si desea hacer uso de la l&amp;iacute;nea de comandos de Windbg, el comando en cuesti&amp;oacute;n es &lt;strong&gt;sx&lt;/strong&gt; y sus derivados &lt;strong&gt;sxe&lt;/strong&gt;, &lt;strong&gt;sxd&lt;/strong&gt;, &lt;strong&gt;sxi&lt;/strong&gt;, &lt;strong&gt;sxn&lt;/strong&gt;. En la documentaci&amp;oacute;n de Windbg (&lt;em&gt;Help&lt;/em&gt;, &lt;em&gt;About&lt;/em&gt;) puede obtener informaci&amp;oacute;n adicional sobre el uso de estos comandos.&lt;/p&gt;
&lt;p&gt;En este art&amp;iacute;culo hemos aprendido a configurar Windbg para comenzar una sesi&amp;oacute;n de depuraci&amp;oacute;n&amp;nbsp;y hemos ejecutado nuestra primera aplicaci&amp;oacute;n dentro del depurador. Tambi&amp;eacute;n hemos aprendido qu&amp;eacute; quiere decir la informaci&amp;oacute;n que aparece en pantalla y en qu&amp;eacute; consiste &amp;quot;por lo bajo&amp;quot; la depuraci&amp;oacute;n de aplicaciones y el manejo de excepciones. En la siguiente parte veremos algunos comandos para examinar el estado de la m&amp;aacute;quina y del proceso que est&amp;aacute; siendo depurado. Se detallar&amp;aacute;n tambi&amp;eacute;n algunos aspectos de la arquitectura interna de Windows que son importantes para saber realmente lo que est&amp;aacute; pasando.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1692497" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Windbg/default.aspx">Windbg</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Debugging/default.aspx">Debugging</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></channel></rss>