[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