ReactOS 0.4.17-dev-573-g8315b8c
umon.c File Reference
#include "urlmon_main.h"
#include "winreg.h"
#include "shlwapi.h"
#include "hlink.h"
#include "shellapi.h"
#include "wine/debug.h"
Include dependency graph for umon.c:

Go to the source code of this file.

Classes

struct  URLMoniker
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (urlmon)
 
static URLMonikerimpl_from_IMoniker (IMoniker *iface)
 
static HRESULT WINAPI URLMoniker_QueryInterface (IMoniker *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI URLMoniker_AddRef (IMoniker *iface)
 
static ULONG WINAPI URLMoniker_Release (IMoniker *iface)
 
static HRESULT WINAPI URLMoniker_GetClassID (IMoniker *iface, CLSID *pClassID)
 
static HRESULT WINAPI URLMoniker_IsDirty (IMoniker *iface)
 
static HRESULT WINAPI URLMoniker_Load (IMoniker *iface, IStream *pStm)
 
static HRESULT WINAPI URLMoniker_Save (IMoniker *iface, IStream *pStm, BOOL fClearDirty)
 
static HRESULT WINAPI URLMoniker_GetSizeMax (IMoniker *iface, ULARGE_INTEGER *pcbSize)
 
static HRESULT WINAPI URLMoniker_BindToObject (IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppv)
 
static HRESULT WINAPI URLMoniker_BindToStorage (IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppvObject)
 
static HRESULT WINAPI URLMoniker_Reduce (IMoniker *iface, IBindCtx *pbc, DWORD dwReduceHowFar, IMoniker **ppmkToLeft, IMoniker **ppmkReduced)
 
static HRESULT WINAPI URLMoniker_ComposeWith (IMoniker *iface, IMoniker *right, BOOL only_if_not_generic, IMoniker **composite)
 
static HRESULT WINAPI URLMoniker_Enum (IMoniker *iface, BOOL fForward, IEnumMoniker **ppenumMoniker)
 
static HRESULT WINAPI URLMoniker_IsEqual (IMoniker *iface, IMoniker *pmkOtherMoniker)
 
static HRESULT WINAPI URLMoniker_Hash (IMoniker *iface, DWORD *pdwHash)
 
static HRESULT WINAPI URLMoniker_IsRunning (IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, IMoniker *pmkNewlyRunning)
 
static HRESULT WINAPI URLMoniker_GetTimeOfLastChange (IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, FILETIME *pFileTime)
 
static HRESULT WINAPI URLMoniker_Inverse (IMoniker *iface, IMoniker **ppmk)
 
static HRESULT WINAPI URLMoniker_CommonPrefixWith (IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkPrefix)
 
static HRESULT WINAPI URLMoniker_RelativePathTo (IMoniker *iface, IMoniker *pmOther, IMoniker **ppmkRelPath)
 
static HRESULT WINAPI URLMoniker_GetDisplayName (IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName)
 
static HRESULT WINAPI URLMoniker_ParseDisplayName (IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut)
 
static HRESULT WINAPI URLMoniker_IsSystemMoniker (IMoniker *iface, DWORD *pwdMksys)
 
static URLMonikerimpl_from_IUriContainer (IUriContainer *iface)
 
static HRESULT WINAPI UriContainer_QueryInterface (IUriContainer *iface, REFIID riid, void **ppv)
 
static ULONG WINAPI UriContainer_AddRef (IUriContainer *iface)
 
static ULONG WINAPI UriContainer_Release (IUriContainer *iface)
 
static HRESULT WINAPI UriContainer_GetIUri (IUriContainer *iface, IUri **ppIUri)
 
static HRESULT create_moniker (IUri *uri, URLMoniker **ret)
 
HRESULT StdURLMoniker_Construct (IUnknown *outer, void **ppv)
 
HRESULT WINAPI CreateURLMonikerEx (IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk, DWORD dwFlags)
 
HRESULT WINAPI CreateURLMonikerEx2 (IMoniker *pmkContext, IUri *pUri, IMoniker **ppmk, DWORD dwFlags)
 
HRESULT WINAPI CreateURLMoniker (IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk)
 
HRESULT WINAPI IsAsyncMoniker (IMoniker *pmk)
 
HRESULT WINAPI BindAsyncMoniker (IMoniker *pmk, DWORD grfOpt, IBindStatusCallback *pbsc, REFIID iidResult, LPVOID *ppvResult)
 
HRESULT WINAPI MkParseDisplayNameEx (IBindCtx *pbc, LPCWSTR szDisplayName, ULONG *pchEaten, LPMONIKER *ppmk)
 
HRESULT WINAPI URLDownloadToCacheFileA (LPUNKNOWN lpUnkCaller, LPCSTR szURL, LPSTR szFileName, DWORD dwBufLength, DWORD dwReserved, LPBINDSTATUSCALLBACK pBSC)
 
HRESULT WINAPI URLDownloadToCacheFileW (LPUNKNOWN lpUnkCaller, LPCWSTR szURL, LPWSTR szFileName, DWORD dwBufLength, DWORD dwReserved, LPBINDSTATUSCALLBACK pBSC)
 
HRESULT WINAPI HlinkSimpleNavigateToMoniker (IMoniker *pmkTarget, LPCWSTR szLocation, LPCWSTR szTargetFrameName, IUnknown *pUnk, IBindCtx *pbc, IBindStatusCallback *pbsc, DWORD grfHLNF, DWORD dwReserved)
 
HRESULT WINAPI HlinkSimpleNavigateToString (LPCWSTR szTarget, LPCWSTR szLocation, LPCWSTR szTargetFrameName, IUnknown *pUnk, IBindCtx *pbc, IBindStatusCallback *pbsc, DWORD grfHLNF, DWORD dwReserved)
 
HRESULT WINAPI HlinkNavigateString (IUnknown *pUnk, LPCWSTR szTarget)
 
HRESULT WINAPI GetSoftwareUpdateInfo (LPCWSTR szDistUnit, LPSOFTDISTINFO psdi)
 

Variables

static const IMonikerVtbl URLMonikerVtbl
 
static const IUriContainerVtbl UriContainerVtbl
 
static const DWORD create_flags_map [3]
 
static const DWORD combine_flags_map [3]
 

Function Documentation

◆ BindAsyncMoniker()

HRESULT WINAPI BindAsyncMoniker ( IMoniker pmk,
DWORD  grfOpt,
IBindStatusCallback pbsc,
REFIID  iidResult,
LPVOID ppvResult 
)

Definition at line 786 of file umon.c.

787{
788 LPBC pbc = NULL;
790
791 TRACE("(%p %08lx %p %s %p)\n", pmk, grfOpt, pbsc, debugstr_guid(iidResult), ppvResult);
792
793 if (pmk && ppvResult)
794 {
795 *ppvResult = NULL;
796
797 hr = CreateAsyncBindCtx(0, pbsc, NULL, &pbc);
798 if (hr == NOERROR)
799 {
800 hr = IMoniker_BindToObject(pmk, pbc, NULL, iidResult, ppvResult);
801 IBindCtx_Release(pbc);
802 }
803 }
804 return hr;
805}
#define E_INVALIDARG
Definition: ddrawi.h:101
HRESULT hr
Definition: delayimp.cpp:582
#define NULL
Definition: types.h:112
#define debugstr_guid
Definition: kernel32.h:35
interface IBindCtx * LPBC
Definition: objfwd.h:18
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT WINAPI CreateAsyncBindCtx(DWORD reserved, IBindStatusCallback *callback, IEnumFORMATETC *format, IBindCtx **pbind)
Definition: bindctx.c:899
#define NOERROR
Definition: winerror.h:3448

◆ create_moniker()

static HRESULT create_moniker ( IUri uri,
URLMoniker **  ret 
)
static

Definition at line 555 of file umon.c.

556{
557 URLMoniker *mon;
559
560 mon = malloc(sizeof(*mon));
561 if(!mon)
562 return E_OUTOFMEMORY;
563
564 mon->IMoniker_iface.lpVtbl = &URLMonikerVtbl;
566 mon->ref = 1;
567
568 if(uri) {
569 /* FIXME: try to avoid it */
570 hres = IUri_GetDisplayUri(uri, &mon->URLName);
571 if(FAILED(hres)) {
572 free(mon);
573 return hres;
574 }
575
576 IUri_AddRef(uri);
577 mon->uri = uri;
578 }else {
579 mon->URLName = NULL;
580 mon->uri = NULL;
581 }
582
584 *ret = mon;
585 return S_OK;
586}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define free
Definition: debug_ros.c:5
#define malloc
Definition: debug_ros.c:4
return ret
Definition: mutex.c:146
#define S_OK
Definition: intsafe.h:52
#define FAILED(hr)
Definition: intsafe.h:51
HRESULT hres
Definition: protocol.c:465
const WCHAR * uri
Definition: sec_mgr.c:1564
LONG ref
Definition: umon.c:38
IMoniker IMoniker_iface
Definition: umon.c:35
IUriContainer IUriContainer_iface
Definition: umon.c:36
BSTR URLName
Definition: umon.c:41
IUri * uri
Definition: umon.c:40
static const IUriContainerVtbl UriContainerVtbl
Definition: umon.c:548
static const IMonikerVtbl URLMonikerVtbl
Definition: umon.c:482
static void URLMON_LockModule(void)
Definition: urlmon_main.h:64

Referenced by CreateURLMonikerEx(), CreateURLMonikerEx2(), and StdURLMoniker_Construct().

◆ CreateURLMoniker()

◆ CreateURLMonikerEx()

HRESULT WINAPI CreateURLMonikerEx ( IMoniker pmkContext,
LPCWSTR  szURL,
IMoniker **  ppmk,
DWORD  dwFlags 
)

Definition at line 631 of file umon.c.

632{
633 IUri *uri, *base_uri = NULL;
636
637 TRACE("(%p, %s, %p, %08lx)\n", pmkContext, debugstr_w(szURL), ppmk, dwFlags);
638
639 if (ppmk)
640 *ppmk = NULL;
641
642 if (!szURL || !ppmk)
643 return E_INVALIDARG;
644
646 FIXME("Unsupported flags %lx\n", dwFlags);
647 return E_INVALIDARG;
648 }
649
650 if(pmkContext) {
651 IUriContainer *uri_container;
652
653 hres = IMoniker_QueryInterface(pmkContext, &IID_IUriContainer, (void**)&uri_container);
654 if(SUCCEEDED(hres)) {
655 hres = IUriContainer_GetIUri(uri_container, &base_uri);
656 IUriContainer_Release(uri_container);
657 if(FAILED(hres))
658 return hres;
659 }
660 }
661
662 if(base_uri) {
663 hres = CoInternetCombineUrlEx(base_uri, szURL, combine_flags_map[dwFlags], &uri, 0);
664 IUri_Release(base_uri);
665 }else {
666 hres = CreateUri(szURL, Uri_CREATE_ALLOW_RELATIVE|Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME|create_flags_map[dwFlags], 0, &uri);
667 }
668 if(FAILED(hres))
669 return hres;
670
672 IUri_Release(uri);
673 if(FAILED(hres))
674 return hres;
675
676 *ppmk = &obj->IMoniker_iface;
677 return S_OK;
678}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define FIXME(fmt,...)
Definition: precomp.h:53
HRESULT WINAPI CreateUri(LPCWSTR pwzURI, DWORD dwFlags, DWORD_PTR dwReserved, IUri **ppURI)
Definition: uri.c:5382
HRESULT WINAPI CoInternetCombineUrlEx(IUri *pBaseUri, LPCWSTR pwzRelativeUrl, DWORD dwCombineFlags, IUri **ppCombinedUri, DWORD_PTR dwReserved)
Definition: uri.c:6442
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define debugstr_w
Definition: kernel32.h:32
_In_ LPWSTR _In_ DWORD _In_ DWORD _In_ DWORD dwFlags
Definition: netsh.h:141
static const DWORD create_flags_map[3]
Definition: umon.c:603
static HRESULT create_moniker(IUri *uri, URLMoniker **ret)
Definition: umon.c:555
static const DWORD combine_flags_map[3]
Definition: umon.c:609

