ça ira mieux avec la fonction incriminée

LONG WINAPI reg_hook::_RegQueryValueEx( HKEY hKey, LPCTSTR valueName, LPDWORD reserve,
LPDWORD type, LPBYTE data, LPDWORD cbData )
{
fprintf( log, "RQVE : %x | %s\r\n", hKey, valueName );
fflush( log );
HANDLE hProcess = OpenProcess( PROCESS_VM_OPERATION, FALSE, pid );
DWORD anciens_droits = 0, ad_cb = 0;
int i = VirtualProtectEx( hProcess, cbData, sizeof(DWORD), PAGE_EXECUTE_READWRITE, &ad_cb );
int err = GetLastError();
// ici, i=0 et err = 487
fprintf( log, "VPE cb : %i => %x\r\n", i, err );
fputs( "max_len..", log );
fflush( log );
// c'est là que ça plante
DWORD max_len = *cbData;
fputs( "ok\r\n", log );
fflush( log );
VirtualProtectEx( hProcess, data, max_len, PAGE_EXECUTE_READWRITE, &anciens_droits );
// ça, c'est temporaire
LONG ret = oRegQueryValueEx( hKey, valueName, reserve, type, data, cbData );
// ce if également
if( ret == ERROR_SUCCESS && valueName != 0 )
{
if( !stricmp( valueName, "UserName" ) )
{
if( *cbData >= strlen("Thomas (the hooker)") )
{
strncpy( (LPSTR)data, "Thomas (the hooker)", strlen("Thomas (the hooker)") );
*cbData = strlen("Thomas (the hooker)");
}
VirtualProtectEx( hProcess, data, max_len, anciens_droits, &anciens_droits );
CloseHandle( hProcess );
}
}
return ret;
}