NtQueryInformationProcess parece devolver una línea de comando incorrecta

Estoy utilizando NtQueryInformationProcess () para recuperar la línea de comando de otro proceso (a través de la RTL_USER_PROCESS_PARAMETERS en el PEB devuelto por NtQueryInformationProcess()) en Windows 7.

Por lo general, esto funciona bien, pero cuando se inician varias instancias del mismo ejecutable, la cadena de la línea de comando es la misma para todas las instancias: siempre es la línea de comando de la primera instancia que se inició. Sin embargo, GetCommandLine() devuelve la línea de comando correcta para cada proceso.

¿Alguien puede confirmar o falsear esto?

preguntado el 22 de mayo de 12 a las 16:05

1 Respuestas

Lo que probablemente se esté perdiendo es que cada puntero en PEB solo es relevante en el espacio de direcciones del proceso de PEB en lugar del proceso que llamó a NtQueryInformationProcess y recuperó el PEB. Tienes que usar ReadProcessMemory para diferenciar los punteros. De lo contrario, dado que es probable que los procesos se diseñen de manera similar, terminará leyendo la línea de comando de la persona que llama a NtQueryInformationProcess y no la del proceso de PEB.

Puedo confirmar que al usar NtQueryInformationProcess y ReadProcessMemory para cada nivel de direccionamiento indirecto del puntero, puede obtener líneas de comando de todos los procesos correctamente. Ver https://stackoverflow.com/a/13408150/1236546 para el ejemplo de código fuente.

contestado el 23 de mayo de 17 a las 13:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.