Referenced by CreateURLMoniker(), and handle_xml_load().

◆ CreateURLMonikerEx2()

HRESULT WINAPI CreateURLMonikerEx2 ( IMoniker pmkContext,
IUri pUri,
IMoniker **  ppmk,
DWORD  dwFlags 
)

Definition at line 683 of file umon.c.

684{
685 IUri *context_uri = NULL, *uri;
686 IUriContainer *uri_container;
689
690 TRACE("(%p %p %p %lx)\n", pmkContext, pUri, ppmk, dwFlags);
691
692 if (ppmk)
693 *ppmk = NULL;
694
695 if (!pUri || !ppmk)
696 return E_INVALIDARG;
697
699 FIXME("Unsupported flags %lx\n", dwFlags);
700 return E_INVALIDARG;
701 }
702
703 if(pmkContext) {
704 hres = IMoniker_QueryInterface(pmkContext, &IID_IUriContainer, (void**)&uri_container);
705 if(SUCCEEDED(hres)) {
706 hres = IUriContainer_GetIUri(uri_container, &context_uri);
707 if(FAILED(hres))
708 context_uri = NULL;
709 IUriContainer_Release(uri_container);
710 }
711 }
712
713 if(context_uri) {
714 hres = CoInternetCombineIUri(context_uri, pUri, combine_flags_map[dwFlags], &uri, 0);
715 IUri_Release(context_uri);
716 if(FAILED(hres))
717 return hres;
718 }else {
719 uri = pUri;
720 IUri_AddRef(uri);
721 }
722
724 IUri_Release(uri);
725 if(FAILED(hres))
726 return hres;
727
728 *ppmk = &ret->IMoniker_iface;
729 return S_OK;
730}
HRESULT WINAPI CoInternetCombineIUri(IUri *pBaseUri, IUri *pRelativeUri, DWORD dwCombineFlags, IUri **ppCombinedUri, DWORD_PTR dwReserved)
Definition: uri.c:6396

Referenced by async_open(), bind_script_to_text(), BindStatusCallback_create(), create_moniker_from_url(), domdoc_load(), download_to_cache(), super_navigate(), TargetFramePriv2_AggregatedNavigation2(), URLMoniker_ComposeWith(), and xslt_doc_default_loader().

◆ GetSoftwareUpdateInfo()

HRESULT WINAPI GetSoftwareUpdateInfo ( LPCWSTR  szDistUnit,
LPSOFTDISTINFO  psdi 
)

Definition at line 974 of file umon.c.

975{
976 FIXME("%s %p\n", debugstr_w(szDistUnit), psdi );
977 return E_FAIL;
978}
#define E_FAIL
Definition: ddrawi.h:102

◆ HlinkNavigateString()

HRESULT WINAPI HlinkNavigateString ( IUnknown pUnk,
LPCWSTR  szTarget 
)

Definition at line 964 of file umon.c.

965{
966 TRACE("%p %s\n", pUnk, debugstr_w( szTarget ) );
968 szTarget, NULL, NULL, pUnk, NULL, NULL, 0, 0 );
969}
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
HRESULT WINAPI HlinkSimpleNavigateToString(LPCWSTR szTarget, LPCWSTR szLocation, LPCWSTR szTargetFrameName, IUnknown *pUnk, IBindCtx *pbc, IBindStatusCallback *pbsc, DWORD grfHLNF, DWORD dwReserved)
Definition: umon.c:934

◆ HlinkSimpleNavigateToMoniker()

HRESULT WINAPI HlinkSimpleNavigateToMoniker ( IMoniker pmkTarget,
LPCWSTR  szLocation,
LPCWSTR  szTargetFrameName,
IUnknown pUnk,
IBindCtx pbc,
IBindStatusCallback pbsc,
DWORD  grfHLNF,
DWORD  dwReserved 
)

Definition at line 913 of file umon.c.

916{
919
920 TRACE("\n");
921
922 hres = IMoniker_GetDisplayName(pmkTarget, pbc, 0, &target);
923 if(hres == S_OK)
924 hres = HlinkSimpleNavigateToString( target, szLocation, szTargetFrameName,
925 pUnk, pbc, pbsc, grfHLNF, dwReserved );
927
928 return hres;
929}
void WINAPI CoTaskMemFree(void *ptr)
Definition: malloc.c:389
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
Definition: tools.h:99
uint16_t * LPWSTR
Definition: typedefs.h:56

◆ HlinkSimpleNavigateToString()

HRESULT WINAPI HlinkSimpleNavigateToString ( LPCWSTR  szTarget,
LPCWSTR  szLocation,
LPCWSTR  szTargetFrameName,
IUnknown pUnk,
IBindCtx pbc,
IBindStatusCallback pbsc,
DWORD  grfHLNF,
DWORD  dwReserved 
)

Definition at line 934 of file umon.c.

937{
938 FIXME("%s %s %s %p %p %p %lu %lu partial stub\n", debugstr_w( szTarget ), debugstr_w( szLocation ),
939 debugstr_w( szTargetFrameName ), pUnk, pbc, pbsc, grfHLNF, dwReserved);
940
941 /* undocumented: 0 means HLNF_OPENINNEWWINDOW*/
942 if (!grfHLNF) grfHLNF = HLNF_OPENINNEWWINDOW;
943
944 if (grfHLNF == HLNF_OPENINNEWWINDOW)
945 {
947
948 memset(&sei, 0, sizeof(sei));
949 sei.cbSize = sizeof(sei);
950 sei.lpVerb = L"open";
951 sei.nShow = SW_SHOWNORMAL;
953 sei.lpFile = szTarget;
954
955 if (ShellExecuteExW(&sei)) return S_OK;
956 }
957
958 return E_NOTIMPL;
959}
#define E_NOTIMPL
Definition: ddrawi.h:99
#define L(x)
Definition: resources.c:13
#define memset(x, y, z)
Definition: compat.h:39
#define SEE_MASK_FLAG_NO_UI
Definition: shellapi.h:38
#define SEE_MASK_NO_CONSOLE
Definition: shellapi.h:41
BOOL WINAPI DECLSPEC_HOTPATCH ShellExecuteExW(LPSHELLEXECUTEINFOW sei)
Definition: shlexec.cpp:2723
#define SW_SHOWNORMAL
Definition: winuser.h:781

Referenced by general_dlg_proc(), HlinkNavigateString(), HlinkSimpleNavigateToMoniker(), and user_notice_dlg_proc().

◆ impl_from_IMoniker()

◆ impl_from_IUriContainer()

static URLMoniker * impl_from_IUriContainer ( IUriContainer iface)
inlinestatic

Definition at line 509 of file umon.c.

510{
511 return CONTAINING_RECORD(iface, URLMoniker, IUriContainer_iface);
512}

Referenced by UriContainer_AddRef(), UriContainer_GetIUri(), UriContainer_QueryInterface(), and UriContainer_Release().

◆ IsAsyncMoniker()

HRESULT WINAPI IsAsyncMoniker ( IMoniker pmk)

Definition at line 755 of file umon.c.

756{
757 IUnknown *am;
758
759 TRACE("(%p)\n", pmk);
760 if(!pmk)
761 return E_INVALIDARG;
762 if(SUCCEEDED(IMoniker_QueryInterface(pmk, &IID_IAsyncMoniker, (void**)&am))) {
763 IUnknown_Release(am);
764 return S_OK;
765 }
766 return S_FALSE;
767}
#define S_FALSE
Definition: winerror.h:3451

◆ MkParseDisplayNameEx()

HRESULT WINAPI MkParseDisplayNameEx ( IBindCtx pbc,
LPCWSTR  szDisplayName,
ULONG pchEaten,
LPMONIKER ppmk 
)

Definition at line 810 of file umon.c.

811{
812 TRACE("(%p %s %p %p)\n", pbc, debugstr_w(szDisplayName), pchEaten, ppmk);
813
814 if (!pbc || !szDisplayName || !*szDisplayName || !pchEaten || !ppmk)
815 return E_INVALIDARG;
816
817 if(is_registered_protocol(szDisplayName)) {
819
820 hres = CreateURLMoniker(NULL, szDisplayName, ppmk);
821 if(SUCCEEDED(hres)) {
822 *pchEaten = lstrlenW(szDisplayName);
823 return hres;
824 }
825 }
826
827 return MkParseDisplayName(pbc, szDisplayName, pchEaten, ppmk);
828}
#define lstrlenW
Definition: compat.h:750
HRESULT WINAPI MkParseDisplayName(LPBC pbc, LPCOLESTR szDisplayName, LPDWORD pchEaten, LPMONIKER *ppmk)
Definition: moniker.c:838
BOOL is_registered_protocol(LPCWSTR url)
Definition: session.c:160
HRESULT WINAPI CreateURLMoniker(IMoniker *pmkContext, LPCWSTR szURL, IMoniker **ppmk)
Definition: umon.c:747

Referenced by HlinkParseDisplayName(), and test_MkParseDisplayNameEx().

◆ StdURLMoniker_Construct()

HRESULT StdURLMoniker_Construct ( IUnknown outer,
void **  ppv 
)

Definition at line 588 of file umon.c.

589{
590 URLMoniker *mon;
592
593 TRACE("(%p %p)\n", outer, ppv);
594
595 hres = create_moniker(NULL, &mon);
596 if(FAILED(hres))
597 return hres;
598
599 *ppv = &mon->IMoniker_iface;
600 return S_OK;
601}
REFIID LPVOID * ppv
Definition: atlbase.h:39
static IUnknown * outer
Definition: compobj.c:82

◆ UriContainer_AddRef()

static ULONG WINAPI UriContainer_AddRef ( IUriContainer iface)
static

Definition at line 520 of file umon.c.

521{
523 return IMoniker_AddRef(&This->IMoniker_iface);
524}
static URLMoniker * impl_from_IUriContainer(IUriContainer *iface)
Definition: umon.c:509

◆ UriContainer_GetIUri()

static HRESULT WINAPI UriContainer_GetIUri ( IUriContainer iface,
IUri **  ppIUri 
)
static

Definition at line 532 of file umon.c.

533{
535
536 TRACE("(%p)->(%p)\n", This, ppIUri);
537
538 if(!This->uri) {
539 *ppIUri = NULL;
540 return S_FALSE;
541 }
542
543 IUri_AddRef(This->uri);
544 *ppIUri = This->uri;
545 return S_OK;
546}

◆ UriContainer_QueryInterface()

static HRESULT WINAPI UriContainer_QueryInterface ( IUriContainer iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 514 of file umon.c.

515{
517 return IMoniker_QueryInterface(&This->IMoniker_iface, riid, ppv);
518}
REFIID riid
Definition: atlbase.h:39

◆ UriContainer_Release()

static ULONG WINAPI UriContainer_Release ( IUriContainer iface)
static

Definition at line 526 of file umon.c.

527{
529 return IMoniker_Release(&This->IMoniker_iface);
530}

◆ URLDownloadToCacheFileA()

HRESULT WINAPI URLDownloadToCacheFileA ( LPUNKNOWN  lpUnkCaller,
LPCSTR  szURL,
LPSTR  szFileName,
DWORD  dwBufLength,
DWORD  dwReserved,
LPBINDSTATUSCALLBACK  pBSC 
)

Definition at line 834 of file umon.c.

836{
838 int len;
840
841 TRACE("(%p %s %p %ld %ld %p)\n", lpUnkCaller, debugstr_a(szURL), szFileName,
842 dwBufLength, dwReserved, pBSC);
843
844 if(szURL) {
845 len = MultiByteToWideChar(CP_ACP, 0, szURL, -1, NULL, 0);
846 url = malloc(len * sizeof(WCHAR));
847 MultiByteToWideChar(CP_ACP, 0, szURL, -1, url, len);
848 }
849
850 if(szFileName)
851 file_name = malloc(dwBufLength * sizeof(WCHAR));
852
853 hres = URLDownloadToCacheFileW(lpUnkCaller, url, file_name, dwBufLength*sizeof(WCHAR),
854 dwReserved, pBSC);
855
856 if(SUCCEEDED(hres) && file_name)
857 WideCharToMultiByte(CP_ACP, 0, file_name, -1, szFileName, dwBufLength, NULL, NULL);
858
859 free(url);
861
862 return hres;
863}
#define CP_ACP
Definition: compat.h:109
#define WideCharToMultiByte
Definition: compat.h:111
#define MultiByteToWideChar
Definition: compat.h:110
GLenum GLsizei len
Definition: glext.h:6722
#define debugstr_a
Definition: kernel32.h:31
static const WCHAR url[]
Definition: encode.c:1384
static LPCWSTR file_name
Definition: protocol.c:152
short WCHAR
Definition: pedump.c:58
HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN lpUnkCaller, LPCWSTR szURL, LPWSTR szFileName, DWORD dwBufLength, DWORD dwReserved, LPBINDSTATUSCALLBACK pBSC)
Definition: umon.c:868

◆ URLDownloadToCacheFileW()

HRESULT WINAPI URLDownloadToCacheFileW ( LPUNKNOWN  lpUnkCaller,
LPCWSTR  szURL,
LPWSTR  szFileName,
DWORD  dwBufLength,
DWORD  dwReserved,
LPBINDSTATUSCALLBACK  pBSC 
)

Definition at line 868 of file umon.c.

870{
871 WCHAR cache_path[MAX_PATH + 1];
872 FILETIME expire, modified;
873 HRESULT hr;
874 LPWSTR ext;
875
876 static WCHAR header[] = L"HTTP/1.0 200 OK\\r\\n\\r\\n";
877
878 TRACE("(%p, %s, %p, %ld, %ld, %p)\n", lpUnkCaller, debugstr_w(szURL),
879 szFileName, dwBufLength, dwReserved, pBSC);
880
881 if (!szURL || !szFileName)
882 return E_INVALIDARG;
883
884 ext = PathFindExtensionW(szURL);
885
886 if (!CreateUrlCacheEntryW(szURL, 0, ext, cache_path, 0))
887 return E_FAIL;
888
889 hr = URLDownloadToFileW(lpUnkCaller, szURL, cache_path, 0, pBSC);
890 if (FAILED(hr))
891 return hr;
892
893 expire.dwHighDateTime = 0;
894 expire.dwLowDateTime = 0;
895 modified.dwHighDateTime = 0;
896 modified.dwLowDateTime = 0;
897
898 if (!CommitUrlCacheEntryW(szURL, cache_path, expire, modified, NORMAL_CACHE_ENTRY,
899 header, sizeof(header), NULL, NULL))
900 return E_FAIL;
901
902 if (lstrlenW(cache_path) > dwBufLength)
903 return E_OUTOFMEMORY;
904
905 lstrcpyW(szFileName, cache_path);
906
907 return S_OK;
908}
#define MAX_PATH
Definition: compat.h:34
#define lstrcpyW
Definition: compat.h:749
static const WCHAR *const ext[]
Definition: module.c:53
LPWSTR WINAPI PathFindExtensionW(const WCHAR *path)
Definition: path.c:1250
BOOL WINAPI CreateUrlCacheEntryW(LPCWSTR lpszUrlName, DWORD dwExpectedFileSize, LPCWSTR lpszFileExtension, LPWSTR lpszFileName, DWORD dwReserved)
Definition: urlcache.c:2815
BOOL WINAPI CommitUrlCacheEntryW(LPCWSTR lpszUrlName, LPCWSTR lpszLocalFileName, FILETIME ExpireTime, FILETIME LastModifiedTime, DWORD CacheEntryType, LPWSTR lpHeaderInfo, DWORD dwHeaderSize, LPCWSTR lpszFileExtension, LPCWSTR lpszOriginalUrl)
Definition: urlcache.c:3085
DWORD dwHighDateTime
Definition: mapidefs.h:66
DWORD dwLowDateTime
Definition: mapidefs.h:65
HRESULT WINAPI URLDownloadToFileW(LPUNKNOWN pCaller, LPCWSTR szURL, LPCWSTR szFileName, DWORD dwReserved, LPBINDSTATUSCALLBACK lpfnCB)
Definition: download.c:427
#define NORMAL_CACHE_ENTRY
Definition: wininet.h:2087

Referenced by msi_download_file(), and URLDownloadToCacheFileA().

◆ URLMoniker_AddRef()

static ULONG WINAPI URLMoniker_AddRef ( IMoniker iface)
static

Definition at line 84 of file umon.c.

85{
87 ULONG refCount = InterlockedIncrement(&This->ref);
88
89 TRACE("(%p) ref=%lu\n",This, refCount);
90
91 return refCount;
92}
#define InterlockedIncrement
Definition: armddk.h:53
uint32_t ULONG
Definition: typedefs.h:59
static URLMoniker * impl_from_IMoniker(IMoniker *iface)
Definition: umon.c:44

◆ URLMoniker_BindToObject()

static HRESULT WINAPI URLMoniker_BindToObject ( IMoniker iface,
IBindCtx pbc,
IMoniker pmkToLeft,
REFIID  riid,
void **  ppv 
)
static

Definition at line 225 of file umon.c.

227{
229 IRunningObjectTable *obj_tbl;
231
232 TRACE("(%p)->(%p,%p,%s,%p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppv);
233
234 hres = IBindCtx_GetRunningObjectTable(pbc, &obj_tbl);
235 if(SUCCEEDED(hres)) {
236 hres = IRunningObjectTable_IsRunning(obj_tbl, &This->IMoniker_iface);
237 if(hres == S_OK) {
238 IUnknown *unk = NULL;
239
240 TRACE("Found in running object table\n");
241
242 hres = IRunningObjectTable_GetObject(obj_tbl, &This->IMoniker_iface, &unk);
243 if(SUCCEEDED(hres)) {
244 hres = IUnknown_QueryInterface(unk, riid, ppv);
245 IUnknown_Release(unk);
246 }
247
248 IRunningObjectTable_Release(obj_tbl);
249 return hres;
250 }
251
252 IRunningObjectTable_Release(obj_tbl);
253 }
254
255 if(!This->uri) {
256 *ppv = NULL;
257 return MK_E_SYNTAX;
258 }
259
260 return bind_to_object(&This->IMoniker_iface, This->uri, pbc, riid, ppv);
261}
static BOOL bind_to_object
Definition: url.c:171
#define MK_E_SYNTAX
Definition: winerror.h:3896

◆ URLMoniker_BindToStorage()

static HRESULT WINAPI URLMoniker_BindToStorage ( IMoniker iface,
IBindCtx pbc,
IMoniker pmkToLeft,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 263 of file umon.c.

265{
267
268 TRACE("(%p)->(%p %p %s %p)\n", This, pbc, pmkToLeft, debugstr_guid(riid), ppvObject);
269
270 if(ppvObject) *ppvObject = NULL;
271
272 if(!pbc || !ppvObject) return E_INVALIDARG;
273
274 if(pmkToLeft)
275 FIXME("Unsupported pmkToLeft\n");
276
277 if(!This->uri)
278 return MK_E_SYNTAX;
279
280 return bind_to_storage(This->uri, pbc, riid, ppvObject);
281}
HRESULT bind_to_storage(IUri *uri, IBindCtx *pbc, REFIID riid, void **ppv)
Definition: binding.c:1611

◆ URLMoniker_CommonPrefixWith()

static HRESULT WINAPI URLMoniker_CommonPrefixWith ( IMoniker iface,
IMoniker pmkOther,
IMoniker **  ppmkPrefix 
)
static

Definition at line 422 of file umon.c.

423{
425 FIXME("(%p)->(%p,%p): stub\n",This,pmkOther,ppmkPrefix);
426 return E_NOTIMPL;
427}

◆ URLMoniker_ComposeWith()

static HRESULT WINAPI URLMoniker_ComposeWith ( IMoniker iface,
IMoniker right,
BOOL  only_if_not_generic,
IMoniker **  composite 
)
static

Definition at line 298 of file umon.c.

300{
301 HRESULT res;
302 IUri *right_uri;
303 IUriContainer *uri_container;
304
305 TRACE("(%p)->(%p,%d,%p)\n", iface, right, only_if_not_generic, composite);
306
307 if (!right || !composite) return E_INVALIDARG;
308
309 res = IMoniker_QueryInterface(right, &IID_IUriContainer, (void**)&uri_container);
310 if (SUCCEEDED(res)){
311 res = IUriContainer_GetIUri(uri_container, &right_uri);
312 if (SUCCEEDED(res)) res = CreateURLMonikerEx2(iface, right_uri, composite, 0);
313 IUriContainer_Release(uri_container);
314 return res;
315 }
316
317 if(only_if_not_generic) return MK_E_NEEDGENERIC;
318 return CreateGenericComposite(iface, right, composite);
319}
HRESULT WINAPI CreateGenericComposite(IMoniker *left, IMoniker *right, IMoniker **composite)
GLuint res
Definition: glext.h:9613
GLdouble GLdouble right
Definition: glext.h:10859
HRESULT WINAPI CreateURLMonikerEx2(IMoniker *pmkContext, IUri *pUri, IMoniker **ppmk, DWORD dwFlags)
Definition: umon.c:683
#define MK_E_NEEDGENERIC
Definition: winerror.h:3893

◆ URLMoniker_Enum()

static HRESULT WINAPI URLMoniker_Enum ( IMoniker iface,
BOOL  fForward,
IEnumMoniker **  ppenumMoniker 
)
static

Definition at line 321 of file umon.c.

322{
324
325 TRACE("(%p,%d,%p)\n", This, fForward, ppenumMoniker);
326
327 if(!ppenumMoniker)
328 return E_INVALIDARG;
329
330 /* Does not support sub-monikers */
331 *ppenumMoniker = NULL;
332 return S_OK;
333}

◆ URLMoniker_GetClassID()

static HRESULT WINAPI URLMoniker_GetClassID ( IMoniker iface,
CLSID pClassID 
)
static

Definition at line 113 of file umon.c.

114{
116
117 TRACE("(%p,%p)\n", This, pClassID);
118
119 if(!pClassID)
120 return E_POINTER;
121
122 /* Windows always returns CLSID_StdURLMoniker */
123 *pClassID = CLSID_StdURLMoniker;
124 return S_OK;
125}
#define E_POINTER
Definition: winerror.h:3480

◆ URLMoniker_GetDisplayName()

static HRESULT WINAPI URLMoniker_GetDisplayName ( IMoniker iface,
IBindCtx pbc,
IMoniker pmkToLeft,
LPOLESTR *  ppszDisplayName 
)
static

Definition at line 436 of file umon.c.

438{
440 int len;
441
442 TRACE("(%p,%p,%p,%p)\n", This, pbc, pmkToLeft, ppszDisplayName);
443
444 if(!ppszDisplayName)
445 return E_INVALIDARG;
446
447 if(!This->URLName)
448 return E_OUTOFMEMORY;
449
450 /* FIXME: If this is a partial URL, try and get a URL moniker from SZ_URLCONTEXT in the bind context,
451 then look at pmkToLeft to try and complete the URL
452 */
453 len = SysStringLen(This->URLName)+1;
454 *ppszDisplayName = CoTaskMemAlloc(len*sizeof(WCHAR));
455 if(!*ppszDisplayName)
456 return E_OUTOFMEMORY;
457 lstrcpyW(*ppszDisplayName, This->URLName);
458 return S_OK;
459}
void *WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: malloc.c:381
UINT WINAPI SysStringLen(BSTR str)
Definition: oleaut.c:198

◆ URLMoniker_GetSizeMax()

static HRESULT WINAPI URLMoniker_GetSizeMax ( IMoniker iface,
ULARGE_INTEGER pcbSize 
)
static

Definition at line 212 of file umon.c.

213{
215
216 TRACE("(%p,%p)\n",This,pcbSize);
217
218 if(!pcbSize)
219 return E_INVALIDARG;
220
221 pcbSize->QuadPart = sizeof(ULONG) + ((SysStringLen(This->URLName)+1) * sizeof(WCHAR));
222 return S_OK;
223}
ULONGLONG QuadPart
Definition: ms-dtyp.idl:185

◆ URLMoniker_GetTimeOfLastChange()

static HRESULT WINAPI URLMoniker_GetTimeOfLastChange ( IMoniker iface,
IBindCtx pbc,
IMoniker pmkToLeft,
FILETIME pFileTime 
)
static

Definition at line 407 of file umon.c.

409{
411 FIXME("(%p)->(%p,%p,%p): stub\n", This, pbc, pmkToLeft, pFileTime);
412 return E_NOTIMPL;
413}

◆ URLMoniker_Hash()

static HRESULT WINAPI URLMoniker_Hash ( IMoniker iface,
DWORD pdwHash 
)
static

Definition at line 369 of file umon.c.

370{
372 int h = 0,i,skip,len;
373 int off = 0;
374 LPOLESTR val;
375
376 TRACE("(%p,%p)\n",This,pdwHash);
377
378 if(!pdwHash)
379 return E_INVALIDARG;
380
381 val = This->URLName;
382 len = lstrlenW(val);
383
384 if(len < 16) {
385 for(i = len ; i > 0; i--) {
386 h = (h * 37) + val[off++];
387 }
388 }else {
389 /* only sample some characters */
390 skip = len / 8;
391 for(i = len; i > 0; i -= skip, off += skip) {
392 h = (h * 39) + val[off];
393 }
394 }
395 *pdwHash = h;
396 return S_OK;
397}
#define skip(...)
Definition: atltest.h:64
GLuint GLfloat * val
Definition: glext.h:7180
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248

◆ URLMoniker_Inverse()

static HRESULT WINAPI URLMoniker_Inverse ( IMoniker iface,
IMoniker **  ppmk 
)
static

Definition at line 415 of file umon.c.

416{
418 TRACE("(%p,%p)\n",This,ppmk);
419 return MK_E_NOINVERSE;
420}
#define MK_E_NOINVERSE
Definition: winerror.h:3907

◆ URLMoniker_IsDirty()

static HRESULT WINAPI URLMoniker_IsDirty ( IMoniker iface)
static

Definition at line 127 of file umon.c.

128{
130
131 TRACE("(%p)\n",This);
132
133 /* Note that the OLE-provided implementations of the IPersistStream::IsDirty
134 method in the OLE-provided moniker interfaces always return S_FALSE because
135 their internal state never changes. */
136 return S_FALSE;
137}

◆ URLMoniker_IsEqual()

static HRESULT WINAPI URLMoniker_IsEqual ( IMoniker iface,
IMoniker pmkOtherMoniker 
)
static

Definition at line 335 of file umon.c.

336{
338 CLSID clsid;
339 LPOLESTR urlPath;
340 IBindCtx* bind;
341 HRESULT res;
342
343 TRACE("(%p,%p)\n",This, pmkOtherMoniker);
344
345 if(pmkOtherMoniker==NULL)
346 return E_INVALIDARG;
347
348 IMoniker_GetClassID(pmkOtherMoniker,&clsid);
349
350 if(!IsEqualCLSID(&clsid,&CLSID_StdURLMoniker))
351 return S_FALSE;
352
353 res = CreateBindCtx(0,&bind);
354 if(FAILED(res))
355 return res;
356
357 res = S_FALSE;
358 if(SUCCEEDED(IMoniker_GetDisplayName(pmkOtherMoniker,bind,NULL,&urlPath))) {
359 int result = lstrcmpiW(urlPath, This->URLName);
360 CoTaskMemFree(urlPath);
361 if(result == 0)
362 res = S_OK;
363 }
364 IBindCtx_Release(bind);
365 return res;
366}
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
GLuint64EXT * result
Definition: glext.h:11304
const CLSID * clsid
Definition: msctf.cpp:50
HRESULT WINAPI CreateBindCtx(DWORD reserved, IBindCtx **bind_context)
Definition: bindctx.c:491
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
Definition: socklife.c:36

◆ URLMoniker_IsRunning()

static HRESULT WINAPI URLMoniker_IsRunning ( IMoniker iface,
IBindCtx pbc,
IMoniker pmkToLeft,
IMoniker pmkNewlyRunning 
)
static

Definition at line 399 of file umon.c.

401{
403 FIXME("(%p)->(%p,%p,%p): stub\n",This,pbc,pmkToLeft,pmkNewlyRunning);
404 return E_NOTIMPL;
405}

◆ URLMoniker_IsSystemMoniker()

static HRESULT WINAPI URLMoniker_IsSystemMoniker ( IMoniker iface,
DWORD pwdMksys 
)
static

Definition at line 469 of file umon.c.

470{
472
473 TRACE("(%p,%p)\n",This,pwdMksys);
474
475 if(!pwdMksys)
476 return E_INVALIDARG;
477
478 *pwdMksys = MKSYS_URLMONIKER;
479 return S_OK;
480}

◆ URLMoniker_Load()

static HRESULT WINAPI URLMoniker_Load ( IMoniker iface,
IStream pStm 
)
static

Definition at line 139 of file umon.c.

140{
142 WCHAR *new_uri_str;
143 IUri *new_uri;
144 BSTR new_url;
145 ULONG size;
146 ULONG got;
148
149 TRACE("(%p,%p)\n",This,pStm);
150
151 if(!pStm)
152 return E_INVALIDARG;
153
154 /*
155 * NOTE
156 * Writes a ULONG containing length of unicode string, followed
157 * by that many unicode characters
158 */
159 hres = IStream_Read(pStm, &size, sizeof(ULONG), &got);
160 if(FAILED(hres))
161 return hres;
162 if(got != sizeof(ULONG))
163 return E_FAIL;
164
165 new_uri_str = malloc(size + sizeof(WCHAR));
166 if(!new_uri_str)
167 return E_OUTOFMEMORY;
168
169 hres = IStream_Read(pStm, new_uri_str, size, NULL);
170 new_uri_str[size/sizeof(WCHAR)] = 0;
171 if(SUCCEEDED(hres))
172 hres = CreateUri(new_uri_str, 0, 0, &new_uri);
173 free(new_uri_str);
174 if(FAILED(hres))
175 return hres;
176
177 hres = IUri_GetDisplayUri(new_uri, &new_url);
178 if(FAILED(hres)) {
179 IUri_Release(new_uri);
180 return hres;
181 }
182
183 SysFreeString(This->URLName);
184 if(This->uri)
185 IUri_Release(This->uri);
186
187 This->uri = new_uri;
188 This->URLName = new_url;
189 return S_OK;
190}
OLECHAR * BSTR
Definition: compat.h:2293
GLsizeiptr size
Definition: glext.h:5919
void WINAPI DECLSPEC_HOTPATCH SysFreeString(BSTR str)
Definition: oleaut.c:273

◆ URLMoniker_ParseDisplayName()

static HRESULT WINAPI URLMoniker_ParseDisplayName ( IMoniker iface,
IBindCtx pbc,
IMoniker pmkToLeft,
LPOLESTR  pszDisplayName,
ULONG pchEaten,
IMoniker **  ppmkOut 
)
static

Definition at line 461 of file umon.c.

463{
465 FIXME("(%p)->(%p,%p,%p,%p,%p): stub\n",This,pbc,pmkToLeft,pszDisplayName,pchEaten,ppmkOut);
466 return E_NOTIMPL;
467}

◆ URLMoniker_QueryInterface()

static HRESULT WINAPI URLMoniker_QueryInterface ( IMoniker iface,
REFIID  riid,
void **  ppv 
)
static

Definition at line 49 of file umon.c.

50{
52
53 if(!ppv)
54 return E_INVALIDARG;
55
57 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
58 *ppv = iface;
59 }else if(IsEqualIID(&IID_IPersist, riid)) {
60 TRACE("(%p)->(IID_IPersist %p)\n", This, ppv);
61 *ppv = iface;
63 TRACE("(%p)->(IID_IPersistStream %p)\n", This, ppv);
64 *ppv = iface;
65 }else if(IsEqualIID(&IID_IMoniker, riid)) {
66 TRACE("(%p)->(IID_IMoniker %p)\n", This, ppv);
67 *ppv = iface;
68 }else if(IsEqualIID(&IID_IAsyncMoniker, riid)) {
69 TRACE("(%p)->(IID_IAsyncMoniker %p)\n", This, ppv);
70 *ppv = iface;
71 }else if(IsEqualIID(&IID_IUriContainer, riid)) {
72 TRACE("(%p)->(IID_IUriContainer %p)\n", This, ppv);
73 *ppv = &This->IUriContainer_iface;
74 }else {
75 WARN("(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppv);
76 *ppv = NULL;
77 return E_NOINTERFACE;
78 }
79
80 IUnknown_AddRef((IUnknown*)*ppv);
81 return S_OK;
82}
#define WARN(fmt,...)
Definition: precomp.h:61
const GUID IID_IUnknown
const GUID IID_IPersist
Definition: proxy.cpp:14
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ URLMoniker_Reduce()

static HRESULT WINAPI URLMoniker_Reduce ( IMoniker iface,
IBindCtx pbc,
DWORD  dwReduceHowFar,
IMoniker **  ppmkToLeft,
IMoniker **  ppmkReduced 
)
static

Definition at line 283 of file umon.c.

285{
287
288 TRACE("(%p,%p,%ld,%p,%p)\n", This, pbc, dwReduceHowFar, ppmkToLeft, ppmkReduced);
289
290 if(!ppmkReduced)
291 return E_INVALIDARG;
292
293 IMoniker_AddRef(iface);
294 *ppmkReduced = iface;
296}
#define MK_S_REDUCED_TO_SELF
Definition: winerror.h:3892

◆ URLMoniker_RelativePathTo()

static HRESULT WINAPI URLMoniker_RelativePathTo ( IMoniker iface,
IMoniker pmOther,
IMoniker **  ppmkRelPath 
)
static

Definition at line 429 of file umon.c.

430{
432 FIXME("(%p)->(%p,%p): stub\n",This,pmOther,ppmkRelPath);
433 return E_NOTIMPL;
434}

◆ URLMoniker_Release()

static ULONG WINAPI URLMoniker_Release ( IMoniker iface)
static

Definition at line 94 of file umon.c.

95{
97 ULONG refCount = InterlockedDecrement(&This->ref);
98
99 TRACE("(%p) ref=%lu\n",This, refCount);
100
101 if (!refCount) {
102 if(This->uri)
103 IUri_Release(This->uri);
104 SysFreeString(This->URLName);
105 free(This);
106
108 }
109
110 return refCount;
111}
#define InterlockedDecrement
Definition: armddk.h:52
static void URLMON_UnlockModule(void)
Definition: urlmon_main.h:65

◆ URLMoniker_Save()

static HRESULT WINAPI URLMoniker_Save ( IMoniker iface,
IStream pStm,
BOOL  fClearDirty 
)
static

Definition at line 192 of file umon.c.

193{
195 HRESULT res;
196 ULONG size;
197
198 TRACE("(%p,%p,%d)\n", This, pStm, fClearDirty);
199
200 if(!pStm)
201 return E_INVALIDARG;
202
203 size = (SysStringLen(This->URLName) + 1)*sizeof(WCHAR);
204 res=IStream_Write(pStm,&size,sizeof(ULONG),NULL);
205 if(SUCCEEDED(res))
206 res=IStream_Write(pStm,This->URLName,size,NULL);
207
208 return res;
209
210}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( urlmon  )

Variable Documentation

◆ combine_flags_map

const DWORD combine_flags_map[3]
static
Initial value:
= {
0,
}
#define URL_DONT_SIMPLIFY
Definition: shlwapi.h:531
#define URL_FILE_USE_PATHURL
Definition: shlwapi.h:523

Definition at line 609 of file umon.c.

Referenced by CreateURLMonikerEx(), and CreateURLMonikerEx2().

◆ create_flags_map

const DWORD create_flags_map[3]
static
Initial value:
= {
Uri_CREATE_FILE_USE_DOS_PATH,
0,
Uri_CREATE_NO_CANONICALIZE
}

Definition at line 603 of file umon.c.

Referenced by CreateURLMonikerEx(), and CreateURLMonikerEx2().

◆ UriContainerVtbl

const IUriContainerVtbl UriContainerVtbl
static
Initial value:
= {
}
static HRESULT WINAPI UriContainer_QueryInterface(IUriContainer *iface, REFIID riid, void **ppv)
Definition: umon.c:514
static ULONG WINAPI UriContainer_Release(IUriContainer *iface)
Definition: umon.c:526
static HRESULT WINAPI UriContainer_GetIUri(IUriContainer *iface, IUri **ppIUri)
Definition: umon.c:532
static ULONG WINAPI UriContainer_AddRef(IUriContainer *iface)
Definition: umon.c:520

Definition at line 548 of file umon.c.

Referenced by create_moniker().

◆ URLMonikerVtbl

const IMonikerVtbl URLMonikerVtbl
static
Initial value:
=
{
}
static HRESULT WINAPI URLMoniker_QueryInterface(IMoniker *iface, REFIID riid, void **ppv)
Definition: umon.c:49
static HRESULT WINAPI URLMoniker_GetClassID(IMoniker *iface, CLSID *pClassID)
Definition: umon.c:113
static HRESULT WINAPI URLMoniker_CommonPrefixWith(IMoniker *iface, IMoniker *pmkOther, IMoniker **ppmkPrefix)
Definition: umon.c:422
static HRESULT WINAPI URLMoniker_RelativePathTo(IMoniker *iface, IMoniker *pmOther, IMoniker **ppmkRelPath)
Definition: umon.c:429
static HRESULT WINAPI URLMoniker_Inverse(IMoniker *iface, IMoniker **ppmk)
Definition: umon.c:415
static HRESULT WINAPI URLMoniker_BindToObject(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppv)
Definition: umon.c:225
static HRESULT WINAPI URLMoniker_Hash(IMoniker *iface, DWORD *pdwHash)
Definition: umon.c:369
static HRESULT WINAPI URLMoniker_Save(IMoniker *iface, IStream *pStm, BOOL fClearDirty)
Definition: umon.c:192
static HRESULT WINAPI URLMoniker_GetSizeMax(IMoniker *iface, ULARGE_INTEGER *pcbSize)
Definition: umon.c:212
static HRESULT WINAPI URLMoniker_ParseDisplayName(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR pszDisplayName, ULONG *pchEaten, IMoniker **ppmkOut)
Definition: umon.c:461
static HRESULT WINAPI URLMoniker_Load(IMoniker *iface, IStream *pStm)
Definition: umon.c:139
static HRESULT WINAPI URLMoniker_IsEqual(IMoniker *iface, IMoniker *pmkOtherMoniker)
Definition: umon.c:335
static HRESULT WINAPI URLMoniker_GetTimeOfLastChange(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, FILETIME *pFileTime)
Definition: umon.c:407
static HRESULT WINAPI URLMoniker_Reduce(IMoniker *iface, IBindCtx *pbc, DWORD dwReduceHowFar, IMoniker **ppmkToLeft, IMoniker **ppmkReduced)
Definition: umon.c:283
static HRESULT WINAPI URLMoniker_BindToStorage(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, REFIID riid, void **ppvObject)
Definition: umon.c:263
static HRESULT WINAPI URLMoniker_ComposeWith(IMoniker *iface, IMoniker *right, BOOL only_if_not_generic, IMoniker **composite)
Definition: umon.c:298
static HRESULT WINAPI URLMoniker_IsSystemMoniker(IMoniker *iface, DWORD *pwdMksys)
Definition: umon.c:469
static HRESULT WINAPI URLMoniker_Enum(IMoniker *iface, BOOL fForward, IEnumMoniker **ppenumMoniker)
Definition: umon.c:321
static ULONG WINAPI URLMoniker_AddRef(IMoniker *iface)
Definition: umon.c:84
static HRESULT WINAPI URLMoniker_IsDirty(IMoniker *iface)
Definition: umon.c:127
static HRESULT WINAPI URLMoniker_IsRunning(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, IMoniker *pmkNewlyRunning)
Definition: umon.c:399
static HRESULT WINAPI URLMoniker_GetDisplayName(IMoniker *iface, IBindCtx *pbc, IMoniker *pmkToLeft, LPOLESTR *ppszDisplayName)
Definition: umon.c:436
static ULONG WINAPI URLMoniker_Release(IMoniker *iface)
Definition: umon.c:94

Definition at line 482 of file umon.c.

Referenced by create_moniker().