X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=dll%2Fwin32%2Furlmon%2Fsession.c;h=7c5a3bb931dadcff75b307d5e6ca36715fa73a68;hp=7d8b40b20bbccb6aec5f8fa576a4e144ffefb362;hb=057a69972f640131d96047073766b10296195b40;hpb=463b98e376452b1f7ae247727d03f88945fe650b diff --git a/dll/win32/urlmon/session.c b/dll/win32/urlmon/session.c index 7d8b40b20bb..7c5a3bb931d 100644 --- a/dll/win32/urlmon/session.c +++ b/dll/win32/urlmon/session.c @@ -17,11 +17,6 @@ */ #include "urlmon_main.h" -//#include "winreg.h" - -#include - -WINE_DEFAULT_DEBUG_CHANNEL(urlmon); typedef struct { LPWSTR protocol; @@ -534,15 +529,26 @@ static void ensure_useragent(void) { OSVERSIONINFOW info = {sizeof(info)}; const WCHAR *os_type, *is_nt; - WCHAR buf[512]; + WCHAR buf[512], *ret, *tmp; + DWORD res, idx=0; + size_t len, size; BOOL is_wow; + HKEY key; static const WCHAR formatW[] = {'M','o','z','i','l','l','a','/','4','.','0', ' ','(','c','o','m','p','a','t','i','b','l','e',';', ' ','M','S','I','E',' ','8','.','0',';', ' ','W','i','n','d','o','w','s',' ','%','s','%','d','.','%','d',';', - ' ','%','s',';',' ','T','r','i','d','e','n','t','/','5','.','0',')',0}; + ' ','%','s',';',' ','T','r','i','d','e','n','t','/','5','.','0',0}; + static const WCHAR post_platform_keyW[] = + {'S','O','F','T','W','A','R','E', + '\\','M','i','c','r','o','s','o','f','t', + '\\','W','i','n','d','o','w','s', + '\\','C','u','r','r','e','n','t','V','e','r','s','i','o','n', + '\\','I','n','t','e','r','n','e','t',' ','S','e','t','t','i','n','g','s', + '\\','5','.','0','\\','U','s','e','r',' ','A','g','e','n','t', + '\\','P','o','s','t',' ','P','l','a','t','f','o','r','m',0}; static const WCHAR ntW[] = {'N','T',' ',0}; static const WCHAR win32W[] = {'W','i','n','3','2',0}; static const WCHAR win64W[] = {'W','i','n','6','4',0}; @@ -563,7 +569,48 @@ static void ensure_useragent(void) os_type = win32W; sprintfW(buf, formatW, is_nt, info.dwMajorVersion, info.dwMinorVersion, os_type); - user_agent = heap_strdupW(buf); + len = strlenW(buf); + + size = len+40; + ret = heap_alloc(size * sizeof(WCHAR)); + if(!ret) + return; + + memcpy(ret, buf, len*sizeof(WCHAR)); + + res = RegOpenKeyW(HKEY_LOCAL_MACHINE, post_platform_keyW, &key); + if(res == ERROR_SUCCESS) { + DWORD value_len; + + while(1) { + value_len = sizeof(buf)/sizeof(WCHAR); + res = RegEnumValueW(key, idx, buf, &value_len, NULL, NULL, NULL, NULL); + if(res != ERROR_SUCCESS) + break; + idx++; + + if(len + value_len + 2 /* strlen("; ") */ + 1 /* trailing ')' */ >= size) { + tmp = heap_realloc(ret, (size*2+value_len)*sizeof(WCHAR)); + if(!tmp) + break; + ret = tmp; + size = size*2+value_len; + } + + ret[len++] = ';'; + ret[len++] = ' '; + memcpy(ret+len, buf, value_len*sizeof(WCHAR)); + len += value_len; + } + + RegCloseKey(key); + } + + ret[len++] = ')'; + ret[len++] = 0; + + user_agent = ret; + TRACE("Using user agent %s\n", debugstr_w(user_agent)); } LPWSTR get_useragent(void)