Necesito usarlo con una dirección fija, me da igual cual pero es necesario que sea fija. En la documentación de la MSDN dice que es perfectamente posible, y ese parámetro no tendría sentido si no fuera así, pero buscando no encuentro más que gente con el mismo problema e hilos a los que no se llega a una solución. Si esa memoria está reservada, el proceso no la está utilizando aparentemente para nada, intente hacer VirtualFree pero sigue sin funcionar
.
Al ejecutar VirtualQuery VirtualAlloc falla siempre, incluso cuando ésta me devuelve MEM_FREE
.
Saludos
Edito:
Hice ésto para ver si me quedaba algo más claro que pasaba, pero sólo logró confundirme más
:
.Al ejecutar VirtualQuery VirtualAlloc falla siempre, incluso cuando ésta me devuelve MEM_FREE
.Saludos
Edito:
Hice ésto para ver si me quedaba algo más claro que pasaba, pero sólo logró confundirme más
:Código (c) [Seleccionar]
#pragma comment(linker,"/NODEFAULTLIB")
#pragma comment(linker,"/ENTRY:main")
#include <Windows.h>
int main()
{
MEMORY_BASIC_INFORMATION Buffer;
VirtualQuery((LPVOID)0x00400000,&Buffer,sizeof(MEMORY_BASIC_INFORMATION));
switch(Buffer.State)
{
case MEM_COMMIT:
MessageBoxA(0,"MEM_COMMIT","Info",MB_ICONINFORMATION);
if(!VirtualFree((LPVOID)0x00400000,0x1000,MEM_DECOMMIT))
{
MessageBoxA(0,"Error al desencomendar memoria",0,MB_ICONERROR);
}
else
{
MessageBoxA(0,"Memoria Desencomendada","Info",MB_ICONINFORMATION);
if(!VirtualFree((LPVOID)0x00400000,0,MEM_RELEASE))
{
MessageBoxA(0,"Error liberar memoria",0,MB_ICONERROR);
}
else
{
MessageBoxA(0,"Memoria Reservada Liberada","Info",MB_ICONINFORMATION);
}
}
break;
case MEM_RESERVE:
MessageBoxA(0,"MEM_RESERVE","Info",MB_ICONINFORMATION);
if(!VirtualFree((LPVOID)0x00400000,0,MEM_RELEASE))
{
MessageBoxA(0,"Error liberar memoria",0,MB_ICONERROR);
}
else
{
MessageBoxA(0,"Memoria Reservada Liberada","Info",MB_ICONINFORMATION);
}
break;
case MEM_FREE:
MessageBoxA(0,"Memoria Libre","Info",MB_ICONINFORMATION);
break;
}
if(!VirtualAlloc((LPVOID)0x00400000,0x1000,MEM_RESERVE|MEM_COMMIT,PAGE_EXECUTE_READWRITE))
{
MessageBoxA(0,"Error al reservar memoria en 0x00400000",0,MB_ICONERROR);
return 0;
}
MessageBoxA(0,"Memoria Reservada correctamente en 0x00400000","Éxito",MB_ICONINFORMATION);
return 0;
}

.
Interesante propuesta, me pongo a ello
.