ReactOS  0.4.13-dev-455-g28ed234
cpsf.c
Go to the documentation of this file.
1 /*
2  * COM proxy/stub factory (CStdPSFactory) implementation
3  *
4  * Copyright 2001 Ove K√•ven, TransGaming Technologies
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 "config.h"
22 #include "wine/port.h"
23 
24 #include <stdarg.h>
25 #include <stdio.h>
26 #include <string.h>
27 
28 #define COBJMACROS
29 
30 #include "windef.h"
31 #include "winbase.h"
32 #include "winerror.h"
33 #include "winreg.h"
34 
35 #include "objbase.h"
36 
37 #include "rpcproxy.h"
38 
39 #include "wine/unicode.h"
40 #include "wine/debug.h"
41 
42 #include "cpsf.h"
43 
45 
46 static void format_clsid( WCHAR *buffer, const CLSID *clsid )
47 {
48  static const WCHAR clsid_formatW[] = {'{','%','0','8','X','-','%','0','4','X','-','%','0','4','X','-',
49  '%','0','2','X','%','0','2','X','-','%','0','2','X','%','0','2','X',
50  '%','0','2','X','%','0','2','X','%','0','2','X','%','0','2','X','}',0};
51 
52  sprintfW( buffer, clsid_formatW, clsid->Data1, clsid->Data2, clsid->Data3,
53  clsid->Data4[0], clsid->Data4[1], clsid->Data4[2], clsid->Data4[3],
54  clsid->Data4[4], clsid->Data4[5], clsid->Data4[6], clsid->Data4[7] );
55 
56 }
57 
58 static BOOL FindProxyInfo(const ProxyFileInfo **pProxyFileList, REFIID riid, const ProxyFileInfo **pProxyInfo, int *pIndex)
59 {
60  while (*pProxyFileList) {
61  if ((*pProxyFileList)->pIIDLookupRtn(riid, pIndex)) {
62  *pProxyInfo = *pProxyFileList;
63  TRACE("found: ProxyInfo %p Index %d\n", *pProxyInfo, *pIndex);
64  return TRUE;
65  }
66  pProxyFileList++;
67  }
68  TRACE("not found\n");
69  return FALSE;
70 }
71 
72 static HRESULT WINAPI CStdPSFactory_QueryInterface(LPPSFACTORYBUFFER iface,
73  REFIID riid,
74  LPVOID *obj)
75 {
77  TRACE("(%p)->QueryInterface(%s,%p)\n",iface,debugstr_guid(riid),obj);
79  IsEqualGUID(&IID_IPSFactoryBuffer,riid)) {
80  *obj = This;
81  InterlockedIncrement( &This->RefCount );
82  return S_OK;
83  }
84  return E_NOINTERFACE;
85 }
86 
87 static ULONG WINAPI CStdPSFactory_AddRef(LPPSFACTORYBUFFER iface)
88 {
90  TRACE("(%p)->AddRef()\n",iface);
91  return InterlockedIncrement( &This->RefCount );
92 }
93 
94 static ULONG WINAPI CStdPSFactory_Release(LPPSFACTORYBUFFER iface)
95 {
97  TRACE("(%p)->Release()\n",iface);
98  return InterlockedDecrement( &This->RefCount );
99 }
100 
101 static HRESULT WINAPI CStdPSFactory_CreateProxy(LPPSFACTORYBUFFER iface,
102  LPUNKNOWN pUnkOuter,
103  REFIID riid,
104  LPRPCPROXYBUFFER *ppProxy,
105  LPVOID *ppv)
106 {
108  const ProxyFileInfo *ProxyInfo;
109  int Index;
110  TRACE("(%p)->CreateProxy(%p,%s,%p,%p)\n",iface,pUnkOuter,
111  debugstr_guid(riid),ppProxy,ppv);
112  if (!FindProxyInfo(This->pProxyFileList,riid,&ProxyInfo,&Index))
113  return E_NOINTERFACE;
114  return StdProxy_Construct(riid, pUnkOuter, ProxyInfo, Index, iface, ppProxy, ppv);
115 }
116 
117 static HRESULT WINAPI CStdPSFactory_CreateStub(LPPSFACTORYBUFFER iface,
118  REFIID riid,
119  LPUNKNOWN pUnkServer,
120  LPRPCSTUBBUFFER *ppStub)
121 {
123  const ProxyFileInfo *ProxyInfo;
124  int Index;
125  TRACE("(%p)->CreateStub(%s,%p,%p)\n",iface,debugstr_guid(riid),
126  pUnkServer,ppStub);
127  if (!FindProxyInfo(This->pProxyFileList,riid,&ProxyInfo,&Index))
128  return E_NOINTERFACE;
129 
130  if(ProxyInfo->pDelegatedIIDs && ProxyInfo->pDelegatedIIDs[Index])
131  return CStdStubBuffer_Delegating_Construct(riid, pUnkServer, ProxyInfo->pNamesArray[Index],
132  ProxyInfo->pStubVtblList[Index], ProxyInfo->pDelegatedIIDs[Index],
133  iface, ppStub);
134 
135  return CStdStubBuffer_Construct(riid, pUnkServer, ProxyInfo->pNamesArray[Index],
136  ProxyInfo->pStubVtblList[Index], iface, ppStub);
137 }
138 
139 static const IPSFactoryBufferVtbl CStdPSFactory_Vtbl =
140 {
146 };
147 
148 
149 static void init_psfactory( CStdPSFactoryBuffer *psfac, const ProxyFileInfo **file_list )
150 {
151  DWORD i, j, k;
152 
153  psfac->lpVtbl = &CStdPSFactory_Vtbl;
154  psfac->RefCount = 0;
155  psfac->pProxyFileList = file_list;
156  for (i = 0; file_list[i]; i++)
157  {
158  const PCInterfaceProxyVtblList *proxies = file_list[i]->pProxyVtblList;
159  const PCInterfaceStubVtblList *stubs = file_list[i]->pStubVtblList;
160 
161  for (j = 0; j < file_list[i]->TableSize; j++)
162  {
163  /* FIXME: i think that different vtables should be copied for
164  * async interfaces */
165  void * const *pSrcRpcStubVtbl = (void * const *)&CStdStubBuffer_Vtbl;
166  void **pRpcStubVtbl = (void **)&stubs[j]->Vtbl;
167 
168  if (file_list[i]->pDelegatedIIDs && file_list[i]->pDelegatedIIDs[j])
169  {
170  void **vtbl = proxies[j]->Vtbl;
171  if (file_list[i]->TableVersion > 1) vtbl++;
172  fill_delegated_proxy_table( (IUnknownVtbl *)vtbl, stubs[j]->header.DispatchTableCount );
173  pSrcRpcStubVtbl = (void * const *)&CStdStubBuffer_Delegating_Vtbl;
174  }
175 
176  for (k = 0; k < sizeof(IRpcStubBufferVtbl)/sizeof(void *); k++)
177  if (!pRpcStubVtbl[k]) pRpcStubVtbl[k] = pSrcRpcStubVtbl[k];
178  }
179  }
180 }
181 
182 
183 /***********************************************************************
184  * NdrDllGetClassObject [RPCRT4.@]
185  */
187  const ProxyFileInfo **pProxyFileList,
188  const CLSID *pclsid,
189  CStdPSFactoryBuffer *pPSFactoryBuffer)
190 {
191  TRACE("(%s, %s, %p, %p, %s, %p)\n", debugstr_guid(rclsid),
192  debugstr_guid(iid), ppv, pProxyFileList, debugstr_guid(pclsid),
193  pPSFactoryBuffer);
194 
195  *ppv = NULL;
196  if (!pPSFactoryBuffer->lpVtbl) init_psfactory( pPSFactoryBuffer, pProxyFileList );
197 
198  if (pclsid && IsEqualGUID(rclsid, pclsid))
199  return IPSFactoryBuffer_QueryInterface((LPPSFACTORYBUFFER)pPSFactoryBuffer, iid, ppv);
200  else {
201  const ProxyFileInfo *info;
202  int index;
203  /* otherwise, the dll may be using the iid as the clsid, so
204  * search for it in the proxy file list */
205  if (FindProxyInfo(pProxyFileList, rclsid, &info, &index))
206  return IPSFactoryBuffer_QueryInterface((LPPSFACTORYBUFFER)pPSFactoryBuffer, iid, ppv);
207 
208  WARN("class %s not available\n", debugstr_guid(rclsid));
210  }
211 }
212 
213 /***********************************************************************
214  * NdrDllCanUnloadNow [RPCRT4.@]
215  */
217 {
218  return pPSFactoryBuffer->RefCount != 0 ? S_FALSE : S_OK;
219 }
220 
221 
222 /***********************************************************************
223  * NdrDllRegisterProxy [RPCRT4.@]
224  */
226  const ProxyFileInfo **pProxyFileList,
227  const CLSID *pclsid)
228 {
229  static const WCHAR bothW[] = {'B','o','t','h',0};
230  static const WCHAR clsidW[] = {'C','L','S','I','D','\\',0};
231  static const WCHAR clsid32W[] = {'P','r','o','x','y','S','t','u','b','C','l','s','i','d','3','2',0};
232  static const WCHAR interfaceW[] = {'I','n','t','e','r','f','a','c','e','\\',0};
233  static const WCHAR psfactoryW[] = {'P','S','F','a','c','t','o','r','y','B','u','f','f','e','r',0};
234  static const WCHAR numformatW[] = {'%','u',0};
235  static const WCHAR nummethodsW[] = {'N','u','m','M','e','t','h','o','d','s',0};
236  static const WCHAR inprocserverW[] = {'I','n','P','r','o','c','S','e','r','v','e','r','3','2',0};
237  static const WCHAR threadingmodelW[] = {'T','h','r','e','a','d','i','n','g','M','o','d','e','l',0};
238  WCHAR clsid[39], keyname[50], module[MAX_PATH];
239  HKEY key, subkey;
240  DWORD len;
241 
242  TRACE("(%p,%p,%s)\n", hDll, pProxyFileList, debugstr_guid(pclsid));
243 
244  if (!hDll) return E_HANDLE;
245  if (!*pProxyFileList) return E_NOINTERFACE;
246 
247  if (pclsid)
248  format_clsid( clsid, pclsid );
249  else if ((*pProxyFileList)->TableSize > 0)
250  format_clsid( clsid,(*pProxyFileList)->pStubVtblList[0]->header.piid);
251  else
252  return E_NOINTERFACE;
253 
254  /* register interfaces to point to clsid */
255  while (*pProxyFileList) {
256  unsigned u;
257  for (u=0; u<(*pProxyFileList)->TableSize; u++) {
258  CInterfaceStubVtbl *proxy = (*pProxyFileList)->pStubVtblList[u];
259  PCInterfaceName name = (*pProxyFileList)->pNamesArray[u];
260 
261  TRACE("registering %s %s => %s\n",
262  debugstr_a(name), debugstr_guid(proxy->header.piid), debugstr_w(clsid));
263 
264  strcpyW( keyname, interfaceW );
265  format_clsid( keyname + strlenW(keyname), proxy->header.piid );
266  if (RegCreateKeyW(HKEY_CLASSES_ROOT, keyname, &key) == ERROR_SUCCESS) {
267  WCHAR num[10];
268  if (name)
269  RegSetValueExA(key, NULL, 0, REG_SZ, (const BYTE *)name, strlen(name)+1);
270  RegSetValueW( key, clsid32W, REG_SZ, clsid, 0 );
271  sprintfW(num, numformatW, proxy->header.DispatchTableCount);
273  RegCloseKey(key);
274  }
275  }
276  pProxyFileList++;
277  }
278 
279  /* register clsid to point to module */
280  strcpyW( keyname, clsidW );
281  strcatW( keyname, clsid );
283  if (len && len < sizeof(module)) {
284  TRACE("registering CLSID %s => %s\n", debugstr_w(clsid), debugstr_w(module));
285  if (RegCreateKeyW(HKEY_CLASSES_ROOT, keyname, &key) == ERROR_SUCCESS) {
286  RegSetValueExW(key, NULL, 0, REG_SZ, (const BYTE *)psfactoryW, sizeof(psfactoryW));
287  if (RegCreateKeyW(key, inprocserverW, &subkey) == ERROR_SUCCESS) {
288  RegSetValueExW(subkey, NULL, 0, REG_SZ, (LPBYTE)module, (strlenW(module)+1)*sizeof(WCHAR));
289  RegSetValueExW(subkey, threadingmodelW, 0, REG_SZ, (const BYTE *)bothW, sizeof(bothW));
290  RegCloseKey(subkey);
291  }
292  RegCloseKey(key);
293  }
294  }
295 
296  return S_OK;
297 }
298 
299 /***********************************************************************
300  * NdrDllUnregisterProxy [RPCRT4.@]
301  */
303  const ProxyFileInfo **pProxyFileList,
304  const CLSID *pclsid)
305 {
306  static const WCHAR clsidW[] = {'C','L','S','I','D','\\',0};
307  static const WCHAR interfaceW[] = {'I','n','t','e','r','f','a','c','e','\\',0};
308  WCHAR keyname[50];
309  WCHAR clsid[39];
310 
311  TRACE("(%p,%p,%s)\n", hDll, pProxyFileList, debugstr_guid(pclsid));
312  if (pclsid)
313  format_clsid( clsid, pclsid );
314  else if ((*pProxyFileList)->TableSize > 0)
315  format_clsid( clsid,(*pProxyFileList)->pStubVtblList[0]->header.piid);
316  else
317  return E_NOINTERFACE;
318 
319  /* unregister interfaces */
320  while (*pProxyFileList) {
321  unsigned u;
322  for (u=0; u<(*pProxyFileList)->TableSize; u++) {
323  CInterfaceStubVtbl *proxy = (*pProxyFileList)->pStubVtblList[u];
324  PCInterfaceName name = (*pProxyFileList)->pNamesArray[u];
325 
326  TRACE("unregistering %s %s\n", debugstr_a(name), debugstr_guid(proxy->header.piid));
327 
328  strcpyW( keyname, interfaceW );
329  format_clsid( keyname + strlenW(keyname), proxy->header.piid );
331  }
332  pProxyFileList++;
333  }
334 
335  /* unregister clsid */
336  strcpyW( keyname, clsidW );
337  strcatW( keyname, clsid );
339 
340  return S_OK;
341 }
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 * u
Definition: glfuncs.h:240
HRESULT CStdStubBuffer_Construct(REFIID riid, LPUNKNOWN pUnkServer, PCInterfaceName name, CInterfaceStubVtbl *vtbl, LPPSFACTORYBUFFER pPSFactory, LPRPCSTUBBUFFER *ppStub) DECLSPEC_HIDDEN
Definition: cstub.c:58
DWORD WINAPI GetModuleFileNameW(HINSTANCE hModule, LPWSTR lpFilename, DWORD nSize)
Definition: loader.c:607
static void init_psfactory(CStdPSFactoryBuffer *psfac, const ProxyFileInfo **file_list)
Definition: cpsf.c:149
int proxy
Definition: main.c:67
#define REFIID
Definition: guiddef.h:113
#define TRUE
Definition: types.h:120
#define E_NOINTERFACE
Definition: winerror.h:2364
#define E_HANDLE
Definition: winerror.h:2850
BOOL fill_delegated_proxy_table(IUnknownVtbl *vtbl, DWORD num) DECLSPEC_HIDDEN
Definition: cstub.c:252
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
#define ERROR_SUCCESS
Definition: deptool.c:10
HRESULT WINAPI NdrDllUnregisterProxy(HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid)
Definition: cpsf.c:302
const ProxyFileInfo ** pProxyFileList
Definition: rpcproxy.h:122
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
REFIID riid
Definition: precomp.h:44
#define REFCLSID
Definition: guiddef.h:112
interface IRpcProxyBuffer * LPRPCPROXYBUFFER
Definition: objfwd.h:40
#define WARN(fmt,...)
Definition: debug.h:111
REFIID LPVOID * ppv
Definition: atlbase.h:39
LONG WINAPI RegSetValueW(HKEY hKeyOriginal, LPCWSTR lpSubKey, DWORD dwType, LPCWSTR lpData, DWORD cbData)
Definition: reg.c:5014
GLuint buffer
Definition: glext.h:5915
HRESULT StdProxy_Construct(REFIID riid, LPUNKNOWN pUnkOuter, const ProxyFileInfo *ProxyInfo, int Index, LPPSFACTORYBUFFER pPSFactory, LPRPCPROXYBUFFER *ppProxy, LPVOID *ppvObj)
Definition: cproxy.c:261
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663
const PCInterfaceName * pNamesArray
Definition: rpcproxy.h:50
struct _test_info info[]
Definition: SetCursorPos.c:19
static HRESULT WINAPI CStdPSFactory_CreateStub(LPPSFACTORYBUFFER iface, REFIID riid, LPUNKNOWN pUnkServer, LPRPCSTUBBUFFER *ppStub)
Definition: cpsf.c:117
static void format_clsid(WCHAR *buffer, const CLSID *clsid)
Definition: cpsf.c:46
const IPSFactoryBufferVtbl * lpVtbl
Definition: rpcproxy.h:120
static ULONG WINAPI CStdPSFactory_AddRef(LPPSFACTORYBUFFER iface)
Definition: cpsf.c:87
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
LONG WINAPI RegCloseKey(HKEY hKey)
Definition: reg.c:423
unsigned char * LPBYTE
Definition: typedefs.h:52
HRESULT CStdStubBuffer_Delegating_Construct(REFIID riid, LPUNKNOWN pUnkServer, PCInterfaceName name, CInterfaceStubVtbl *vtbl, REFIID delegating_iid, LPPSFACTORYBUFFER pPSFactory, LPRPCSTUBBUFFER *ppStub) DECLSPEC_HIDDEN
Definition: cstub.c:326
unsigned int BOOL
Definition: ntddk_ex.h:94
static LPUNKNOWN
Definition: ndr_ole.c:49
#define debugstr_w
Definition: kernel32.h:32
#define S_FALSE
Definition: winerror.h:2357
static BOOL FindProxyInfo(const ProxyFileInfo **pProxyFileList, REFIID riid, const ProxyFileInfo **pProxyInfo, int *pIndex)
Definition: cpsf.c:58
smooth NULL
Definition: ftsmooth.c:416
HRESULT WINAPI NdrDllRegisterProxy(HMODULE hDll, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid)
Definition: cpsf.c:225
GLuint index
Definition: glext.h:6031
const PCInterfaceStubVtblList * pStubVtblList
Definition: rpcproxy.h:49
static const WCHAR threadingmodelW[]
Definition: actctx.c:612
#define debugstr_guid
Definition: kernel32.h:35
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 GLint GLint j
Definition: glfuncs.h:250
LONG WINAPI RegSetValueExW(_In_ HKEY hKey, _In_ LPCWSTR lpValueName, _In_ DWORD Reserved, _In_ DWORD dwType, _In_ CONST BYTE *lpData, _In_ DWORD cbData)
Definition: reg.c:4895
#define TRACE(s)
Definition: solgame.cpp:4
static const WCHAR clsidW[]
__wchar_t WCHAR
Definition: xmlstorage.h:180
const IRpcStubBufferVtbl CStdStubBuffer_Vtbl
Definition: cstub.c:538
WINE_DEFAULT_DEBUG_CHANNEL(ole)
#define debugstr_a
Definition: kernel32.h:31
LONG HRESULT
Definition: typedefs.h:77
const GUID IID_IUnknown
#define MAX_PATH
Definition: compat.h:26
#define WINAPI
Definition: msvc.h:8
static const UCHAR Index[8]
Definition: usbohci.c:18
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint num
Definition: glext.h:9618
static HRESULT WINAPI CStdPSFactory_CreateProxy(LPPSFACTORYBUFFER iface, LPUNKNOWN pUnkOuter, REFIID riid, LPRPCPROXYBUFFER *ppProxy, LPVOID *ppv)
Definition: cpsf.c:101
REFCLSID clsid
Definition: msctf.c:84
#define index(s, c)
Definition: various.h:29
static HRESULT WINAPI CStdPSFactory_QueryInterface(LPPSFACTORYBUFFER iface, REFIID riid, LPVOID *obj)
Definition: cpsf.c:72
#define InterlockedDecrement
Definition: armddk.h:52
HKEY key
Definition: reg.c:42
HRESULT WINAPI NdrDllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv, const ProxyFileInfo **pProxyFileList, const CLSID *pclsid, CStdPSFactoryBuffer *pPSFactoryBuffer)
Definition: cpsf.c:186
GLenum GLsizei len
Definition: glext.h:6722
unsigned char BYTE
Definition: mem.h:68
LONG WINAPI RegCreateKeyW(HKEY hKey, LPCWSTR lpSubKey, PHKEY phkResult)
Definition: reg.c:1199
LSTATUS WINAPI RegDeleteTreeW(HKEY hKey, LPCWSTR lpszSubKey)
Definition: reg.c:1746
const PCInterfaceProxyVtblList * pProxyVtblList
Definition: rpcproxy.h:48
#define S_OK
Definition: intsafe.h:59
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
_Out_ PULONG _Out_ PULONG pIndex
Definition: ndis.h:4564
#define InterlockedIncrement
Definition: armddk.h:53
static const WCHAR nummethodsW[]
Definition: actctx.c:631
const char * PCInterfaceName
Definition: rpcproxy.h:42
#define ARRAY_SIZE(a)
Definition: main.h:24
const IID ** pDelegatedIIDs
Definition: rpcproxy.h:51
#define sprintfW
Definition: unicode.h:58
WINE_UNICODE_INLINE WCHAR * strcatW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:242
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
Definition: compobj.c:4021
unsigned short TableSize
Definition: rpcproxy.h:53
HRESULT WINAPI NdrDllCanUnloadNow(CStdPSFactoryBuffer *pPSFactoryBuffer)
Definition: cpsf.c:216
Definition: name.c:36
unsigned int ULONG
Definition: retypes.h:1
static ULONG WINAPI CStdPSFactory_Release(LPPSFACTORYBUFFER iface)
Definition: cpsf.c:94
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
interface IRpcStubBuffer * LPRPCSTUBBUFFER
Definition: objfwd.h:41
LONG WINAPI RegSetValueExA(HKEY hKey, LPCSTR lpValueName, DWORD Reserved, DWORD dwType, CONST BYTE *lpData, DWORD cbData)
Definition: reg.c:4812
int k
Definition: mpi.c:3369
struct CFHEADER header
Definition: fdi.c:109
const IRpcStubBufferVtbl CStdStubBuffer_Delegating_Vtbl
Definition: cstub.c:587
static const IPSFactoryBufferVtbl CStdPSFactory_Vtbl
Definition: cpsf.c:139
Definition: path.c:42
#define REG_SZ
Definition: layer.c:22