ReactOS 0.4.15-dev-7906-g1b85a5f
internet.c File Reference
#include "urlmon_main.h"
#include "winreg.h"
#include "shlwapi.h"
#include "wine/debug.h"
Include dependency graph for internet.c:

Go to the source code of this file.

Classes

struct  feature_control
 

Typedefs

typedef struct feature_control feature_control
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (urlmon)
 
static HRESULT parse_schema (LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
 
static HRESULT parse_canonicalize_url (LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
 
static HRESULT parse_security_url (LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
 
static HRESULT parse_encode (LPCWSTR url, PARSEACTION action, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
 
static HRESULT parse_path_from_url (LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
 
static HRESULT parse_security_domain (LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
 
static HRESULT parse_domain (LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
 
static HRESULT parse_rootdocument (LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
 
HRESULT WINAPI CoInternetParseUrl (LPCWSTR pwzUrl, PARSEACTION ParseAction, DWORD dwFlags, LPWSTR pszResult, DWORD cchResult, DWORD *pcchResult, DWORD dwReserved)
 
HRESULT WINAPI CoInternetCombineUrl (LPCWSTR pwzBaseUrl, LPCWSTR pwzRelativeUrl, DWORD dwCombineFlags, LPWSTR pwzResult, DWORD cchResult, DWORD *pcchResult, DWORD dwReserved)
 
HRESULT WINAPI CoInternetCompareUrl (LPCWSTR pwzUrl1, LPCWSTR pwzUrl2, DWORD dwCompareFlags)
 
HRESULT WINAPI CoInternetQueryInfo (LPCWSTR pwzUrl, QUERYOPTION QueryOption, DWORD dwQueryFlags, LPVOID pvBuffer, DWORD cbBuffer, DWORD *pcbBuffer, DWORD dwReserved)
 
static void set_feature_on_process (INTERNETFEATURELIST feature, BOOL enable)
 
static HRESULT set_internet_feature (INTERNETFEATURELIST feature, DWORD flags, BOOL enable)
 
static BOOL get_feature_from_reg (HKEY feature_control, LPCWSTR feature_name, LPCWSTR process_name, BOOL *enabled)
 
static HRESULT load_process_feature (INTERNETFEATURELIST feature)
 
static HRESULT get_feature_from_process (INTERNETFEATURELIST feature)
 
static HRESULT get_internet_feature (INTERNETFEATURELIST feature, DWORD flags)
 
HRESULT WINAPI CoInternetSetFeatureEnabled (INTERNETFEATURELIST FeatureEntry, DWORD dwFlags, BOOL fEnable)
 
HRESULT WINAPI CoInternetIsFeatureEnabled (INTERNETFEATURELIST FeatureEntry, DWORD dwFlags)
 
HRESULT WINAPI CoInternetIsFeatureEnabledForUrl (INTERNETFEATURELIST FeatureEntry, DWORD dwFlags, LPCWSTR szURL, IInternetSecurityManager *pSecMgr)
 
HRESULT WINAPI CoInternetIsFeatureZoneElevationEnabled (LPCWSTR szFromURL, LPCWSTR szToURL, IInternetSecurityManager *pSecMgr, DWORD dwFlags)
 

Variables

static const WCHAR feature_control_keyW []
 
static const WCHAR feature_object_cachingW []
 
static const WCHAR feature_zone_elevationW []
 
static const WCHAR feature_mime_handlingW []
 
static const WCHAR feature_mime_sniffingW []
 
static const WCHAR feature_window_restrictionsW []
 
static const WCHAR feature_weboc_popupmanagementW []
 
static const WCHAR feature_behaviorsW []
 
static const WCHAR feature_disable_mk_protocolW []
 
static const WCHAR feature_localmachine_lockdownW []
 
static const WCHAR feature_securitybandW []
 
static const WCHAR feature_restrict_activexinstallW []
 
static const WCHAR feature_validate_navigate_urlW []
 
static const WCHAR feature_restrict_filedownloadW []
 
static const WCHAR feature_addon_managementW []
 
static const WCHAR feature_protocol_lockdownW []
 
static const WCHAR feature_http_username_password_disableW []
 
static const WCHAR feature_safe_bindtoobjectW []
 
static const WCHAR feature_unc_savedfilecheckW []
 
static const WCHAR feature_get_url_dom_filepath_unencodedW []
 
static const WCHAR feature_tabbed_browsingW []
 
static const WCHAR feature_ssluxW []
 
static const WCHAR feature_disable_navigation_soundsW []
 
static const WCHAR feature_disable_legacy_compressionW []
 
static const WCHAR feature_force_addr_and_statusW []
 
static const WCHAR feature_xmlhttpW []
 
static const WCHAR feature_disable_telnet_protocolW []
 
static const WCHAR feature_feedsW []
 
static const WCHAR feature_block_input_promptsW []
 
static CRITICAL_SECTION process_features_cs = { &process_features_cs_dbg, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG process_features_cs_dbg
 
static feature_control process_feature_controls [FEATURE_ENTRY_COUNT]
 

Typedef Documentation

◆ feature_control

Function Documentation

◆ CoInternetCombineUrl()

HRESULT WINAPI CoInternetCombineUrl ( LPCWSTR  pwzBaseUrl,
LPCWSTR  pwzRelativeUrl,
DWORD  dwCombineFlags,
LPWSTR  pwzResult,
DWORD  cchResult,
DWORD pcchResult,
DWORD  dwReserved 
)

Definition at line 426 of file internet.c.

429{
431 DWORD size = cchResult;
433
434 TRACE("(%s,%s,0x%08x,%p,%d,%p,%d)\n", debugstr_w(pwzBaseUrl),
435 debugstr_w(pwzRelativeUrl), dwCombineFlags, pwzResult, cchResult, pcchResult,
436 dwReserved);
437
438 protocol_info = get_protocol_info(pwzBaseUrl);
439
440 if(protocol_info) {
441 hres = IInternetProtocolInfo_CombineUrl(protocol_info, pwzBaseUrl, pwzRelativeUrl,
442 dwCombineFlags, pwzResult, cchResult, pcchResult, dwReserved);
443 IInternetProtocolInfo_Release(protocol_info);
444 if(SUCCEEDED(hres))
445 return hres;
446 }
447
448
449 hres = UrlCombineW(pwzBaseUrl, pwzRelativeUrl, pwzResult, &size, dwCombineFlags);
450
451 if(pcchResult)
452 *pcchResult = size;
453
454 return hres;
455}
HRESULT WINAPI UrlCombineW(LPCWSTR pszBase, LPCWSTR pszRelative, LPWSTR pszCombined, LPDWORD pcchCombined, DWORD dwFlags)
Definition: url.c:662
IInternetProtocolInfo * get_protocol_info(LPCWSTR url)
Definition: session.c:181
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizeiptr size
Definition: glext.h:5919
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define debugstr_w
Definition: kernel32.h:32
HRESULT hres
Definition: protocol.c:465
static IInternetProtocolInfo protocol_info
Definition: misc.c:947
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
#define TRACE(s)
Definition: solgame.cpp:4

◆ CoInternetCompareUrl()

HRESULT WINAPI CoInternetCompareUrl ( LPCWSTR  pwzUrl1,
LPCWSTR  pwzUrl2,
DWORD  dwCompareFlags 
)

Definition at line 460 of file internet.c.

461{
464
465 TRACE("(%s,%s,%08x)\n", debugstr_w(pwzUrl1), debugstr_w(pwzUrl2), dwCompareFlags);
466
468
469 if(protocol_info) {
470 hres = IInternetProtocolInfo_CompareUrl(protocol_info, pwzUrl1, pwzUrl2, dwCompareFlags);
471 IInternetProtocolInfo_Release(protocol_info);
472 if(SUCCEEDED(hres))
473 return hres;
474 }
475
476 return UrlCompareW(pwzUrl1, pwzUrl2, dwCompareFlags) ? S_FALSE : S_OK;
477}
INT WINAPI UrlCompareW(LPCWSTR pszUrl1, LPCWSTR pszUrl2, BOOL fIgnoreSlash)
Definition: url.c:1537
#define S_OK
Definition: intsafe.h:52
#define S_FALSE
Definition: winerror.h:2357

◆ CoInternetIsFeatureEnabled()

HRESULT WINAPI CoInternetIsFeatureEnabled ( INTERNETFEATURELIST  FeatureEntry,
DWORD  dwFlags 
)

Definition at line 685 of file internet.c.

686{
687 TRACE("(%d, %08x)\n", FeatureEntry, dwFlags);
688 return get_internet_feature(FeatureEntry, dwFlags);
689}
static HRESULT get_internet_feature(INTERNETFEATURELIST feature, DWORD flags)
Definition: internet.c:656
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1176

Referenced by CoInternetIsFeatureEnabledForUrl(), and CoInternetIsFeatureZoneElevationEnabled().

◆ CoInternetIsFeatureEnabledForUrl()

HRESULT WINAPI CoInternetIsFeatureEnabledForUrl ( INTERNETFEATURELIST  FeatureEntry,
DWORD  dwFlags,
LPCWSTR  szURL,
IInternetSecurityManager pSecMgr 
)

Definition at line 694 of file internet.c.

696{
697 DWORD urlaction = 0;
699
700 TRACE("(%d %08x %s %p)\n", FeatureEntry, dwFlags, debugstr_w(szURL), pSecMgr);
701
702 if(FeatureEntry == FEATURE_MIME_SNIFFING)
703 urlaction = URLACTION_FEATURE_MIME_SNIFFING;
704 else if(FeatureEntry == FEATURE_WINDOW_RESTRICTIONS)
705 urlaction = URLACTION_FEATURE_WINDOW_RESTRICTIONS;
706 else if(FeatureEntry == FEATURE_ZONE_ELEVATION)
707 urlaction = URLACTION_FEATURE_ZONE_ELEVATION;
708
709 if(!szURL || !urlaction || !pSecMgr)
710 return CoInternetIsFeatureEnabled(FeatureEntry, dwFlags);
711
712 switch(dwFlags) {
713 case GET_FEATURE_FROM_THREAD:
714 case GET_FEATURE_FROM_THREAD_LOCALMACHINE:
715 case GET_FEATURE_FROM_THREAD_INTRANET:
716 case GET_FEATURE_FROM_THREAD_TRUSTED:
717 case GET_FEATURE_FROM_THREAD_INTERNET:
718 case GET_FEATURE_FROM_THREAD_RESTRICTED:
719 FIXME("unsupported flags %x\n", dwFlags);
720 return E_NOTIMPL;
721
722 case GET_FEATURE_FROM_PROCESS:
723 hres = CoInternetIsFeatureEnabled(FeatureEntry, dwFlags);
724 if(hres != S_OK)
725 return hres;
726 /* fall through */
727
728 default: {
729 DWORD policy = URLPOLICY_DISALLOW;
730
731 hres = IInternetSecurityManager_ProcessUrlAction(pSecMgr, szURL, urlaction,
732 (BYTE*)&policy, sizeof(DWORD), NULL, 0, PUAF_NOUI, 0);
733 if(hres!=S_OK || policy!=URLPOLICY_ALLOW)
734 return S_OK;
735 return S_FALSE;
736 }
737 }
738}
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_NOTIMPL
Definition: ddrawi.h:99
#define NULL
Definition: types.h:112
HRESULT WINAPI CoInternetIsFeatureEnabled(INTERNETFEATURELIST FeatureEntry, DWORD dwFlags)
Definition: internet.c:685
WDF_INTERRUPT_POLICY policy
unsigned char BYTE
Definition: xxhash.c:193

◆ CoInternetIsFeatureZoneElevationEnabled()

HRESULT WINAPI CoInternetIsFeatureZoneElevationEnabled ( LPCWSTR  szFromURL,
LPCWSTR  szToURL,
IInternetSecurityManager pSecMgr,
DWORD  dwFlags 
)

Definition at line 743 of file internet.c.

745{
747
748 TRACE("(%s %s %p %x)\n", debugstr_w(szFromURL), debugstr_w(szToURL), pSecMgr, dwFlags);
749
750 if(!pSecMgr || !szToURL)
752
753 switch(dwFlags) {
754 case GET_FEATURE_FROM_THREAD:
755 case GET_FEATURE_FROM_THREAD_LOCALMACHINE:
756 case GET_FEATURE_FROM_THREAD_INTRANET:
757 case GET_FEATURE_FROM_THREAD_TRUSTED:
758 case GET_FEATURE_FROM_THREAD_INTERNET:
759 case GET_FEATURE_FROM_THREAD_RESTRICTED:
760 FIXME("unsupported flags %x\n", dwFlags);
761 return E_NOTIMPL;
762
763 case GET_FEATURE_FROM_PROCESS:
765 if(hres != S_OK)
766 return hres;
767 /* fall through */
768
769 default: {
770 DWORD policy = URLPOLICY_DISALLOW;
771
772 hres = IInternetSecurityManager_ProcessUrlAction(pSecMgr, szToURL,
773 URLACTION_FEATURE_ZONE_ELEVATION, (BYTE*)&policy, sizeof(DWORD),
774 NULL, 0, PUAF_NOUI, 0);
775 if(FAILED(hres))
776 return S_OK;
777
778 switch(policy) {
779 case URLPOLICY_ALLOW:
780 return S_FALSE;
781 case URLPOLICY_QUERY:
782 FIXME("Ask user dialog not implemented\n");
783 default:
784 return S_OK;
785 }
786 }
787 }
788}
#define FAILED(hr)
Definition: intsafe.h:51

◆ CoInternetParseUrl()

HRESULT WINAPI CoInternetParseUrl ( LPCWSTR  pwzUrl,
PARSEACTION  ParseAction,
DWORD  dwFlags,
LPWSTR  pszResult,
DWORD  cchResult,
DWORD pcchResult,
DWORD  dwReserved 
)

Definition at line 392 of file internet.c.

394{
395 if(dwReserved)
396 WARN("dwReserved = %d\n", dwReserved);
397
398 switch(ParseAction) {
399 case PARSE_CANONICALIZE:
400 return parse_canonicalize_url(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
401 case PARSE_SECURITY_URL:
402 return parse_security_url(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
403 case PARSE_ENCODE:
404 case PARSE_UNESCAPE:
405 return parse_encode(pwzUrl, ParseAction, dwFlags, pszResult, cchResult, pcchResult);
406 case PARSE_PATH_FROM_URL:
407 return parse_path_from_url(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
408 case PARSE_SCHEMA:
409 return parse_schema(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
410 case PARSE_SECURITY_DOMAIN:
411 return parse_security_domain(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
412 case PARSE_DOMAIN:
413 return parse_domain(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
414 case PARSE_ROOTDOCUMENT:
415 return parse_rootdocument(pwzUrl, dwFlags, pszResult, cchResult, pcchResult);
416 default:
417 FIXME("not supported action %d\n", ParseAction);
418 }
419
420 return E_NOTIMPL;
421}
#define WARN(fmt,...)
Definition: debug.h:112
static HRESULT parse_canonicalize_url(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
Definition: internet.c:176
static HRESULT parse_encode(LPCWSTR url, PARSEACTION action, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
Definition: internet.c:221
static HRESULT parse_security_domain(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
Definition: internet.c:274
static HRESULT parse_rootdocument(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
Definition: internet.c:325
static HRESULT parse_schema(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
Definition: internet.c:149
static HRESULT parse_domain(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
Definition: internet.c:295
static HRESULT parse_path_from_url(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
Definition: internet.c:248
static HRESULT parse_security_url(LPCWSTR url, DWORD flags, LPWSTR result, DWORD size, DWORD *rsize)
Definition: internet.c:202

Referenced by get_protocol_info(), is_registered_protocol(), OleLoadPicturePath(), ResProtocol_Start(), try_application_url(), and UniformResourceLocatorW_InvokeCommand().

◆ CoInternetQueryInfo()

HRESULT WINAPI CoInternetQueryInfo ( LPCWSTR  pwzUrl,
QUERYOPTION  QueryOption,
DWORD  dwQueryFlags,
LPVOID  pvBuffer,
DWORD  cbBuffer,
DWORD pcbBuffer,
DWORD  dwReserved 
)

Definition at line 485 of file internet.c.

488{
491
492 TRACE("(%s, %x, %x, %p, %x, %p, %x)\n", debugstr_w(pwzUrl),
493 QueryOption, dwQueryFlags, pvBuffer, cbBuffer, pcbBuffer, dwReserved);
494
496
497 if(protocol_info) {
498 hres = IInternetProtocolInfo_QueryInfo(protocol_info, pwzUrl, QueryOption, dwQueryFlags,
499 pvBuffer, cbBuffer, pcbBuffer, dwReserved);
500 IInternetProtocolInfo_Release(protocol_info);
501
502 return SUCCEEDED(hres) ? hres : E_FAIL;
503 }
504
505 switch(QueryOption) {
506 case QUERY_USES_NETWORK:
507 if(!pvBuffer || cbBuffer < sizeof(DWORD))
508 return E_FAIL;
509
510 *(DWORD*)pvBuffer = 0;
511 if(pcbBuffer)
512 *pcbBuffer = sizeof(DWORD);
513 break;
514
515 default:
516 FIXME("Not supported option %d\n", QueryOption);
517 return E_NOTIMPL;
518 }
519
520 return S_OK;
521}
#define E_FAIL
Definition: ddrawi.h:102
#define DWORD
Definition: nt_native.h:44

◆ CoInternetSetFeatureEnabled()

HRESULT WINAPI CoInternetSetFeatureEnabled ( INTERNETFEATURELIST  FeatureEntry,
DWORD  dwFlags,
BOOL  fEnable 
)

Definition at line 676 of file internet.c.

677{
678 TRACE("(%d, %08x, %x)\n", FeatureEntry, dwFlags, fEnable);
679 return set_internet_feature(FeatureEntry, dwFlags, fEnable);
680}
static HRESULT set_internet_feature(INTERNETFEATURELIST feature, DWORD flags, BOOL enable)
Definition: internet.c:533

◆ get_feature_from_process()

static HRESULT get_feature_from_process ( INTERNETFEATURELIST  feature)
static

Definition at line 637 of file internet.c.

638{
639 HRESULT hres = S_OK;
640
642
643 /* Try loading the feature from the registry, if it hasn't already
644 * been done.
645 */
646 if(process_feature_controls[feature].check_registry)
648 if(SUCCEEDED(hres))
650
652
653 return hres;
654}
static HRESULT load_process_feature(INTERNETFEATURELIST feature)
Definition: internet.c:582
static feature_control process_feature_controls[FEATURE_ENTRY_COUNT]
Definition: internet.c:118
static CRITICAL_SECTION process_features_cs
Definition: internet.c:98
INTERNETFEATURELIST feature
Definition: misc.c:1719
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)

Referenced by get_internet_feature().

◆ get_feature_from_reg()

static BOOL get_feature_from_reg ( HKEY  feature_control,
LPCWSTR  feature_name,
LPCWSTR  process_name,
BOOL enabled 
)
static

Definition at line 549 of file internet.c.

550{
553 DWORD res;
554
555 static const WCHAR wildcardW[] = {'*',0};
556
557 res = RegOpenKeyW(feature_control, feature_name, &feature);
558 if(res != ERROR_SUCCESS)
559 return FALSE;
560
561 size = sizeof(DWORD);
562 res = RegQueryValueExW(feature, process_name, NULL, &type, (BYTE*)&value, &size);
563 if(res != ERROR_SUCCESS || type != REG_DWORD) {
564 size = sizeof(DWORD);
566 }
567
569 if(res != ERROR_SUCCESS)
570 return FALSE;
571
572 if(type != REG_DWORD) {
573 WARN("Unexpected registry value type %d (expected REG_DWORD) for %s\n", type, debugstr_w(wildcardW));
574 return FALSE;
575 }
576
577 *enabled = value == 1;
578 return TRUE;
579}
#define RegCloseKey(hKey)
Definition: registry.h:49
#define ERROR_SUCCESS
Definition: deptool.c:10
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3268
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4103
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glext.h:7750
GLuint res
Definition: glext.h:9613
#define REG_DWORD
Definition: sdbapi.c:596
static const WCHAR wildcardW[]
Definition: actctx.c:762
Definition: pdh_main.c:94
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by load_process_feature().

◆ get_internet_feature()

static HRESULT get_internet_feature ( INTERNETFEATURELIST  feature,
DWORD  flags 
)
static

Definition at line 656 of file internet.c.

657{
659
660 if(feature >= FEATURE_ENTRY_COUNT)
661 return E_FAIL;
662
663 if(flags == GET_FEATURE_FROM_PROCESS)
665 else {
666 FIXME("Unsupported flags: %08x\n", flags);
667 hres = E_NOTIMPL;
668 }
669
670 return hres;
671}
static HRESULT get_feature_from_process(INTERNETFEATURELIST feature)
Definition: internet.c:637
GLbitfield flags
Definition: glext.h:7161

Referenced by CoInternetIsFeatureEnabled().

◆ load_process_feature()

static HRESULT load_process_feature ( INTERNETFEATURELIST  feature)
static

Definition at line 582 of file internet.c.

583{
584 DWORD res;
587 LPCWSTR process_name, feature_name;
589 BOOL check_hklm = FALSE;
591
593 ERR("Failed to get module file name: %u\n", GetLastError());
594 return E_UNEXPECTED;
595 }
596
597 process_name = wcsrchr(module_name, '\\');
598 if(!process_name) {
599 ERR("Invalid module file name: %s\n", debugstr_w(module_name));
600 return E_UNEXPECTED;
601 }
602
603 /* Skip past the '\\' in front of the filename. */
604 ++process_name;
605
607
609 if(res == ERROR_SUCCESS) {
610 if(get_feature_from_reg(feature_control, feature_name, process_name, &enabled)) {
611 hres = enabled ? S_OK : S_FALSE;
613 } else
614 /* We didn't find anything in HKCU, so check HKLM. */
615 check_hklm = TRUE;
616
618 }
619
620 if(check_hklm) {
622 if(res == ERROR_SUCCESS) {
623 if(get_feature_from_reg(feature_control, feature_name, process_name, &enabled)) {
624 hres = enabled ? S_OK : S_FALSE;
626 }
628 }
629 }
630
631 /* Don't bother checking the registry again for this feature. */
633
634 return hres;
635}
#define ARRAY_SIZE(A)
Definition: main.h:33
#define ERR(fmt,...)
Definition: debug.h:110
static LPCWSTR LPCWSTR module_name
Definition: db.cpp:170
#define wcsrchr
Definition: compat.h:16
#define MAX_PATH
Definition: compat.h:34
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:600
static const WCHAR feature_control_keyW[]
Definition: internet.c:28
static BOOL get_feature_from_reg(HKEY feature_control, LPCWSTR feature_name, LPCWSTR process_name, BOOL *enabled)
Definition: internet.c:549
unsigned int BOOL
Definition: ntddk_ex.h:94
LPCWSTR feature_name
Definition: internet.c:108
BOOL check_registry
Definition: internet.c:110
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define E_UNEXPECTED
Definition: winerror.h:2456
#define HKEY_LOCAL_MACHINE
Definition: winreg.h:12
#define HKEY_CURRENT_USER
Definition: winreg.h:11
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by get_feature_from_process().

◆ parse_canonicalize_url()

static HRESULT parse_canonicalize_url ( LPCWSTR  url,
DWORD  flags,
LPWSTR  result,
DWORD  size,
DWORD rsize 
)
static

Definition at line 176 of file internet.c.

178{
180 DWORD prsize = size;
182
183 TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize);
184
186
187 if(protocol_info) {
188 hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_CANONICALIZE,
189 flags, result, size, rsize, 0);
190 IInternetProtocolInfo_Release(protocol_info);
191 if(SUCCEEDED(hres))
192 return hres;
193 }
194
195 hres = UrlCanonicalizeW(url, result, &prsize, flags);
196
197 if(rsize)
198 *rsize = prsize;
199 return hres;
200}
HRESULT WINAPI UrlCanonicalizeW(LPCWSTR pszUrl, LPWSTR pszCanonicalized, LPDWORD pcchCanonicalized, DWORD dwFlags)
Definition: url.c:282
GLuint64EXT * result
Definition: glext.h:11304
static const WCHAR url[]
Definition: encode.c:1432

Referenced by CoInternetParseUrl().

◆ parse_domain()

static HRESULT parse_domain ( LPCWSTR  url,
DWORD  flags,
LPWSTR  result,
DWORD  size,
DWORD rsize 
)
static

Definition at line 295 of file internet.c.

297{
300
301 TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize);
302
304
305 if(protocol_info) {
306 hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_DOMAIN,
307 flags, result, size, rsize, 0);
308 IInternetProtocolInfo_Release(protocol_info);
309 if(SUCCEEDED(hres))
310 return hres;
311 }
312
314 if(rsize)
315 *rsize = size;
316
317 if(hres == E_POINTER)
318 return S_FALSE;
319
320 if(FAILED(hres))
321 return E_FAIL;
322 return S_OK;
323}
HRESULT WINAPI UrlGetPartW(LPCWSTR pszIn, LPWSTR pszOut, LPDWORD pcchOut, DWORD dwPart, DWORD dwFlags)
Definition: url.c:2269
@ URL_PART_HOSTNAME
Definition: shlwapi.h:1180
#define E_POINTER
Definition: winerror.h:2365

Referenced by CoInternetParseUrl().

◆ parse_encode()

static HRESULT parse_encode ( LPCWSTR  url,
PARSEACTION  action,
DWORD  flags,
LPWSTR  result,
DWORD  size,
DWORD rsize 
)
static

Definition at line 221 of file internet.c.

222{
224 DWORD prsize;
226
227 TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize);
228
230
231 if(protocol_info) {
232 hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, action,
233 flags, result, size, rsize, 0);
234 IInternetProtocolInfo_Release(protocol_info);
235 if(SUCCEEDED(hres))
236 return hres;
237 }
238
239 prsize = size;
240 hres = UrlUnescapeW((LPWSTR)url, result, &prsize, flags);
241
242 if(rsize)
243 *rsize = prsize;
244
245 return hres;
246}
const WCHAR * action
Definition: action.c:7479
HRESULT WINAPI UrlUnescapeW(LPWSTR pszUrl, LPWSTR pszUnescaped, LPDWORD pcchUnescaped, DWORD dwFlags)
Definition: url.c:1367
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by CoInternetParseUrl().

◆ parse_path_from_url()

static HRESULT parse_path_from_url ( LPCWSTR  url,
DWORD  flags,
LPWSTR  result,
DWORD  size,
DWORD rsize 
)
static

Definition at line 248 of file internet.c.

249{
251 DWORD prsize;
253
254 TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize);
255
257
258 if(protocol_info) {
259 hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_PATH_FROM_URL,
260 flags, result, size, rsize, 0);
261 IInternetProtocolInfo_Release(protocol_info);
262 if(SUCCEEDED(hres))
263 return hres;
264 }
265
266 prsize = size;
267 hres = PathCreateFromUrlW(url, result, &prsize, 0);
268
269 if(rsize)
270 *rsize = prsize;
271 return hres;
272}
HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath, LPDWORD pcchPath, DWORD dwReserved)
Definition: path.c:3355

Referenced by CoInternetParseUrl().

◆ parse_rootdocument()

static HRESULT parse_rootdocument ( LPCWSTR  url,
DWORD  flags,
LPWSTR  result,
DWORD  size,
DWORD rsize 
)
static

Definition at line 325 of file internet.c.

327{
331
332 TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize);
333
335
336 if(protocol_info) {
337 hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_ROOTDOCUMENT,
338 flags, result, size, rsize, 0);
339 IInternetProtocolInfo_Release(protocol_info);
340 if(SUCCEEDED(hres))
341 return hres;
342 }
343
344 url_info.cbSize = sizeof(url_info);
346 return E_FAIL;
347
348 switch(url_info.nScheme) {
349 case URL_SCHEME_FTP:
350 case URL_SCHEME_HTTP:
351 case URL_SCHEME_HTTPS:
352 if(url_info.cchSuffix<3 || *(url_info.pszSuffix)!='/'
353 || *(url_info.pszSuffix+1)!='/')
354 return E_FAIL;
355
356 if(size < url_info.cchProtocol+3) {
357 size = 0;
359
360 if(rsize)
361 *rsize = size+url_info.cchProtocol+3;
362
363 if(hres == E_POINTER)
364 return S_FALSE;
365
366 return hres;
367 }
368
369 size -= url_info.cchProtocol+3;
370 hres = UrlGetPartW(url, result+url_info.cchProtocol+3,
372
373 if(hres == E_POINTER)
374 return S_FALSE;
375
376 if(FAILED(hres))
377 return E_FAIL;
378
379 if(rsize)
380 *rsize = size+url_info.cchProtocol+3;
381
382 memcpy(result, url, (url_info.cchProtocol+3)*sizeof(WCHAR));
383 return hres;
384 default:
385 return E_FAIL;
386 }
387}
HRESULT WINAPI ParseURLW(LPCWSTR x, PARSEDURLW *y)
Definition: url.c:197
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
@ URL_SCHEME_HTTPS
Definition: shlwapi.h:1157
@ URL_SCHEME_FTP
Definition: shlwapi.h:1147
@ URL_SCHEME_HTTP
Definition: shlwapi.h:1148
Definition: icif.c:78

Referenced by CoInternetParseUrl().

◆ parse_schema()

static HRESULT parse_schema ( LPCWSTR  url,
DWORD  flags,
LPWSTR  result,
DWORD  size,
DWORD rsize 
)
static

Definition at line 149 of file internet.c.

150{
151 WCHAR *ptr;
152 DWORD len = 0;
153
154 TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize);
155
156 if(flags)
157 ERR("wrong flags\n");
158
159 ptr = wcschr(url, ':');
160 if(ptr)
161 len = ptr-url;
162
163 if(rsize)
164 *rsize = len;
165
166 if(len >= size)
167 return E_POINTER;
168
169 if(len)
170 memcpy(result, url, len*sizeof(WCHAR));
171 result[len] = 0;
172
173 return S_OK;
174}
#define wcschr
Definition: compat.h:17
GLenum GLsizei len
Definition: glext.h:6722
static PVOID ptr
Definition: dispmode.c:27

Referenced by CoInternetParseUrl().

◆ parse_security_domain()

static HRESULT parse_security_domain ( LPCWSTR  url,
DWORD  flags,
LPWSTR  result,
DWORD  size,
DWORD rsize 
)
static

Definition at line 274 of file internet.c.

276{
279
280 TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize);
281
283
284 if(protocol_info) {
285 hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_SECURITY_DOMAIN,
286 flags, result, size, rsize, 0);
287 IInternetProtocolInfo_Release(protocol_info);
288 if(SUCCEEDED(hres))
289 return hres;
290 }
291
292 return E_FAIL;
293}

Referenced by CoInternetParseUrl().

◆ parse_security_url()

static HRESULT parse_security_url ( LPCWSTR  url,
DWORD  flags,
LPWSTR  result,
DWORD  size,
DWORD rsize 
)
static

Definition at line 202 of file internet.c.

203{
206
207 TRACE("(%s %08x %p %d %p)\n", debugstr_w(url), flags, result, size, rsize);
208
210
211 if(protocol_info) {
212 hres = IInternetProtocolInfo_ParseUrl(protocol_info, url, PARSE_SECURITY_URL,
213 flags, result, size, rsize, 0);
214 IInternetProtocolInfo_Release(protocol_info);
215 return hres;
216 }
217
218 return E_FAIL;
219}

Referenced by CoInternetParseUrl().

◆ set_feature_on_process()

static void set_feature_on_process ( INTERNETFEATURELIST  feature,
BOOL  enable 
)
static

◆ set_internet_feature()

static HRESULT set_internet_feature ( INTERNETFEATURELIST  feature,
DWORD  flags,
BOOL  enable 
)
static

Definition at line 533 of file internet.c.

534{
535 const DWORD supported_flags = SET_FEATURE_ON_PROCESS;
536
537 if(feature >= FEATURE_ENTRY_COUNT)
538 return E_FAIL;
539
540 if(flags & ~supported_flags)
541 FIXME("Unsupported flags: %08x\n", flags & ~supported_flags);
542
543 if(flags & SET_FEATURE_ON_PROCESS)
545
546 return S_OK;
547}
static void set_feature_on_process(INTERNETFEATURELIST feature, BOOL enable)
Definition: internet.c:523

Referenced by CoInternetSetFeatureEnabled().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( urlmon  )

Variable Documentation

◆ feature_addon_managementW

const WCHAR feature_addon_managementW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','A','D','D','O','N','_','M','A','N','A','G','E','M','E','N','T',0}

Definition at line 61 of file internet.c.

◆ feature_behaviorsW

const WCHAR feature_behaviorsW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','B','E','H','A','V','I','O','R','S',0}

Definition at line 47 of file internet.c.

◆ feature_block_input_promptsW

const WCHAR feature_block_input_promptsW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','B','L','O','C','K','_','I','N','P','U','T','_','P','R','O','M','P','T','S',0}

Definition at line 95 of file internet.c.

◆ feature_control_keyW

const WCHAR feature_control_keyW[]
static
Initial value:
=
{'S','o','f','t','w','a','r','e','\\',
'M','i','c','r','o','s','o','f','t','\\',
'I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r','\\',
'M','a','i','n','\\',
'F','e','a','t','u','r','e','C','o','n','t','r','o','l',0}

Definition at line 28 of file internet.c.

Referenced by load_process_feature().

◆ feature_disable_legacy_compressionW

const WCHAR feature_disable_legacy_compressionW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','D','I','S','A','B','L','E','_','L','E','G','A','C','Y','_',
'C','O','M','P','R','E','S','S','I','O','N',0}

Definition at line 82 of file internet.c.

◆ feature_disable_mk_protocolW

const WCHAR feature_disable_mk_protocolW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','D','I','S','A','B','L','E','_','M','K','_','P','R','O','T','O','C','O','L',0}

Definition at line 49 of file internet.c.

◆ feature_disable_navigation_soundsW

const WCHAR feature_disable_navigation_soundsW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','D','I','S','A','B','L','E','_','N','A','V','I','G','A','T','I','O','N','_',
'S','O','U','N','D','S',0}

Definition at line 79 of file internet.c.

◆ feature_disable_telnet_protocolW

const WCHAR feature_disable_telnet_protocolW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','D','I','S','A','B','L','E','_','T','E','L','N','E','T','_',
'P','R','O','T','O','C','O','L',0}

Definition at line 90 of file internet.c.

◆ feature_feedsW

const WCHAR feature_feedsW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','F','E','E','D','S',0}

Definition at line 93 of file internet.c.

◆ feature_force_addr_and_statusW

const WCHAR feature_force_addr_and_statusW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','F','O','R','C','E','_','A','D','D','R','_','A','N','D','_',
'S','T','A','T','U','S',0}

Definition at line 85 of file internet.c.

◆ feature_get_url_dom_filepath_unencodedW

const WCHAR feature_get_url_dom_filepath_unencodedW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','G','E','T','_','U','R','L','_','D','O','M','_',
'F','I','L','E','P','A','T','H','_','U','N','E','N','C','O','D','E','D',0}

Definition at line 72 of file internet.c.

◆ feature_http_username_password_disableW

const WCHAR feature_http_username_password_disableW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','H','T','T','P','_','U','S','E','R','N','A','M','E','_',
'P','A','S','S','W','O','R','D','_','D','I','S','A','B','L','E',0}

Definition at line 65 of file internet.c.

◆ feature_localmachine_lockdownW

const WCHAR feature_localmachine_lockdownW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','L','O','C','A','L','M','A','C','H','I','N','E','_','L','O','C','K','D','O','W','N',0}

Definition at line 51 of file internet.c.

◆ feature_mime_handlingW

const WCHAR feature_mime_handlingW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','M','I','M','E','_','H','A','N','D','L','I','N','G',0}

Definition at line 39 of file internet.c.

◆ feature_mime_sniffingW

const WCHAR feature_mime_sniffingW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','M','I','M','E','_','S','N','I','F','F','I','N','G',0}

Definition at line 41 of file internet.c.

◆ feature_object_cachingW

const WCHAR feature_object_cachingW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','O','B','J','E','C','T','_','C','A','C','H','I','N','G',0}

Definition at line 35 of file internet.c.

◆ feature_protocol_lockdownW

const WCHAR feature_protocol_lockdownW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','P','R','O','T','O','C','O','L','_','L','O','C','K','D','O','W','N',0}

Definition at line 63 of file internet.c.

◆ feature_restrict_activexinstallW

const WCHAR feature_restrict_activexinstallW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','R','E','S','T','R','I','C','T','_','A','C','T','I','V','E','X','I','N','S','T','A','L','L',0}

Definition at line 55 of file internet.c.

◆ feature_restrict_filedownloadW

const WCHAR feature_restrict_filedownloadW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','R','E','S','T','R','I','C','T','_','F','I','L','E','D','O','W','N','L','O','A','D',0}

Definition at line 59 of file internet.c.

◆ feature_safe_bindtoobjectW

const WCHAR feature_safe_bindtoobjectW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','S','A','F','E','_','B','I','N','D','T','O','O','B','J','E','C','T',0}

Definition at line 68 of file internet.c.

◆ feature_securitybandW

const WCHAR feature_securitybandW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','S','E','C','U','R','I','T','Y','B','A','N','D',0}

Definition at line 53 of file internet.c.

◆ feature_ssluxW

const WCHAR feature_ssluxW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','S','S','L','U','X',0}

Definition at line 77 of file internet.c.

◆ feature_tabbed_browsingW

const WCHAR feature_tabbed_browsingW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','T','A','B','B','E','D','_','B','R','O','W','S','I','N','G',0}

Definition at line 75 of file internet.c.

◆ feature_unc_savedfilecheckW

const WCHAR feature_unc_savedfilecheckW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','U','N','C','_','S','A','V','E','D','F','I','L','E','C','H','E','C','K',0}

Definition at line 70 of file internet.c.

◆ feature_validate_navigate_urlW

const WCHAR feature_validate_navigate_urlW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','V','A','L','I','D','A','T','E','_','N','A','V','I','G','A','T','E','_','U','R','L',0}

Definition at line 57 of file internet.c.

◆ feature_weboc_popupmanagementW

const WCHAR feature_weboc_popupmanagementW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','W','E','B','O','C','_','P','O','P','U','P','M','A','N','A','G','E','M','E','N','T',0}

Definition at line 45 of file internet.c.

◆ feature_window_restrictionsW

const WCHAR feature_window_restrictionsW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','W','I','N','D','O','W','_','R','E','S','T','R','I','C','T','I','O','N','S',0}

Definition at line 43 of file internet.c.

◆ feature_xmlhttpW

const WCHAR feature_xmlhttpW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','X','M','L','H','T','T','P',0}

Definition at line 88 of file internet.c.

◆ feature_zone_elevationW

const WCHAR feature_zone_elevationW[]
static
Initial value:
=
{'F','E','A','T','U','R','E','_','Z','O','N','E','_','E','L','E','V','A','T','I','O','N',0}

Definition at line 37 of file internet.c.

◆ process_feature_controls

feature_control process_feature_controls[FEATURE_ENTRY_COUNT]
static
Initial value:
= {
}
static const WCHAR feature_disable_mk_protocolW[]
Definition: internet.c:49
static const WCHAR feature_addon_managementW[]
Definition: internet.c:61
static const WCHAR feature_window_restrictionsW[]
Definition: internet.c:43
static const WCHAR feature_http_username_password_disableW[]
Definition: internet.c:65
static const WCHAR feature_behaviorsW[]
Definition: internet.c:47
static const WCHAR feature_mime_handlingW[]
Definition: internet.c:39
static const WCHAR feature_ssluxW[]
Definition: internet.c:77
static const WCHAR feature_unc_savedfilecheckW[]
Definition: internet.c:70
static const WCHAR feature_tabbed_browsingW[]
Definition: internet.c:75
static const WCHAR feature_xmlhttpW[]
Definition: internet.c:88
static const WCHAR feature_feedsW[]
Definition: internet.c:93
static const WCHAR feature_disable_telnet_protocolW[]
Definition: internet.c:90
static const WCHAR feature_zone_elevationW[]
Definition: internet.c:37
static const WCHAR feature_disable_navigation_soundsW[]
Definition: internet.c:79
static const WCHAR feature_get_url_dom_filepath_unencodedW[]
Definition: internet.c:72
static const WCHAR feature_disable_legacy_compressionW[]
Definition: internet.c:82
static const WCHAR feature_protocol_lockdownW[]
Definition: internet.c:63
static const WCHAR feature_object_cachingW[]
Definition: internet.c:35
static const WCHAR feature_block_input_promptsW[]
Definition: internet.c:95
static const WCHAR feature_validate_navigate_urlW[]
Definition: internet.c:57
static const WCHAR feature_securitybandW[]
Definition: internet.c:53
static const WCHAR feature_force_addr_and_statusW[]
Definition: internet.c:85
static const WCHAR feature_restrict_activexinstallW[]
Definition: internet.c:55
static const WCHAR feature_localmachine_lockdownW[]
Definition: internet.c:51
static const WCHAR feature_safe_bindtoobjectW[]
Definition: internet.c:68
static const WCHAR feature_weboc_popupmanagementW[]
Definition: internet.c:45
static const WCHAR feature_mime_sniffingW[]
Definition: internet.c:41
static const WCHAR feature_restrict_filedownloadW[]
Definition: internet.c:59

Definition at line 118 of file internet.c.

Referenced by get_feature_from_process(), load_process_feature(), and set_feature_on_process().

◆ process_features_cs

static CRITICAL_SECTION process_features_cs = { &process_features_cs_dbg, -1, 0, 0, 0, 0 }
static

Definition at line 98 of file internet.c.

Referenced by get_feature_from_process(), and set_feature_on_process().

◆ process_features_cs_dbg

CRITICAL_SECTION_DEBUG process_features_cs_dbg
static
Initial value:
=
{
0, 0, { (DWORD_PTR)(__FILE__ ": process features") }
}
static CRITICAL_SECTION_DEBUG process_features_cs_dbg
Definition: internet.c:99
LIST_ENTRY ProcessLocksList
Definition: winbase.h:883
#define DWORD_PTR
Definition: treelist.c:76

Definition at line 99 of file internet.c.