Note that there are some explanatory texts on larger screens.

plurals
  1. POWin32 WriteProcessMemory() magical offset value
    primarykey
    data
    text
    <p>I'm trying to read the data in a Win32 ListView owned by another process. Unfortunately, my WriteProcessMemory() call fails with the error "This function is not supported on this system." when I specify "NULL" for the base address in my VirtualAlloc() call. If, however, I offset that VirtualAlloc() address by some "magic" value that I got lucky with and picked at random during a moment of frustration, the call works on my system, but fails on other ones. (see the code below)</p> <p>Can anybody suggest what this magical offset is doing for me? By trial and error, I can find values that work on specific systems, but I can't find a general solution to this problem.</p> <p>Thanks, PaulH</p> <pre><code>#define MAGIC_OFFSET (DWORD)0x01020000 LVHITTESTINFO hti = { 0 }; hti.pt = clientPoint; LPVOID lpBuffer = ::VirtualAlloc( NULL, 1, MEM_RESERVE, PAGE_READWRITE ); ::VirtualFree( lpBuffer, 0, MEM_RELEASE ); lpBuffer = ::VirtualAlloc( (LPVOID)((DWORD)lpBuffer + MAGIC_OFFSET), sizeof( hti ), MEM_RESERVER, PAGE_READWRITE ); DWORD dwBuffer = (DWORD)lpBuffer + MAGIC_OFFSET - sizeof( hti ); if( !::WriteProcessMemory( hProcess, (LPVOID)dwBuffer, (LPVOID)&amp;hti, sizeof( hti ), NULL ) ) return 0; if( ListView_HitTest( hWndListView, (LPVOID)dwBuffer ) &lt; 0 ) return 0; if( !::ReadProcessMemory( hProcess, (LPVOID)dwBuffer, (LPVOID)&amp;hti, sizeof( hti ), NULL ) ) return 0; ::VirtualFree( lpBuffer, 0, MEM_RELEASE ); </code></pre> <p>Clarification (added by Cd-MaN): this is on a Windows Mobile platform, probably non-x86 architecture. So the situation may be different (are there separate address spaces in ARM processors?).</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload