Problema copiandose a si mismo a system32

Iniciado por Dryken, 18 Agosto 2012, 18:20 PM

0 Miembros y 1 Visitante están viendo este tema.

Dryken

Pretendo que al ejecutar el programa, éste se autocopie a la ruta system32, detectando por sí mismo en que ruta se ha ejecutado.

El código a simple vista parece que funciona, lo llamas copiar.exe y debería de copiarse pero surge un problema a la hora de ejecutarse.

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <windows.h>
main(){

char path[256];
char nombre[60]="copiar";
char* ruta=getenv("windir"); //obtiene la ruta de la instalacion de windows

strcat(ruta,"\\System32\\"); //agrega System32 a la ruta
strcat(nombre,".exe"); //agrega .exe a wnws
strcat(ruta,nombre); //agrega wnws.exe a C:\WINDOWS\System32
HMODULE exe = GetModuleHandle(0); //nos retornara un handle al archivo usado para crear el proceso de llamada
GetModuleFileName(exe, path, 256); //obtien la ruta de si mismo
CopyFile(path,ruta,false); //se copia a la carpeta System32
}
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

burbu_1

tal vez sea por los permisos.... has probado a ejecutarlo como administrador, para copiar archivos en esa ruta necesitar serlo...  :P

y otra cosilla, según  la info de la msdn para el primer parámetro de GetModuleFileName
Citar
If this parameter is NULL, GetModuleFileName retrieves the path of the executable file of the current process.
por lo que puedes sustituir

HMODULE exe = GetModuleHandle(0); //nos retornara un handle al archivo usado para crear el proceso de llamada
GetModuleFileName(exe, path, 256); //obtien la ruta de si mismo

por

GetModuleFileName(0, path, 256); //obtien la ruta de si mismo

Dryken

Compañero he probado a ejecutarlo como administrador para ver si así permite copiarlo en la ruta pero no funciona, dudo que ese sea el problema para que vaya.

También he probado a sustituirlo por el GetModuleFileName que me has pasado, es verdad que a apariencia debería de ir pero no es así, debería de ser otra cosa u haber otra solución.
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

Eternal Idol

Depuralo, si GetLastError es 5 entonces es ACCESS_DENIED: ejecutalo como administrador correctamente. Otra cosa es que no deberias tratar a la cadena devuelta por getenv como si fuera un buffer propio, reserva memoria suficiente (estatica o dinamica, da igual).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón