51 0, 0, { (
DWORD_PTR)(__FILE__
": session") }
76 static const WCHAR wszProtocolsKey[] =
77 {
'P',
'R',
'O',
'T',
'O',
'C',
'O',
'L',
'S',
'\\',
'H',
'a',
'n',
'd',
'l',
'e',
'r',
'\\'};
79 wszKey =
malloc(
sizeof(wszProtocolsKey) + (schema_len + 1) *
sizeof(
WCHAR));
80 memcpy(wszKey, wszProtocolsKey,
sizeof(wszProtocolsKey));
86 TRACE(
"Could not open protocol handler key\n");
90 size =
sizeof(str_clsid);
94 WARN(
"Could not get protocol CLSID res=%ld\n",
res);
100 WARN(
"CLSIDFromString failed: %08lx\n",
hres);
121 IClassFactory_AddRef(
cf);
122 new_name_space->
cf =
cf;
124 new_name_space->
urlmon = urlmon_protocol;
149 IClassFactory_Release(iter->
cf);
189 if(
ns && !
ns->urlmon) {
190 hres = IClassFactory_QueryInterface(
ns->cf, &IID_IInternetProtocolInfo, (
void**)&
ret);
192 hres = IClassFactory_CreateInstance(
ns->cf,
NULL, &IID_IInternetProtocolInfo, (
void**)&
ret);
204 hres = IClassFactory_QueryInterface(
cf, &IID_IInternetProtocolInfo, (
void**)&
ret);
206 IClassFactory_CreateInstance(
cf,
NULL, &IID_IInternetProtocolInfo, (
void**)&
ret);
207 IClassFactory_Release(
cf);
230 IClassFactory_AddRef(*
ret);
265 hres = IClassFactory_CreateInstance(
cf,
NULL, &IID_IInternetProtocol, (
void**)&
ret);
267 WARN(
"CreateInstance failed: %08lx\n",
hres);
276 TRACE(
"Could not open MIME filters key\n");
285 size =
sizeof(clsidw);
301 WARN(
"CoCreateInstance failed: %08lx\n",
hres);
315 IInternetSession_AddRef(iface);
344 if(cPatterns || ppwzPatterns)
345 FIXME(
"patterns not supported\n");
349 if(!pCF || !pwzProtocol)
360 if(!pCF || !pszProtocol)
375 IClassFactory_AddRef(pCF);
404 IClassFactory_Release(iter->
cf);
422 TRACE(
"(%p %s %p %p %p %08lx)\n", pBC,
debugstr_w(szUrl), pUnkOuter, ppUnk,
423 ppOInetProt, dwOption);
425 if(pBC || pUnkOuter || ppUnk || dwOption)
426 FIXME(
"Unsupported arguments\n");
476 TRACE(
"(%ld %p %ld)\n", dwSessionMode, ppIInternetSession,
dwReserved);
479 ERR(
"dwSessionMode=%ld\n", dwSessionMode);
496 res =
RegOpenKeyW(
root,
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", &hkey);
513 const WCHAR *os_type, *is_nt;
518 if(
version & UAS_EXACTLEGACY) {
533 if(
version < 7 || use_current) {
556 if(
sizeof(
void*) == 8)
558 os_type =
L"; Win64; x64";
560 os_type =
L"; Win64";
563 os_type =
L"; WOW64";
568 info.dwMinorVersion, os_type);
578 "Internet Settings\\5.0\\User Agent\\Post Platform", &
key);
634 TRACE(
"(%lx, %p, %ld, %p)\n", dwOption,
pBuffer, dwBufferLength, pdwBufferLength);
640 case URLMON_OPTION_USERAGENT: {
652 *pdwBufferLength =
size;
653 if(
size <= dwBufferLength) {
666 case URLMON_OPTION_URL_ENCODING: {
669 if(!
pBuffer || dwBufferLength <
sizeof(
DWORD) || !pdwBufferLength)
675 *pdwBufferLength =
sizeof(
DWORD);
676 *(
DWORD*)
pBuffer = encoding ? URL_ENCODING_DISABLE_UTF8 : URL_ENCODING_ENABLE_UTF8;
680 FIXME(
"unsupported option %lx\n", dwOption);
692 TRACE(
"(%lx %p %lx)\n", dwOption,
pBuffer, dwBufferLength);
695 case URLMON_OPTION_USERAGENT: {
700 if(!
pBuffer || !dwBufferLength)
712 new_user_agent[
size] = 0;
725 FIXME(
"Unknown option %lx\n", dwOption);
782 if(version < 7 || version > 11)
802 IClassFactory_Release(ns_iter->
cf);
808 IClassFactory_Release(mf_iter->
cf);
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static void list_remove(struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
const GUID IID_IClassFactory
HRESULT create_binding_protocol(BindProtocol **protocol)
#define RegCloseKey(hKey)
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
LONG WINAPI RegEnumValueW(_In_ HKEY hKey, _In_ DWORD index, _Out_ LPWSTR value, _Inout_ PDWORD val_count, _Reserved_ PDWORD reserved, _Out_opt_ PDWORD type, _Out_opt_ LPBYTE data, _Inout_opt_ PDWORD count)
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
HRESULT WINAPI DECLSPEC_HOTPATCH CoGetClassObject(REFCLSID rclsid, DWORD clscontext, COSERVERINFO *server_info, REFIID riid, void **obj)
HRESULT WINAPI CLSIDFromString(LPCOLESTR str, LPCLSID clsid)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, IUnknown *outer, DWORD cls_context, REFIID riid, void **obj)
void *WINAPI CoTaskMemAlloc(SIZE_T size)
static __inline const char * debugstr_an(const char *s, int n)
#define GetCurrentProcess()
#define WideCharToMultiByte
#define MultiByteToWideChar
static const WCHAR version[]
BOOL WINAPI GetVersionExW(IN LPOSVERSIONINFOW lpVersionInformation)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl wcscmp(const wchar_t *, const wchar_t *)
static wchar_t * wcsdup(const wchar_t *str)
HRESULT WINAPI CoInternetParseUrl(LPCWSTR pwzUrl, PARSEACTION ParseAction, DWORD dwFlags, LPWSTR pszResult, DWORD cchResult, DWORD *pcchResult, DWORD dwReserved)
void update_user_agent(WCHAR *user_agent)
static HRESULT WINAPI InternetSession_CreateBinding(IInternetSession *iface, LPBC pBC, LPCWSTR szUrl, IUnknown *pUnkOuter, IUnknown **ppUnk, IInternetProtocol **ppOInetProt, DWORD dwOption)
static name_space * find_name_space(LPCWSTR protocol)
static HRESULT get_protocol_cf(LPCWSTR schema, DWORD schema_len, CLSID *pclsid, IClassFactory **ret)
HRESULT WINAPI UrlMkGetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength, DWORD *pdwBufferLength, DWORD dwReserved)
static HRESULT WINAPI InternetSession_QueryInterface(IInternetSession *iface, REFIID riid, void **ppv)
static CRITICAL_SECTION session_cs
IInternetProtocol * get_mime_filter(LPCWSTR mime)
HRESULT get_protocol_handler(IUri *uri, CLSID *clsid, IClassFactory **ret)
static ULONG WINAPI InternetSession_AddRef(IInternetSession *iface)
static CRITICAL_SECTION_DEBUG session_cs_dbg
static BOOL get_url_encoding(HKEY root, DWORD *encoding)
static HRESULT WINAPI InternetSession_UnregisterMimeFilter(IInternetSession *iface, IClassFactory *pCF, LPCWSTR pwzType)
static HRESULT WINAPI InternetSession_RegisterMimeFilter(IInternetSession *iface, IClassFactory *pCF, REFCLSID rclsid, LPCWSTR pwzType)
LPWSTR get_useragent(void)
BOOL is_registered_protocol(LPCWSTR url)
HRESULT WINAPI MapBrowserEmulationModeToUserAgent(const void *arg, WCHAR **ret)
static struct list name_space_list
static struct list mime_filter_list
static void ensure_user_agent(void)
IInternetProtocolInfo * get_protocol_info(LPCWSTR url)
HRESULT WINAPI CoInternetGetSession(DWORD dwSessionMode, IInternetSession **ppIInternetSession, DWORD dwReserved)
static HRESULT unregister_namespace(IClassFactory *cf, LPCWSTR protocol)
static HRESULT WINAPI InternetSession_SetSessionOption(IInternetSession *iface, DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength, DWORD dwReserved)
static ULONG WINAPI InternetSession_Release(IInternetSession *iface)
static IInternetSession InternetSession
static HRESULT WINAPI InternetSession_UnregisterNameSpace(IInternetSession *iface, IClassFactory *pCF, LPCWSTR pszProtocol)
static BOOL user_agent_set
static HRESULT WINAPI InternetSession_RegisterNameSpace(IInternetSession *iface, IClassFactory *pCF, REFCLSID rclsid, LPCWSTR pwzProtocol, ULONG cPatterns, const LPCWSTR *ppwzPatterns, DWORD dwReserved)
HRESULT WINAPI UrlMkSetSessionOption(DWORD dwOption, LPVOID pBuffer, DWORD dwBufferLength, DWORD Reserved)
HRESULT register_namespace(IClassFactory *cf, REFIID clsid, LPCWSTR protocol, BOOL urlmon_protocol)
static const IInternetSessionVtbl InternetSessionVtbl
static size_t obtain_user_agent(unsigned int version, WCHAR *ret, size_t size)
HRESULT WINAPI ObtainUserAgentString(DWORD option, char *ret, DWORD *ret_size)
GLuint GLuint GLsizei GLenum type
GLenum GLuint GLenum GLsizei const GLchar * buf
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
#define memcpy(s1, s2, n)
static void ULONG ULONG * ret_size
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
#define VER_PLATFORM_WIN32_NT
interface IBindCtx * LPBC
UINT WINAPI SysStringLen(BSTR str)
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
#define IsEqualGUID(rguid1, rguid2)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
LIST_ENTRY ProcessLocksList
static void URLMON_LockModule(void)
static void URLMON_UnlockModule(void)
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
_Reserved_ PVOID Reserved
#define HKEY_LOCAL_MACHINE
#define HKEY_CURRENT_USER
#define HKEY_CLASSES_ROOT