lior654
November 7th, 2003, 10:40 AM
Whats wrong with this code:
I'm getting 299 error in ReadProcessMemory.
#include <windows.h>
#include <stdio.h>
//Give this program debugging priledges
bool AdjustPrivileges();
int main(int argc, char* argv[])
{
HANDLE hProcess;
LPVOID lpBuffer;
long lBufferSize;
DWORD dwBytesRead;
LPVOID lpMem = 0;
DWORD dwIndex = 0;
SYSTEM_INFO si;
MEMORY_BASIC_INFORMATION mbi;
DWORD dwOffset = 0;
LPVOID lpAddress;
int n = 97;
if( !AdjustPrivileges() ){
printf("Can't adjust priveldges!");
return 1;
}
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId() );
if( hProcess == NULL ){
printf("OpenProcess() Failure!");
return 1;
}
GetSystemInfo(&si);
while( lpMem < si.lpMaximumApplicationAddress )
{
VirtualQueryEx( hProcess, lpMem, &mbi, sizeof(MEMORY_BASIC_INFORMATION) );
dwOffset = lBufferSize * mbi.RegionSize;
//lpAddress = (LPVOID)((DWORD)mbi.BaseAddress + dwOffset);
if( ReadProcessMemory( hProcess, mbi.BaseAddress/*lpAddress*/,
lpBuffer, lBufferSize, &dwBytesRead ) == FALSE )
{
printf("Failure 'ReadProcessMemory': %d", GetLastError());
return 1;
}
// increment lpMem to next region of memory
lpMem = (LPVOID)( (DWORD)mbi.BaseAddress + (DWORD)mbi.RegionSize );
}
return 0;
}
bool AdjustPrivileges()
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
TOKEN_PRIVILEGES oldtp;
DWORD dwSize = sizeof(TOKEN_PRIVILEGES);
LUID luid;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED ) return true;
return false;
}
if( !LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid) )
{
CloseHandle(hToken);
return false;
}
ZeroMemory(&tp, sizeof(tp));
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Adjust Token Privileges
if( !AdjustTokenPrivileges (hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize) )
{
CloseHandle(hToken);
return false;
}
// close handles
CloseHandle( hToken );
return true;
}
I'm getting 299 error in ReadProcessMemory.
#include <windows.h>
#include <stdio.h>
//Give this program debugging priledges
bool AdjustPrivileges();
int main(int argc, char* argv[])
{
HANDLE hProcess;
LPVOID lpBuffer;
long lBufferSize;
DWORD dwBytesRead;
LPVOID lpMem = 0;
DWORD dwIndex = 0;
SYSTEM_INFO si;
MEMORY_BASIC_INFORMATION mbi;
DWORD dwOffset = 0;
LPVOID lpAddress;
int n = 97;
if( !AdjustPrivileges() ){
printf("Can't adjust priveldges!");
return 1;
}
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId() );
if( hProcess == NULL ){
printf("OpenProcess() Failure!");
return 1;
}
GetSystemInfo(&si);
while( lpMem < si.lpMaximumApplicationAddress )
{
VirtualQueryEx( hProcess, lpMem, &mbi, sizeof(MEMORY_BASIC_INFORMATION) );
dwOffset = lBufferSize * mbi.RegionSize;
//lpAddress = (LPVOID)((DWORD)mbi.BaseAddress + dwOffset);
if( ReadProcessMemory( hProcess, mbi.BaseAddress/*lpAddress*/,
lpBuffer, lBufferSize, &dwBytesRead ) == FALSE )
{
printf("Failure 'ReadProcessMemory': %d", GetLastError());
return 1;
}
// increment lpMem to next region of memory
lpMem = (LPVOID)( (DWORD)mbi.BaseAddress + (DWORD)mbi.RegionSize );
}
return 0;
}
bool AdjustPrivileges()
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
TOKEN_PRIVILEGES oldtp;
DWORD dwSize = sizeof(TOKEN_PRIVILEGES);
LUID luid;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
if( GetLastError() == ERROR_CALL_NOT_IMPLEMENTED ) return true;
return false;
}
if( !LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid) )
{
CloseHandle(hToken);
return false;
}
ZeroMemory(&tp, sizeof(tp));
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Adjust Token Privileges
if( !AdjustTokenPrivileges (hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize) )
{
CloseHandle(hToken);
return false;
}
// close handles
CloseHandle( hToken );
return true;
}