ReactOS  0.4.14-dev-77-gd9e7c48
hlink_main.c
Go to the documentation of this file.
1 /*
2  * Implementation of hyperlinking (hlink.dll)
3  *
4  * Copyright 2005 Aric Stewart for CodeWeavers
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #include "hlink_private.h"
22 
23 #include "winreg.h"
24 #include "rpcproxy.h"
25 #include "hlguids.h"
26 
27 #include "wine/debug.h"
28 
30 
32 
34 
35 typedef struct
36 {
39 } CFImpl;
40 
42 {
43  return CONTAINING_RECORD(iface, CFImpl, IClassFactory_iface);
44 }
45 
47 {
48  TRACE("%p %d %p\n", hinstDLL, fdwReason, lpvReserved);
49 
50  switch (fdwReason)
51  {
52  case DLL_PROCESS_ATTACH:
53  instance = hinstDLL;
54  DisableThreadLibraryCalls(hinstDLL);
55  break;
56  }
57  return TRUE;
58 }
59 
60 /***********************************************************************
61  * DllCanUnloadNow (HLINK.@)
62  */
64 {
65  return S_FALSE;
66 }
67 
68 /***********************************************************************
69  * HlinkCreateFromMoniker (HLINK.@)
70  */
72  LPCWSTR pwzFriendlyName, IHlinkSite* pihlsite, DWORD dwSiteData,
73  IUnknown* piunkOuter, REFIID riid, void** ppvObj)
74 {
75  IHlink *hl = NULL;
76  HRESULT r;
77 
78  TRACE("%p %s %s %p %i %p %s %p\n", pimkTrgt, debugstr_w(pwzLocation),
79  debugstr_w(pwzFriendlyName), pihlsite, dwSiteData, piunkOuter,
80  debugstr_guid(riid), ppvObj);
81 
82  r = CoCreateInstance(&CLSID_StdHlink, piunkOuter, CLSCTX_INPROC_SERVER, riid, (LPVOID*)&hl);
83  if (FAILED(r))
84  return r;
85 
86  IHlink_SetMonikerReference(hl, HLINKSETF_LOCATION | HLINKSETF_TARGET, pimkTrgt, pwzLocation);
87 
88  if (pwzFriendlyName)
89  IHlink_SetFriendlyName(hl, pwzFriendlyName);
90  if (pihlsite)
91  IHlink_SetHlinkSite(hl, pihlsite, dwSiteData);
92 
93  *ppvObj = hl;
94 
95  TRACE("Returning %i\n",r);
96 
97  return r;
98 }
99 
100 /***********************************************************************
101  * HlinkCreateFromString (HLINK.@)
102  */
104  LPCWSTR pwzFriendlyName, IHlinkSite* pihlsite, DWORD dwSiteData,
105  IUnknown* piunkOuter, REFIID riid, void** ppvObj)
106 {
107  IHlink *hl = NULL;
108  HRESULT r;
109  WCHAR *hash, *tgt;
110  const WCHAR *loc;
111 
112  TRACE("%s %s %s %p %i %p %s %p\n", debugstr_w(pwzTarget),
113  debugstr_w(pwzLocation), debugstr_w(pwzFriendlyName), pihlsite,
114  dwSiteData, piunkOuter, debugstr_guid(riid), ppvObj);
115 
116  r = CoCreateInstance(&CLSID_StdHlink, piunkOuter, CLSCTX_INPROC_SERVER, riid, (LPVOID*)&hl);
117  if (FAILED(r))
118  return r;
119 
120  if (pwzTarget)
121  {
122  hash = strchrW(pwzTarget, '#');
123  if (hash)
124  {
125  if (hash == pwzTarget)
126  tgt = NULL;
127  else
128  {
129  int tgt_len = hash - pwzTarget;
130  tgt = heap_alloc((tgt_len + 1) * sizeof(WCHAR));
131  if (!tgt)
132  return E_OUTOFMEMORY;
133  memcpy(tgt, pwzTarget, tgt_len * sizeof(WCHAR));
134  tgt[tgt_len] = 0;
135  }
136  if (!pwzLocation)
137  loc = hash + 1;
138  else
139  loc = pwzLocation;
140  }
141  else
142  {
143  tgt = hlink_strdupW(pwzTarget);
144  if (!tgt)
145  return E_OUTOFMEMORY;
146  loc = pwzLocation;
147  }
148  }
149  else
150  {
151  tgt = NULL;
152  loc = pwzLocation;
153  }
154 
155  IHlink_SetStringReference(hl, HLINKSETF_TARGET | HLINKSETF_LOCATION, tgt, loc);
156 
157  heap_free(tgt);
158 
159  if (pwzFriendlyName)
160  IHlink_SetFriendlyName(hl, pwzFriendlyName);
161 
162  if (pihlsite)
163  IHlink_SetHlinkSite(hl, pihlsite, dwSiteData);
164 
165  TRACE("Returning %i\n",r);
166  *ppvObj = hl;
167 
168  return r;
169 }
170 
171 
172 /***********************************************************************
173  * HlinkCreateBrowseContext (HLINK.@)
174  */
176 {
177  TRACE("%p %s %p\n", piunkOuter, debugstr_guid(riid), ppvObj);
178  return CoCreateInstance(&CLSID_StdHlinkBrowseContext, piunkOuter, CLSCTX_INPROC_SERVER, riid, ppvObj);
179 }
180 
181 /***********************************************************************
182  * HlinkNavigate (HLINK.@)
183  */
185  DWORD grfHLNF, LPBC pbc, IBindStatusCallback *pbsc,
186  IHlinkBrowseContext *phlbc)
187 {
188  HRESULT r = S_OK;
189 
190  TRACE("%p %p %i %p %p %p\n", phl, phlFrame, grfHLNF, pbc, pbsc, phlbc);
191 
192  if (phlFrame)
193  r = IHlinkFrame_Navigate(phlFrame, grfHLNF, pbc, pbsc, phl);
194  else if (phl)
195  r = IHlink_Navigate(phl, grfHLNF, pbc, pbsc, phlbc);
196 
197  return r;
198 }
199 
200 /***********************************************************************
201  * HlinkOnNavigate (HLINK.@)
202  */
204  IHlinkBrowseContext* phlbc, DWORD grfHLNF, IMoniker *pmkTarget,
205  LPCWSTR pwzLocation, LPCWSTR pwzFriendlyName, ULONG* puHLID)
206 {
207  HRESULT r;
208 
209  TRACE("%p %p %i %p %s %s %p\n",phlFrame, phlbc, grfHLNF, pmkTarget,
210  debugstr_w(pwzLocation), debugstr_w(pwzFriendlyName), puHLID);
211 
212  r = IHlinkBrowseContext_OnNavigateHlink(phlbc, grfHLNF, pmkTarget,
213  pwzLocation, pwzFriendlyName, puHLID);
214 
215  if (phlFrame)
216  r = IHlinkFrame_OnNavigate(phlFrame,grfHLNF,pmkTarget, pwzLocation,
217  pwzFriendlyName, 0);
218 
219  return r;
220 }
221 
222 /***********************************************************************
223  * HlinkCreateFromData (HLINK.@)
224  */
226  IHlinkSite *pihlsite, DWORD dwSiteData, IUnknown *piunkOuter,
227  REFIID riid, void **ppvObj)
228 {
229  FIXME("%p, %p, %d, %p, %s, %p\n", piDataObj, pihlsite, dwSiteData,
230  piunkOuter, debugstr_guid(riid), ppvObj);
231  *ppvObj = NULL;
232  return E_NOTIMPL;
233 }
234 
235 /***********************************************************************
236  * HlinkQueryCreateFromData (HLINK.@)
237  */
239 {
240  FIXME("%p\n", piDataObj);
241  return E_NOTIMPL;
242 }
243 
244 /***********************************************************************
245  * HlinkNavigateToStringReference (HLINK.@)
246  */
248  LPCWSTR pwzLocation, IHlinkSite *pihlsite, DWORD dwSiteData,
249  IHlinkFrame *pihlframe, DWORD grfHLNF, LPBC pibc,
251 {
252  HRESULT r;
253  IHlink *hlink = NULL;
254 
255  TRACE("%s %s %p %08x %p %08x %p %p %p\n",
256  debugstr_w(pwzTarget), debugstr_w(pwzLocation), pihlsite,
257  dwSiteData, pihlframe, grfHLNF, pibc, pibsc, pihlbc);
258 
259  r = HlinkCreateFromString( pwzTarget, pwzLocation, NULL, pihlsite,
260  dwSiteData, NULL, &IID_IHlink, (LPVOID*) &hlink );
261  if (SUCCEEDED(r)) {
262  r = HlinkNavigate(hlink, pihlframe, grfHLNF, pibc, pibsc, pihlbc);
263  IHlink_Release(hlink);
264  }
265 
266  return r;
267 }
268 
269 /***********************************************************************
270  * HlinkIsShortcut (HLINK.@)
271  */
273 {
274  int len;
275 
276  static const WCHAR url_ext[] = {'.','u','r','l',0};
277 
278  TRACE("(%s)\n", debugstr_w(pwzFileName));
279 
280  if(!pwzFileName)
281  return E_INVALIDARG;
282 
283  len = strlenW(pwzFileName)-4;
284  if(len < 0)
285  return S_FALSE;
286 
287  return strcmpiW(pwzFileName+len, url_ext) ? S_FALSE : S_OK;
288 }
289 
290 /***********************************************************************
291  * HlinkGetSpecialReference (HLINK.@)
292  */
294 {
295  DWORD res, type, size = 100;
296  LPCWSTR value_name;
297  WCHAR *buf;
298  HKEY hkey;
299 
300  static const WCHAR start_pageW[] = {'S','t','a','r','t',' ','P','a','g','e',0};
301  static const WCHAR search_pageW[] = {'S','e','a','r','c','h',' ','P','a','g','e',0};
302 
303  static const WCHAR ie_main_keyW[] =
304  {'S','o','f','t','w','a','r','e',
305  '\\','M','i','c','r','o','s','o','f','t','\\',
306  'I','n','t','e','r','n','e','t',' ','E','x','p','l','o','r','e','r',
307  '\\','M','a','i','n',0};
308 
309  TRACE("(%u %p)\n", uReference, ppwzReference);
310 
311  *ppwzReference = NULL;
312 
313  switch(uReference) {
314  case HLSR_HOME:
315  value_name = start_pageW;
316  break;
317  case HLSR_SEARCHPAGE:
318  value_name = search_pageW;
319  break;
320  case HLSR_HISTORYFOLDER:
321  return E_NOTIMPL;
322  default:
323  return E_INVALIDARG;
324  }
325 
326  res = RegOpenKeyW(HKEY_CURRENT_USER, ie_main_keyW, &hkey);
327  if(res != ERROR_SUCCESS) {
328  WARN("Could not open key: %u\n", res);
329  return HRESULT_FROM_WIN32(res);
330  }
331 
333  res = RegQueryValueExW(hkey, value_name, NULL, &type, (PBYTE)buf, &size);
335  if(res == ERROR_MORE_DATA)
336  res = RegQueryValueExW(hkey, value_name, NULL, &type, (PBYTE)buf, &size);
337  RegCloseKey(hkey);
338  if(res != ERROR_SUCCESS) {
339  WARN("Could not query value %s: %u\n", debugstr_w(value_name), res);
341  return HRESULT_FROM_WIN32(res);
342  }
343 
344  *ppwzReference = buf;
345  return S_OK;
346 }
347 
348 /***********************************************************************
349  * HlinkTranslateURL (HLINK.@)
350  */
351 HRESULT WINAPI HlinkTranslateURL(LPCWSTR pwzURL, DWORD grfFlags, LPWSTR *ppwzTranslatedURL)
352 {
353  FIXME("(%s %08x %p)\n", debugstr_w(pwzURL), grfFlags, ppwzTranslatedURL);
354  return E_NOTIMPL;
355 }
356 
357 /***********************************************************************
358  * HlinkUpdateStackItem (HLINK.@)
359  */
362 {
363  HRESULT hr;
364 
365  TRACE("(%p %p 0x%x %p %s %s)\n", frame, bc, hlid, target, debugstr_w(location), debugstr_w(friendly_name));
366 
367  if (!frame && !bc) return E_INVALIDARG;
368 
369  if (frame)
370  hr = IHlinkFrame_UpdateHlink(frame, hlid, target, location, friendly_name);
371  else
372  hr = IHlinkBrowseContext_UpdateHlink(bc, hlid, target, location, friendly_name);
373 
374  return hr;
375 }
376 
377 /***********************************************************************
378  * HlinkParseDisplayName (HLINK.@)
379  */
380 HRESULT WINAPI HlinkParseDisplayName(LPBC pibc, LPCWSTR pwzDisplayName, BOOL fNoForceAbs,
381  ULONG *pcchEaten, IMoniker **ppimk)
382 {
383  static const WCHAR file_colonW[] = {'f','i','l','e',':'};
384  ULONG eaten = 0;
385  HRESULT hres;
386 
387  TRACE("(%p %s %x %p %p)\n", pibc, debugstr_w(pwzDisplayName), fNoForceAbs, pcchEaten, ppimk);
388 
389  if(fNoForceAbs)
390  FIXME("Unsupported fNoForceAbs\n");
391 
392  if(!strncmpiW(pwzDisplayName, file_colonW, ARRAY_SIZE(file_colonW))) {
393  pwzDisplayName += ARRAY_SIZE(file_colonW);
394  eaten += ARRAY_SIZE(file_colonW);
395 
396  while(*pwzDisplayName == '/') {
397  pwzDisplayName++;
398  eaten++;
399  }
400  }else {
401  hres = MkParseDisplayNameEx(pibc, pwzDisplayName, pcchEaten, ppimk);
402  if(SUCCEEDED(hres))
403  return hres;
404 
405  hres = MkParseDisplayName(pibc, pwzDisplayName, pcchEaten, ppimk);
406  if(SUCCEEDED(hres))
407  return hres;
408  }
409 
410  hres = CreateFileMoniker(pwzDisplayName, ppimk);
411  if(SUCCEEDED(hres))
412  *pcchEaten = eaten + strlenW(pwzDisplayName);
413 
414  return hres;
415 }
416 
417 /***********************************************************************
418  * HlinkResolveMonikerForData (HLINK.@)
419  */
421  ULONG cFmtetc, FORMATETC *rgFmtetc, IBindStatusCallback *pibsc, LPMONIKER pimkBase)
422 {
423  LPOLESTR name = NULL;
424  IBindCtx *bctx;
425  DWORD mksys = 0;
426  void *obj = NULL;
427  HRESULT hres;
428 
429  TRACE("(%p %x %p %d %p %p %p)\n", pimkReference, reserved, pibc, cFmtetc, rgFmtetc, pibsc, pimkBase);
430 
431  if(cFmtetc || rgFmtetc || pimkBase)
432  FIXME("Unsupported args\n");
433 
434  hres = RegisterBindStatusCallback(pibc, pibsc, NULL /* FIXME */, 0);
435  if(FAILED(hres))
436  return hres;
437 
438  hres = IMoniker_IsSystemMoniker(pimkReference, &mksys);
439  if(SUCCEEDED(hres) && mksys != MKSYS_URLMONIKER)
440  WARN("sysmk = %x\n", mksys);
441 
442  /* FIXME: What is it for? */
443  CreateBindCtx(0, &bctx);
444  hres = IMoniker_GetDisplayName(pimkReference, bctx, NULL, &name);
445  IBindCtx_Release(bctx);
446  if(SUCCEEDED(hres)) {
447  TRACE("got display name %s\n", debugstr_w(name));
449  }
450 
451  return IMoniker_BindToStorage(pimkReference, pibc, NULL, &IID_IUnknown, &obj);
452 }
453 
454 /***********************************************************************
455  * HlinkClone (HLINK.@)
456  */
458  DWORD site_data, void **obj)
459 {
460  IMoniker *mk, *clone_mk = NULL;
461  WCHAR *loc, *name = NULL;
462  HRESULT hres;
463 
464  if(!hlink || !riid || !obj)
465  return E_INVALIDARG;
466 
467  *obj = NULL;
468 
469  hres = IHlink_GetMonikerReference(hlink, HLINKGETREF_DEFAULT, &mk, &loc);
470  if(FAILED(hres))
471  return hres;
472 
473  if(mk) {
474  IStream *strm;
475  LARGE_INTEGER lgint;
476 
477  hres = CreateStreamOnHGlobal(NULL, TRUE, &strm);
478  if(FAILED(hres)) {
479  IMoniker_Release(mk);
480  goto cleanup;
481  }
482 
483  hres = OleSaveToStream((IPersistStream*)mk, strm);
484  if(FAILED(hres)) {
485  IStream_Release(strm);
486  IMoniker_Release(mk);
487  goto cleanup;
488  }
489  IMoniker_Release(mk);
490 
491  lgint.QuadPart = 0;
492  hres = IStream_Seek(strm, lgint, STREAM_SEEK_SET, NULL);
493  if(FAILED(hres)) {
494  IStream_Release(strm);
495  goto cleanup;
496  }
497 
498  hres = OleLoadFromStream(strm, &IID_IMoniker, (void**)&clone_mk);
499  IStream_Release(strm);
500  if(FAILED(hres))
501  goto cleanup;
502  }
503 
504  hres = IHlink_GetFriendlyName(hlink, HLFNAMEF_DEFAULT, &name);
505  if(FAILED(hres))
506  goto cleanup;
507 
508  hres = HlinkCreateFromMoniker(clone_mk, loc, name, hls, site_data, NULL,
509  &IID_IHlink, obj);
510 
511 cleanup:
512  if(clone_mk)
513  IMoniker_Release(clone_mk);
514  CoTaskMemFree(loc);
516  return hres;
517 }
518 
519 static HRESULT WINAPI HLinkCF_fnQueryInterface ( LPCLASSFACTORY iface,
520  REFIID riid, LPVOID *ppvObj)
521 {
523 
524  TRACE("(%p)->(%s, %p)\n", This, debugstr_guid(riid), ppvObj);
525 
526  *ppvObj = NULL;
527 
528  if (IsEqualIID(riid, &IID_IUnknown) ||
530  {
531  *ppvObj = &This->IClassFactory_iface;
532  return S_OK;
533  }
534 
535  TRACE("-- E_NOINTERFACE\n");
536  return E_NOINTERFACE;
537 }
538 
539 static ULONG WINAPI HLinkCF_fnAddRef (LPCLASSFACTORY iface)
540 {
541  return 2;
542 }
543 
544 static ULONG WINAPI HLinkCF_fnRelease(LPCLASSFACTORY iface)
545 {
546  return 1;
547 }
548 
549 static HRESULT WINAPI HLinkCF_fnCreateInstance( LPCLASSFACTORY iface,
550  LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject)
551 {
553 
554  TRACE("%p->(%p,%s,%p)\n", This, pUnkOuter, debugstr_guid(riid), ppvObject);
555 
556  *ppvObject = NULL;
557 
558  return This->lpfnCI(pUnkOuter, riid, ppvObject);
559 }
560 
561 static HRESULT WINAPI HLinkCF_fnLockServer(LPCLASSFACTORY iface, BOOL fLock)
562 {
563  FIXME("%p %d\n", iface, fLock);
564  return E_NOTIMPL;
565 }
566 
567 static const IClassFactoryVtbl hlcfvt =
568 {
574 };
575 
578 
579 /***********************************************************************
580  * DllGetClassObject (HLINK.@)
581  */
583 {
584  IClassFactory *pcf = NULL;
585 
586  TRACE("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(iid), ppv);
587 
588  if (!ppv)
589  return E_INVALIDARG;
590  *ppv = NULL;
591 
592  if (IsEqualIID(rclsid, &CLSID_StdHlink))
594  else if (IsEqualIID(rclsid, &CLSID_StdHlinkBrowseContext))
596  else
598 
599  return IClassFactory_QueryInterface(pcf, iid, ppv);
600 }
601 
602 /***********************************************************************
603  * DllRegisterServer (HLINK.@)
604  */
606 {
608 }
609 
610 /***********************************************************************
611  * DllUnregisterServer (HLINK.@)
612  */
614 {
616 }
#define HRESULT
Definition: msvc.h:9
#define REFIID
Definition: guiddef.h:118
#define TRUE
Definition: types.h:120
#define E_NOINTERFACE
Definition: winerror.h:2364
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:422
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
#define ERROR_SUCCESS
Definition: deptool.c:10
HRESULT hr
Definition: shlfolder.c:183
HRESULT __wine_register_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:98
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
interface IBindCtx * LPBC
Definition: objfwd.h:18
LPBATCH_CONTEXT bc
Definition: batch.c:66
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glext.h:7751
LPFNCREATEINSTANCE lpfnCI
Definition: hlink_main.c:38
REFIID riid
Definition: precomp.h:44
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
WINE_UNICODE_INLINE WCHAR * strchrW(const WCHAR *str, WCHAR ch)
Definition: unicode.h:248
#define REFCLSID
Definition: guiddef.h:117
#define HKEY_CURRENT_USER
Definition: winreg.h:11
#define WARN(fmt,...)
Definition: debug.h:111
REFIID LPVOID * ppv
Definition: atlbase.h:39
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
#define DLL_PROCESS_ATTACH
Definition: compat.h:120
#define strncmpiW(s1, s2, n)
Definition: unicode.h:40
static LPOLESTR
Definition: stg_prop.c:27
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663
static IN DWORD IN LPVOID lpvReserved
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
IClassFactory IClassFactory_iface
Definition: hlink_main.c:37
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
int hash
Definition: main.c:58
unsigned int BOOL
Definition: ntddk_ex.h:94
static LPUNKNOWN
Definition: ndr_ole.c:49
LONG WINAPI RegOpenKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:3296
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
r reserved
Definition: btrfs.c:2893
#define S_FALSE
Definition: winerror.h:2357
#define E_INVALIDARG
Definition: ddrawi.h:101
smooth NULL
Definition: ftsmooth.c:416
#define debugstr_guid
Definition: kernel32.h:35
HRESULT WINAPI MkParseDisplayNameEx(IBindCtx *pbc, LPCWSTR szDisplayName, ULONG *pchEaten, LPMONIKER *ppmk)
Definition: umon.c:795
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
HRESULT WINAPI RegisterBindStatusCallback(IBindCtx *pbc, IBindStatusCallback *pbsc, IBindStatusCallback **ppbscPrevious, DWORD dwReserved)
Definition: bindctx.c:615
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
HRESULT hres
Definition: protocol.c:465
HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC *ppbc)
Definition: bindctx.c:556
LONG WINAPI RegQueryValueExW(_In_ HKEY hkeyorg, _In_ LPCWSTR name, _In_ LPDWORD reserved, _In_ LPDWORD type, _In_ LPBYTE data, _In_ LPDWORD count)
Definition: reg.c:4116
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
HRESULT WINAPI CreateFileMoniker(LPCOLESTR lpszPathName, IMoniker **ppmk)
Definition: filemoniker.c:1415
const GUID IID_IUnknown
#define WINAPI
Definition: msvc.h:8
unsigned long DWORD
Definition: ntddk_ex.h:95
HRESULT WINAPI OleSaveToStream(IPersistStream *pPStm, IStream *pStm)
Definition: storage32.c:9165
HRESULT __wine_unregister_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:110
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
GLenum GLsizei len
Definition: glext.h:6722
REFIID LPVOID * ppvObject
Definition: precomp.h:44
interface IMoniker * LPMONIKER
Definition: objfwd.h:9
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define strcmpiW(s1, s2)
Definition: unicode.h:39
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3234
#define S_OK
Definition: intsafe.h:59
#define ARRAY_SIZE(a)
Definition: main.h:24
static const WCHAR friendly_name[]
Definition: devenum.c:38
#define E_NOTIMPL
Definition: ddrawi.h:99
HRESULT WINAPI MkParseDisplayName(LPBC pbc, LPCOLESTR szDisplayName, LPDWORD pchEaten, LPMONIKER *ppmk)
Definition: moniker.c:1133
Definition: name.c:36
GLuint res
Definition: glext.h:9613
unsigned int ULONG
Definition: retypes.h:1
GLenum target
Definition: glext.h:7315
char * cleanup(char *str)
Definition: wpickclick.c:99
LPVOID WINAPI CoTaskMemRealloc(LPVOID pvOld, SIZE_T size)
Definition: ifs.c:440
WCHAR * LPWSTR
Definition: xmlstorage.h:184
const GUID IID_IClassFactory
Definition: _hash_fun.h:40
BYTE * PBYTE
Definition: pedump.c:66
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:406
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
HRESULT WINAPI OleLoadFromStream(IStream *pStm, REFIID iidInterface, void **ppvObj)
Definition: storage32.c:9130
#define SUCCEEDED(hr)
Definition: intsafe.h:57
LONGLONG QuadPart
Definition: typedefs.h:112
static BOOL heap_free(void *mem)
Definition: appwiz.h:75