<?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 : Consejos</title><link>http://msmvps.com/blogs/dmartin/archive/tags/Consejos/default.aspx</link><description>Tags: Consejos</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><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>"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>Nunca elimine el contenido del repositorio WMI al intentar solucionar un problema</title><link>http://msmvps.com/blogs/dmartin/archive/2008/08/30/nunca-elimine-el-contenido-del-repositorio-wmi-al-intentar-solucionar-un-problema.aspx</link><pubDate>Sat, 30 Aug 2008 15:25:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1646280</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=1646280</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1646280</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2008/08/30/nunca-elimine-el-contenido-del-repositorio-wmi-al-intentar-solucionar-un-problema.aspx#comments</comments><description>&lt;p&gt;En diversos foros y p&amp;aacute;ginas web veo que hay mucha gente que, para intentar solucionar un problema con el componente WMI (&lt;em&gt;Windows Management Instrumentation&lt;/em&gt;) del sistema operativo, lo que hacen es&amp;nbsp;detener el correspondiente servicio y a continuaci&amp;oacute;n eliminan el contenido del repositorio (%windir%\system32\wbem\repository). Mi consejo es que *nunca* se haga esto como primer paso de la resoluci&amp;oacute;n de uno de estos problemas, por dos motivos principales:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Hay contenido del repositorio que no se renueva al reiniciar el servicio. (Este es el motivo principal).&lt;/li&gt;
&lt;li&gt;Es posible que el fallo no se encuentre en el repositorio WMI.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lo&amp;nbsp;que recomiendo en estos casos es utilizar la herramienta WMI Diagnosis Utility&amp;nbsp;(&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=d7ba3cd6-18d1-4d05-b11e-4c64192ae97d&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=d7ba3cd6-18d1-4d05-b11e-4c64192ae97d&amp;amp;displaylang=en&lt;/a&gt;), que solucionar&amp;aacute; autom&amp;aacute;ticamente ciertos problemas relacionados con el servicio WMI. Obviamente, esta herramienta no puede solucionar autom&amp;aacute;ticamente todos los casos, pero dejar&amp;aacute; un fichero de reporte que puede ser examinado por un profesional de soporte para dar&amp;nbsp;con la causa del problema.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1646280" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Consejos/default.aspx">Consejos</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/WMI/default.aspx">WMI</category></item></channel></rss>