Pregunta

¿Podría alguien ayudarme? No sé por qué la función ReadProcessMemory falla y getLasterror = 299. Aquí está mi código, no puedo ver que estoy haciendo nada malo.

if(ReadProcessMemory(hProcess, (void*)0, IDH_Buffer, sizeof(IMAGE_DOS_HEADER), 0) != true)
        std::cout << "Failed to read from Process, GLE=" << GetLastError()  << "\n";

Se ha asignado IDH_BUFFER, HProcess no es nulo

Mi aplicación se ejecuta como administrador y la aplicación de la que estoy tratando de leer es una aplicación estándar de USERMode.

Por favor, ¿podría aconsejarme? Gracias

¿Fue útil?

Solución

Cotizando de MSDN en los códigos de error WIN32:

ERROR_PARTIA_COPY
299 (0x12b)
Solo se completó parte de una solicitud de lectura de Memoria o WriteProcessMemory.

Supongo que la dirección que especificó contenía algunos datos válidos, pero en algún lugar entre esa dirección y (dirección + longitud de copia), no se asignó memoria.

Ver Wikipedia en la mesa de la página o memoria virtual Comprender un poco más sobre cómo un sistema operativo establece un espacio de direcciones. En ese lenguaje, en algún lugar de ese rango de memoria había una entrada de tabla de páginas que no era válida.

En realidad, mirando su código ... es obvio que esto no funcionará. los BaseAddress El parámetro es cero. Estás tratando de desreferencia un puntero nulo en el espacio de direcciones del otro proceso. Si el proceso objetivo en sí mismo intentara tirar de esto, se bloquearía. :-) El encabezado del exe no está asignado para abordar 0. Si está intentando leer desde el archivo EXE en sí, sugeriría simplemente llamar CreateFile en un camino obtenido por GetModuleFileNameEx.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top