ReactOS  0.4.13-dev-73-gcfe54aa
propsys_main.c
Go to the documentation of this file.
1 /*
2  * propsys main
3  *
4  * Copyright 1997, 2002 Alexandre Julliard
5  * Copyright 2008 James Hawkins
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with this library; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
20  */
21 
22 #define COBJMACROS
23 #include "config.h"
24 
25 #include <stdarg.h>
26 
27 #include "windef.h"
28 #include "winbase.h"
29 #include "objbase.h"
30 #include "rpcproxy.h"
31 #include "propsys.h"
32 #include "wine/debug.h"
33 #include "wine/unicode.h"
34 
35 #include "propsys_private.h"
36 
38 
40 
42 {
43  TRACE("(0x%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved);
44 
45  switch (fdwReason)
46  {
47  case DLL_WINE_PREATTACH:
48  return FALSE; /* prefer native version */
49  case DLL_PROCESS_ATTACH:
50  propsys_hInstance = hinstDLL;
51  DisableThreadLibraryCalls(hinstDLL);
52  break;
53  }
54 
55  return TRUE;
56 }
57 
59 {
61 }
62 
64 {
66 }
67 
69 {
70  *ppv = NULL;
71 
73  TRACE("(%p)->(IID_IUnknown %p)\n", iface, ppv);
74  *ppv = iface;
75  }else if(IsEqualGUID(&IID_IClassFactory, riid)) {
76  TRACE("(%p)->(IID_IClassFactory %p)\n", iface, ppv);
77  *ppv = iface;
78  }
79 
80  if(*ppv) {
81  IUnknown_AddRef((IUnknown*)*ppv);
82  return S_OK;
83  }
84 
85  FIXME("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
86  return E_NOINTERFACE;
87 }
88 
90 {
91  TRACE("(%p)\n", iface);
92  return 2;
93 }
94 
96 {
97  TRACE("(%p)\n", iface);
98  return 1;
99 }
100 
102 {
103  TRACE("(%p)->(%x)\n", iface, fLock);
104 
105  return S_OK;
106 }
107 
109  REFIID riid, void **ppv)
110 {
111  TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv);
112 
113  return PropertyStore_CreateInstance(outer, riid, ppv);
114 }
115 
116 static const IClassFactoryVtbl InMemoryPropertyStoreFactoryVtbl = {
122 };
123 
125 
127 {
128  if(IsEqualGUID(&CLSID_InMemoryPropertyStore, rclsid)) {
129  TRACE("(CLSID_InMemoryPropertyStore %s %p)\n", debugstr_guid(riid), ppv);
130  return IClassFactory_QueryInterface(&InMemoryPropertyStoreFactory, riid, ppv);
131  }
132 
133  FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
135 }
136 
138 {
139  return S_FALSE;
140 }
141 
143 {
144  *obj = NULL;
145 
146  if (IsEqualIID(riid, &IID_IPropertySystem) || IsEqualIID(riid, &IID_IUnknown)) {
147  *obj = iface;
148  IPropertySystem_AddRef(iface);
149  return S_OK;
150  }
151 
152  FIXME("%s\n", debugstr_guid(riid));
153  return E_NOINTERFACE;
154 }
155 
157 {
158  return 2;
159 }
160 
162 {
163  return 1;
164 }
165 
167  REFPROPERTYKEY propkey, REFIID riid, void **ppv)
168 {
169  return PSGetPropertyDescription(propkey, riid, ppv);
170 }
171 
173  LPCWSTR canonical_name, REFIID riid, void **ppv)
174 {
175  FIXME("%s %s %p: stub\n", debugstr_w(canonical_name), debugstr_guid(riid), ppv);
176  return E_NOTIMPL;
177 }
178 
180  LPCWSTR proplist, REFIID riid, void **ppv)
181 {
183 }
184 
187 {
188  FIXME("%d %s %p: stub\n", filter, debugstr_guid(riid), ppv);
189  return E_NOTIMPL;
190 }
191 
193  REFPROPERTYKEY key, REFPROPVARIANT propvar, PROPDESC_FORMAT_FLAGS flags,
194  LPWSTR dest, DWORD destlen)
195 {
196  FIXME("%p %p %x %p %d: stub\n", key, propvar, flags, dest, destlen);
197  return E_NOTIMPL;
198 }
199 
201  REFPROPERTYKEY key, REFPROPVARIANT propvar, PROPDESC_FORMAT_FLAGS flags,
202  LPWSTR *text)
203 {
204  FIXME("%p %p %x %p: stub\n", key, propvar, flags, text);
205  return E_NOTIMPL;
206 }
207 
209 {
211 }
212 
214 {
216 }
217 
219 {
220  return PSRefreshPropertySchema();
221 }
222 
223 static const IPropertySystemVtbl propsysvtbl = {
236 };
237 
239 
241 {
242  return IPropertySystem_QueryInterface(&propsys, riid, obj);
243 }
244 
246 {
247  FIXME("%s stub\n", debugstr_w(path));
248 
249  return S_OK;
250 }
251 
253 {
254  FIXME("%s stub\n", debugstr_w(path));
255 
256  return E_NOTIMPL;
257 }
258 
260 {
261  FIXME("%p, %p, %p\n", propkey, riid, ppv);
262  return E_NOTIMPL;
263 }
264 
266 {
267  FIXME("%s, %p, %p\n", debugstr_w(proplist), riid, ppv);
268  return E_NOTIMPL;
269 }
270 
272 {
273  FIXME("%s, %p\n", debugstr_w(name), key);
274  return E_NOTIMPL;
275 }
276 
278 {
279  FIXME("\n");
280  return S_OK;
281 }
282 
284 {
285  static const WCHAR guid_fmtW[] = {'{','%','0','8','X','-','%','0','4','X','-',
286  '%','0','4','X','-','%','0','2','X','%','0','2','X','-',
287  '%','0','2','X','%','0','2','X','%','0','2','X',
288  '%','0','2','X','%','0','2','X','%','0','2','X','}',0};
289  static const WCHAR pid_fmtW[] = {'%','u',0};
290 
291  WCHAR pidW[PKEY_PIDSTR_MAX + 1];
292  LPWSTR p = psz;
293  int len;
294 
295  TRACE("(%p, %p, %u)\n", pkey, psz, cch);
296 
297  if (!psz)
298  return E_POINTER;
299 
300  /* GUIDSTRING_MAX accounts for null terminator, +1 for space character. */
301  if (cch <= GUIDSTRING_MAX + 1)
303 
304  if (!pkey)
305  {
306  psz[0] = '\0';
308  }
309 
310  sprintfW(psz, guid_fmtW, pkey->fmtid.Data1, pkey->fmtid.Data2,
311  pkey->fmtid.Data3, pkey->fmtid.Data4[0], pkey->fmtid.Data4[1],
312  pkey->fmtid.Data4[2], pkey->fmtid.Data4[3], pkey->fmtid.Data4[4],
313  pkey->fmtid.Data4[5], pkey->fmtid.Data4[6], pkey->fmtid.Data4[7]);
314 
315  /* Overwrite the null terminator with the space character. */
316  p += GUIDSTRING_MAX - 1;
317  *p++ = ' ';
318  cch -= GUIDSTRING_MAX - 1 + 1;
319 
320  len = sprintfW(pidW, pid_fmtW, pkey->pid);
321 
322  if (cch >= len + 1)
323  {
324  strcpyW(p, pidW);
325  return S_OK;
326  }
327  else
328  {
329  WCHAR *ptr = pidW + len - 1;
330 
331  psz[0] = '\0';
332  *p++ = '\0';
333  cch--;
334 
335  /* Replicate a quirk of the native implementation where the contents
336  * of the property ID string are written backwards to the output
337  * buffer, skipping the rightmost digit. */
338  if (cch)
339  {
340  ptr--;
341  while (cch--)
342  *p++ = *ptr--;
343  }
344 
346  }
347 }
348 
349 static const BYTE hex2bin[] =
350 {
351  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x00 */
352  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x10 */
353  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x20 */
354  0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0, /* 0x30 */
355  0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0, /* 0x40 */
356  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0x50 */
357  0,10,11,12,13,14,15 /* 0x60 */
358 };
359 
361 {
362  int i;
363 
364  for (i = min; i <= max; i++)
365  {
366  if (!s[i])
367  return FALSE;
368 
369  if (i == 0)
370  {
371  if (s[i] != '{')
372  return FALSE;
373  }
374  else if (i == 9 || i == 14 || i == 19 || i == 24)
375  {
376  if (s[i] != '-')
377  return FALSE;
378  }
379  else if (i == 37)
380  {
381  if (s[i] != '}')
382  return FALSE;
383  }
384  else
385  {
386  if (s[i] > 'f' || (!hex2bin[s[i]] && s[i] != '0'))
387  return FALSE;
388  }
389  }
390 
391  return TRUE;
392 }
393 
394 /* Adapted from CLSIDFromString helper in dlls/ole32/compobj.c and
395  * UuidFromString in dlls/rpcrt4/rpcrt4_main.c. */
397 {
398  /* in form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */
399 
400  if (!validate_indices(s, 0, 8)) return FALSE;
401  id->Data1 = (hex2bin[s[1]] << 28 | hex2bin[s[2]] << 24 | hex2bin[s[3]] << 20 | hex2bin[s[4]] << 16 |
402  hex2bin[s[5]] << 12 | hex2bin[s[6]] << 8 | hex2bin[s[7]] << 4 | hex2bin[s[8]]);
403  if (!validate_indices(s, 9, 14)) return FALSE;
404  id->Data2 = hex2bin[s[10]] << 12 | hex2bin[s[11]] << 8 | hex2bin[s[12]] << 4 | hex2bin[s[13]];
405  if (!validate_indices(s, 15, 19)) return FALSE;
406  id->Data3 = hex2bin[s[15]] << 12 | hex2bin[s[16]] << 8 | hex2bin[s[17]] << 4 | hex2bin[s[18]];
407 
408  /* these are just sequential bytes */
409 
410  if (!validate_indices(s, 20, 21)) return FALSE;
411  id->Data4[0] = hex2bin[s[20]] << 4 | hex2bin[s[21]];
412  if (!validate_indices(s, 22, 24)) return FALSE;
413  id->Data4[1] = hex2bin[s[22]] << 4 | hex2bin[s[23]];
414 
415  if (!validate_indices(s, 25, 26)) return FALSE;
416  id->Data4[2] = hex2bin[s[25]] << 4 | hex2bin[s[26]];
417  if (!validate_indices(s, 27, 28)) return FALSE;
418  id->Data4[3] = hex2bin[s[27]] << 4 | hex2bin[s[28]];
419  if (!validate_indices(s, 29, 30)) return FALSE;
420  id->Data4[4] = hex2bin[s[29]] << 4 | hex2bin[s[30]];
421  if (!validate_indices(s, 31, 32)) return FALSE;
422  id->Data4[5] = hex2bin[s[31]] << 4 | hex2bin[s[32]];
423  if (!validate_indices(s, 33, 34)) return FALSE;
424  id->Data4[6] = hex2bin[s[33]] << 4 | hex2bin[s[34]];
425  if (!validate_indices(s, 35, 37)) return FALSE;
426  id->Data4[7] = hex2bin[s[35]] << 4 | hex2bin[s[36]];
427 
428  return TRUE;
429 }
430 
432 {
433  BOOL has_minus = FALSE, has_comma = FALSE;
434 
435  TRACE("(%s, %p)\n", debugstr_w(pszString), pkey);
436 
437  if (!pszString || !pkey)
438  return E_POINTER;
439 
440  memset(pkey, 0, sizeof(PROPERTYKEY));
441 
442  if (!string_to_guid(pszString, &pkey->fmtid))
443  return E_INVALIDARG;
444 
445  pszString += GUIDSTRING_MAX - 1;
446 
447  if (!*pszString)
448  return E_INVALIDARG;
449 
450  /* Only the space seems to be recognized as whitespace. The comma is only
451  * recognized once and processing terminates if another comma is found. */
452  while (*pszString == ' ' || *pszString == ',')
453  {
454  if (*pszString == ',')
455  {
456  if (has_comma)
457  return S_OK;
458  else
459  has_comma = TRUE;
460  }
461  pszString++;
462  }
463 
464  if (!*pszString)
465  return E_INVALIDARG;
466 
467  /* Only two minus signs are recognized if no comma is detected. The first
468  * sign is ignored, and the second is interpreted. If a comma is detected
469  * before the minus sign, then only one minus sign counts, and property ID
470  * interpretation begins with the next character. */
471  if (has_comma)
472  {
473  if (*pszString == '-')
474  {
475  has_minus = TRUE;
476  pszString++;
477  }
478  }
479  else
480  {
481  if (*pszString == '-')
482  pszString++;
483 
484  /* Skip any intermediate spaces after the first minus sign. */
485  while (*pszString == ' ')
486  pszString++;
487 
488  if (*pszString == '-')
489  {
490  has_minus = TRUE;
491  pszString++;
492  }
493 
494  /* Skip any remaining spaces after minus sign. */
495  while (*pszString == ' ')
496  pszString++;
497  }
498 
499  /* Overflow is not checked. */
500  while (isdigitW(*pszString))
501  {
502  pkey->pid *= 10;
503  pkey->pid += (*pszString - '0');
504  pszString++;
505  }
506 
507  if (has_minus)
508  pkey->pid = ~pkey->pid + 1;
509 
510  return S_OK;
511 }
HRESULT WINAPI DllUnregisterServer(void)
Definition: propsys_main.c:63
const uint16_t * PCWSTR
Definition: typedefs.h:55
#define max(a, b)
Definition: svc.c:63
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
Definition: propsys_main.c:41
#define REFIID
Definition: guiddef.h:113
#define TRUE
Definition: types.h:120
#define E_NOINTERFACE
Definition: winerror.h:2364
HRESULT WINAPI PSRegisterPropertySchema(PCWSTR path)
Definition: propsys_main.c:245
static HRESULT WINAPI propsys_UnregisterPropertySchema(IPropertySystem *iface, LPCWSTR path)
Definition: propsys_main.c:213
HRESULT __wine_register_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:98
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
REFIID riid
Definition: precomp.h:44
#define REFCLSID
Definition: guiddef.h:112
const WCHAR * text
Definition: package.c:1827
HRESULT WINAPI PSStringFromPropertyKey(REFPROPERTYKEY pkey, LPWSTR psz, UINT cch)
Definition: propsys_main.c:283
static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
Definition: propsys_main.c:101
HRESULT PropertyStore_CreateInstance(IUnknown *pUnkOuter, REFIID iid, void **ppv)
Definition: propstore.c:453
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT WINAPI DllRegisterServer(void)
Definition: propsys_main.c:58
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
#define DLL_PROCESS_ATTACH
Definition: compat.h:120
static BOOL string_to_guid(LPCWSTR s, LPGUID id)
Definition: propsys_main.c:396
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
Definition: propsys_main.c:126
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663
static IN DWORD IN LPVOID lpvReserved
static BOOL validate_indices(LPCWSTR s, int min, int max)
Definition: propsys_main.c:360
static HRESULT WINAPI propsys_EnumeratePropertyDescriptions(IPropertySystem *iface, PROPDESC_ENUMFILTER filter, REFIID riid, void **ppv)
Definition: propsys_main.c:185
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
static ULONG WINAPI propsys_AddRef(IPropertySystem *iface)
Definition: propsys_main.c:156
HRESULT WINAPI PSUnregisterPropertySchema(PCWSTR path)
Definition: propsys_main.c:252
static HRESULT WINAPI propsys_GetPropertyDescription(IPropertySystem *iface, REFPROPERTYKEY propkey, REFIID riid, void **ppv)
Definition: propsys_main.c:166
static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
Definition: propsys_main.c:68
unsigned int BOOL
Definition: ntddk_ex.h:94
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
static PVOID ptr
Definition: dispmode.c:27
#define S_FALSE
Definition: winerror.h:2357
#define E_INVALIDARG
Definition: ddrawi.h:101
static HRESULT WINAPI propsys_FormatForDisplayAlloc(IPropertySystem *iface, REFPROPERTYKEY key, REFPROPVARIANT propvar, PROPDESC_FORMAT_FLAGS flags, LPWSTR *text)
Definition: propsys_main.c:200
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:201
smooth NULL
Definition: ftsmooth.c:416
static HRESULT WINAPI propsys_QueryInterface(IPropertySystem *iface, REFIID riid, void **obj)
Definition: propsys_main.c:142
HRESULT WINAPI PSRefreshPropertySchema(void)
Definition: propsys_main.c:277
#define debugstr_guid
Definition: kernel32.h:35
static HRESULT WINAPI propsys_FormatForDisplay(IPropertySystem *iface, REFPROPERTYKEY key, REFPROPVARIANT propvar, PROPDESC_FORMAT_FLAGS flags, LPWSTR dest, DWORD destlen)
Definition: propsys_main.c:192
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
LONG HRESULT
Definition: typedefs.h:77
const GUID IID_IUnknown
static const BYTE hex2bin[]
Definition: propsys_main.c:349
#define WINAPI
Definition: msvc.h:8
unsigned long DWORD
Definition: ntddk_ex.h:95
GLbitfield flags
Definition: glext.h:7161
HRESULT WINAPI PSGetPropertySystem(REFIID riid, void **obj)
Definition: propsys_main.c:240
static HRESULT WINAPI propsys_GetPropertyDescriptionListFromString(IPropertySystem *iface, LPCWSTR proplist, REFIID riid, void **ppv)
Definition: propsys_main.c:179
HRESULT WINAPI PSPropertyKeyFromString(LPCWSTR pszString, PROPERTYKEY *pkey)
Definition: propsys_main.c:431
HRESULT __wine_unregister_resources(HMODULE module) DECLSPEC_HIDDEN
Definition: register.c:110
GLenum GLsizei len
Definition: glext.h:6722
unsigned char BYTE
Definition: mem.h:68
GLdouble s
Definition: gl.h:2039
static const IClassFactoryVtbl InMemoryPropertyStoreFactoryVtbl
Definition: propsys_main.c:116
static HRESULT WINAPI propsys_RegisterPropertySchema(IPropertySystem *iface, LPCWSTR path)
Definition: propsys_main.c:208
#define E_NOT_SUFFICIENT_BUFFER
Definition: winerror.h:2345
static HRESULT WINAPI propsys_GetPropertyDescriptionByName(IPropertySystem *iface, LPCWSTR canonical_name, REFIID riid, void **ppv)
Definition: propsys_main.c:172
WINE_DEFAULT_DEBUG_CHANNEL(propsys)
PSSTDAPI typedef PROPERTYKEY * REFPROPERTYKEY
Definition: propsys.idl:30
static HRESULT WINAPI propsys_RefreshPropertySchema(IPropertySystem *iface)
Definition: propsys_main.c:218
#define S_OK
Definition: intsafe.h:59
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
Definition: propsys_main.c:95
HRESULT WINAPI PSGetPropertyDescriptionListFromString(LPCWSTR proplist, REFIID riid, void **ppv)
Definition: propsys_main.c:265
static ULONG WINAPI propsys_Release(IPropertySystem *iface)
Definition: propsys_main.c:161
static IPropertySystem propsys
Definition: propsys_main.c:238
static const IPropertySystemVtbl propsysvtbl
Definition: propsys_main.c:223
#define E_NOTIMPL
Definition: ddrawi.h:99
Definition: services.c:325
#define sprintfW
Definition: unicode.h:58
WINE_UNICODE_INLINE int isdigitW(WCHAR wc)
Definition: unicode.h:170
#define min(a, b)
Definition: monoChain.cc:55
unsigned int UINT
Definition: ndis.h:50
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4021
static HINSTANCE propsys_hInstance
Definition: propsys_main.c:39
static HRESULT WINAPI InMemoryPropertyStoreFactory_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
Definition: propsys_main.c:108
Definition: name.c:36
unsigned int ULONG
Definition: retypes.h:1
HRESULT WINAPI PSGetPropertyDescription(REFPROPERTYKEY propkey, REFIID riid, void **ppv)
Definition: propsys_main.c:259
static char * dest
Definition: rtl.c:135
static IClassFactory InMemoryPropertyStoreFactory
Definition: propsys_main.c:124
GLfloat GLfloat p
Definition: glext.h:8902
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define E_POINTER
Definition: winerror.h:2365
const GUID IID_IClassFactory
#define memset(x, y, z)
Definition: compat.h:39
HRESULT WINAPI DllCanUnloadNow(void)
Definition: propsys_main.c:137
static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
Definition: propsys_main.c:89
HRESULT WINAPI PSGetPropertyKeyFromName(PCWSTR name, PROPERTYKEY *key)
Definition: propsys_main.c:271
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
Definition: glext.h:7005
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:90
_In_ DWORD _In_ DWORD _Out_writes_to_opt_ pcchString LPSTR pszString
Definition: wincrypt.h:4509
Definition: path.c:42