[C con Clase] consulta sobre argumentos/parametros

Steven Davidson srd4121 en njit.edu
Sab Jul 26 08:02:19 CEST 2008


Hola David,

David fire wrote:
> gracias por la respuesta es para win32 para linux es mil veces mas
> facil. para windows XP y windows vista hay algun modo de conseguir
> los argumentos sin inyectar codigo algo menos "hacking"?

Supongo que con "argumentos" te refieres a la cadena de caracteres que 
se puede pasar a modo de opciones de configuración a un fichero 
ejecutable. Típicamente, estos argumentos se pueden recoger desde 'main()'.

Bajo el API de MS-Windows, podemos usar 'GetCommandLine()', pero claro 
está esta función sólo nos sirve si se invoca desde el proceso que 
queremos. Como estamos en otro proceso, la función anterior no nos sirve.

La solución que he encontrado es usando la función 
'NtQueryInformationProcess()' que está en "ntdll.dll". Según la 
documentación, esta función no tiene biblioteca de importación y por 
tanto aconseja obtenerla explícitamente usando 'LoadLibrary()' y 
'GetProcAddress()'. El prototipo es:

NTSTATUS WINAPI NtQueryInformationProcess(
   HANDLE ProcessHandle,
   PROCESSINFOCLASS ProcessInformationClass,
   PVOID ProcessInformation,
   ULONG ProcessInformationLength,
   PULONG ReturnLength
);

Puedes consultar la documentación en MSDN yendo a: 
http://msdn.microsoft.com/en-us/library/ms684280(VS.85).aspx

La información que nos interesa es la estructura que obtendremos en 
'ProcessInformation' que se llama 'PROCESS_BASIC_INFORMATION'. Dentro de 
esta estructura hay otra del tipo 'PPEB' que es un puntero a 'PEB'. Esta 
estructura contendrá bastante información. Dentro de esta estructura 
encontrarás otra estructura del tipo 'RTL_USER_PROCESS_PARAMETERS'. Aquí 
obtendrás la información que requieres en el campo 'CommandLine'.


Sinceramente, no lo he comprobado, pero espero que esto te oriente en la 
dirección correcta.

Steven





Más información sobre la lista de distribución Cconclase