2010-02-23 9 views
8

Tengo una buena pregunta aquí.¿Por qué renombrar reg.exe en Windows Server 2008 x64 hace que no se ejecute?

Hay una utilidad llamada reg.exe que se ha enviado con Windows desde hace bastante tiempo. Es muy útil para importar archivos .reg desde scripts, modificar valores de scripts, etc., etc. Por lo tanto, al hacer una copia para un guión ("¿Por qué no usar la copia en system32?" -> Políticas de restricción de software, prefijo personal , etc) me di cuenta de que el cambio de nombre que hace que falle en silencio:

Windows Server 2008 x64:

Microsoft Windows [Version 6.0.6001] 
Copyright (c) 2006 Microsoft Corporation. All rights reserved. 

C:\Windows\system32>reg.exe 
ERROR: Invalid syntax. 
Type "REG /?" for usage. 

C:\Windows\system32>copy reg.exe reg2.exe 
     1 file(s) copied. 

C:\Windows\system32>reg2.exe 

C:\Windows\system32>reg2.exe /? 


C:\Windows\system32>reg.exe /? 

REG Operation [Parameter List] 

    Operation [ QUERY | ADD | DELETE | COPY | 
       SAVE | LOAD | UNLOAD | RESTORE | 
       COMPARE | EXPORT | IMPORT | FLAGS ] 

Return Code: (Except for REG COMPARE) 

    0 - Successful 
    1 - Failed 

For help on a specific operation type: 

    REG Operation /? 

Examples: 

    REG QUERY /? 
    REG ADD /? 
    REG DELETE /? 
    REG COPY /? 
    REG SAVE /? 
    REG RESTORE /? 
    REG LOAD /? 
    REG UNLOAD /? 
    REG COMPARE /? 
    REG EXPORT /? 
    REG IMPORT /? 
    REG FLAGS /? 

C:\Windows\system32> 

Pero con Windows XP x86:

Microsoft Windows XP [Version 5.1.2600] 
(C) Copyright 1985-2001 Microsoft Corp. 

C:\Documents and Settings\chris>cd \WINDOWS\system32 

C:\WINDOWS\system32>reg.exe 

Console Registry Tool for Windows - version 3.0 
Copyright (C) Microsoft Corp. 1981-2001. All rights reserved 


REG Operation [Parameter List] 

    Operation [ QUERY | ADD | DELETE | COPY | 
       SAVE | LOAD | UNLOAD | RESTORE | 
       COMPARE | EXPORT | IMPORT ] 

Return Code: (Except of REG COMPARE) 

    0 - Succussful 
    1 - Failed 

For help on a specific operation type: 

    REG Operation /? 

Examples: 

    REG QUERY /? 
    REG ADD /? 
    REG DELETE /? 
    REG COPY /? 
    REG SAVE /? 
    REG RESTORE /? 
    REG LOAD /? 
    REG UNLOAD /? 
    REG COMPARE /? 
    REG EXPORT /? 
    REG IMPORT /? 

C:\WINDOWS\system32>copy reg.exe reg2.exe 
     1 file(s) copied. 

C:\WINDOWS\system32>reg2.exe 

Console Registry Tool for Windows - version 3.0 
Copyright (C) Microsoft Corp. 1981-2001. All rights reserved 


REG Operation [Parameter List] 

    Operation [ QUERY | ADD | DELETE | COPY | 
       SAVE | LOAD | UNLOAD | RESTORE | 
       COMPARE | EXPORT | IMPORT ] 

Return Code: (Except of REG COMPARE) 

    0 - Succussful 
    1 - Failed 

For help on a specific operation type: 

    REG Operation /? 

Examples: 

    REG QUERY /? 
    REG ADD /? 
    REG DELETE /? 
    REG COPY /? 
    REG SAVE /? 
    REG RESTORE /? 
    REG LOAD /? 
    REG UNLOAD /? 
    REG COMPARE /? 
    REG EXPORT /? 
    REG IMPORT /? 

C:\WINDOWS\system32> 

WinDBG parece decirme que el CRT lo está matando:

Child-SP   RetAddr   Call Site 
00000000`0016f798 00000000`779d2f8b ntdll!ZwTerminateProcess+0xa 
00000000`0016f7a0 000007fe`fe97d832 ntdll!RtlExitUserProcess+0x8b 
00000000`0016f7d0 00000000`ffe7f710 msvcrt!cinit+0x13b 
00000000`0016f810 00000000`778a495d reg!DynArrayGetItemType2+0x1fc 
00000000`0016f850 00000000`779d8791 kernel32!BaseThreadInitThunk+0xd 
00000000`0016f880 00000000`00000000 ntdll!RtlUserThreadStart+0x1d 

Pero como no tengo demasiada experiencia con WinDbg (y esta es de 64 bits, por ejemplo, Ollydbg falla), estoy algo perdido aquí. Gracias por cualquier información que ustedes tengan.

Editar

Gracias a la ayuda de CyberShadow y un poco de google, he encontrado la solución: busca .MUI (que es la traducción) en una subcarpeta del idioma actual instalada.

Microsoft Windows [Version 6.0.6001] 
Copyright (c) 2006 Microsoft Corporation. All rights reserved. 

C:\Windows\system32>cd en-US 

C:\Windows\System32\en-US>copy reg.exe.mui reg2.exe.mui 
     1 file(s) copied. 

C:\Windows\System32\en-US>cd .. 

C:\Windows\System32>reg2 
ERROR: Invalid syntax. 
Type "REG /?" for usage. 

C:\Windows\System32>del en-US\reg2.exe.mui 

C:\Windows\System32>reg2 

C:\Windows\System32> 
+0

Veo lo mismo en Win7 x64. Copiar reg.exe en otro directorio falla de la misma manera. Parece una verificación de seguridad para asegurarse de que está ejecutando exactamente "reg.exe" desde el directorio del sistema. – karoberts

Respuesta

2

Al jugar un poco con un depurador, encontré que LoadString (que se usa para obtener el uso y los mensajes de error) devuelve ERROR_MUI_FILE_NOT_LOADED. Creo que un poco lo explica :)

Notas:

  • Eso Seguimiento de la pila parece ser engañosa (o al menos que estamos viendo diferentes problemas con el mismo efecto). La aplicación sale normalmente sin imprimir nada cuando se copia/renombra.
  • Además de no poder mostrar los mensajes, la utilidad continúa funcionando bien.
  • Esto también afecta a la versión de 32 bits (que puede encontrar en SysWOW64).
+0

Gracias por la información, pensé que era algo así de tonto. ¿Alguna idea de cómo volver a asociar el archivo MUI con la copia renombrada? Mientras el ejecutable siga adelante y lo haga, es bueno saberlo. ¡Gracias por tu ayuda! – NoName

+0

Gracias de nuevo, encontré el MUI que quería.Me doy cuenta de que el seguimiento de la pila que publiqué fue después de la salida del proceso; tiene sentido que, una vez hecho todo, llame a ExitProcess. Perdón por el rastro engañoso. Actualizó la pregunta con la solución. – NoName

+1

Ah sí, eso lo haría. Encuentra reg.exe.mui y renómbralo también, y todo funcionará. –

0

conjetura salvaje aquí, pero algunas aplicaciones utilizan el nombre de la aplicación para determinar lo que debe hacer - esto es un viejo truco de UNIX; por ejemplo, /bin/false y /bin/true son binarios idénticos, pero el nombre determina qué resultado devolver.

Hace esto cuando termina escribiendo 2+ programas que son 99,9% idénticos, y no desea mantener bases de código separadas para cada uno.

+1

Pensé que podría ser esto, pero no pensé que MS lo haría (y parece que no lo han hecho, vea la respuesta de CyberShadow) – NoName

Cuestiones relacionadas