Index: loader/ext.c =================================================================== --- loader/ext.c.orig 2007-02-15 09:42:47.000000000 -0800 +++ loader/ext.c 2007-02-15 09:43:25.000000000 -0800 @@ -570,9 +570,9 @@ { for(i=0; i %d\n", key, result); return result; } + +static long WINAPI expRegQueryValueExW(long key, const char* value, int* reserved, int* type, int* data, int* count) +{ + char dest[256]; + char data1[256]; + int l; + long result; + dest[0] = 0; + data1[0] = 0; + l = WideCharToMultiByte(65001, 0x0, (LPCWSTR)value, -1, dest, 256, 0x0, 0x0); + result=RegQueryValueExA(key, dest, reserved, type, (int *)data1, count); + dbgprintf("RegQueryValueExW(key 0x%x, value %s, reserved 0x%x, data 0x%x, count 0x%x)" + " => 0x%x\n", key, dest, reserved, data, count, result); + if(data && count)dbgprintf(" read %d bytes: '%s'\n", *count, data1); + MultiByteToWideChar(65001, 0x0, data1, -1, data, 256); + return result; +} static long WINAPI expRegQueryValueExA(long key, const char* value, int* reserved, int* type, int* data, int* count) { long result=RegQueryValueExA(key, value, reserved, type, data, count); @@ -3838,6 +3855,13 @@ dbgprintf("strlen(0x%x='%.50s') => %d\n", str1, str1, result); return result; } +static LONG WINAPI explstrlenW(const WCHAR* str1) +{ + LONG len = 0; + while(str1[len++]); + dbgprintf("strlenW(0x%x='%.50s') => %d\n", str1, str1, len-1); + return len-1; +} static LONG WINAPI explstrcpyA(char* str1, const char* str2) { @@ -5045,6 +5069,7 @@ FF(MulDiv, -1) FF(lstrcmpiA, -1) FF(lstrlenA, -1) + FF(lstrlenW, -1) FF(lstrcpyA, -1) FF(lstrcatA, -1) FF(lstrcpynA,-1) @@ -5201,6 +5226,7 @@ FF(RegOpenKeyA, -1) FF(RegOpenKeyExA, -1) FF(RegQueryValueExA, -1) + FF(RegQueryValueExW, -1) FF(RegSetValueExA, -1) FF(RegQueryInfoKeyA, -1) };