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