ReactOS 0.4.15-dev-7788-g1ad9096
bindctx.c
Go to the documentation of this file.
1/*
2 * BindCtx implementation
3 *
4 * Copyright 1999 Noomen Hamza
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 <stdarg.h>
22#include <string.h>
23
24#define COBJMACROS
25
26#include "winerror.h"
27#include "windef.h"
28#include "winbase.h"
29#include "winnls.h"
30#include "objbase.h"
31
32#include "wine/debug.h"
33
35
36#define BINDCTX_FIRST_TABLE_SIZE 4
37
38/* data structure of the BindCtx table elements */
39typedef struct BindCtxObject{
40
41 IUnknown* pObj; /* point on a bound object */
42
43 LPOLESTR pkeyObj; /* key associated to this bound object */
44
45 BYTE regType; /* registration type: 1 if RegisterObjectParam and 0 if RegisterObjectBound */
46
48
49/* BindCtx data structure */
50typedef struct BindCtxImpl{
51
53
54 LONG ref; /* reference counter for this object */
55
56 BindCtxObject* bindCtxTable; /* this is a table in which all bounded objects are stored*/
57 DWORD bindCtxTableLastIndex; /* first free index in the table */
58 DWORD bindCtxTableSize; /* size table */
59
60 BIND_OPTS2 bindOption2; /* a structure which contains the bind options*/
61
63
64/* IBindCtx prototype functions : */
68
70{
71return CONTAINING_RECORD(iface, BindCtxImpl, IBindCtx_iface);
72}
73
74/*******************************************************************************
75 * BindCtx_QueryInterface
76 *******************************************************************************/
77static HRESULT WINAPI
79{
81
82 TRACE("(%p %s %p)\n",This, debugstr_guid(riid), ppvObject);
83
84 /* Perform a sanity check on the parameters.*/
85 if (!ppvObject)
86 return E_POINTER;
87
88 /* Initialize the return parameter.*/
89 *ppvObject = 0;
90
91 /* Compare the riid with the interface IDs implemented by this object.*/
93 IsEqualIID(&IID_IBindCtx, riid))
94 {
95 *ppvObject = &This->IBindCtx_iface;
96 IBindCtx_AddRef(iface);
97 return S_OK;
98 }
99
100 return E_NOINTERFACE;
101}
102
103/******************************************************************************
104 * BindCtx_AddRef
105 ******************************************************************************/
107{
109
110 TRACE("(%p)\n",This);
111
112 return InterlockedIncrement(&This->ref);
113}
114
115/******************************************************************************
116 * BindCtx_Destroy (local function)
117 *******************************************************************************/
119{
120 TRACE("(%p)\n",This);
121
122 /* free the table space memory */
123 HeapFree(GetProcessHeap(),0,This->bindCtxTable);
124
125 /* free the bindctx structure */
127
128 return S_OK;
129}
130
131/******************************************************************************
132 * BindCtx_Release
133 ******************************************************************************/
135{
137 ULONG ref;
138
139 TRACE("(%p)\n",This);
140
142 if (ref == 0)
143 {
144 /* release all registered objects */
145 BindCtxImpl_ReleaseBoundObjects(&This->IBindCtx_iface);
146
148 }
149 return ref;
150}
151
152
153/******************************************************************************
154 * BindCtx_RegisterObjectBound
155 ******************************************************************************/
156static HRESULT WINAPI
158{
160 DWORD lastIndex=This->bindCtxTableLastIndex;
161
162 TRACE("(%p,%p)\n",This,punk);
163
164 if (punk==NULL)
165 return S_OK;
166
167 if (lastIndex == This->bindCtxTableSize)
168 {
170 if (FAILED(hr))
171 return hr;
172 }
173
174 IUnknown_AddRef(punk);
175
176 /* put the object in the first free element in the table */
177 This->bindCtxTable[lastIndex].pObj = punk;
178 This->bindCtxTable[lastIndex].pkeyObj = NULL;
179 This->bindCtxTable[lastIndex].regType = 0;
180 lastIndex= ++This->bindCtxTableLastIndex;
181
182 return S_OK;
183}
184
185/******************************************************************************
186 * BindCtx_RevokeObjectBound
187 ******************************************************************************/
188static HRESULT WINAPI
190{
191 DWORD index,j;
192
194
195 TRACE("(%p,%p)\n",This,punk);
196
197 if (!punk)
198 return E_INVALIDARG;
199
200 /* check if the object was registered or not */
202 return MK_E_NOTBOUND;
203
204 if(This->bindCtxTable[index].pObj)
205 IUnknown_Release(This->bindCtxTable[index].pObj);
206 HeapFree(GetProcessHeap(),0,This->bindCtxTable[index].pkeyObj);
207
208 /* left-shift all elements in the right side of the current revoked object */
209 for(j=index; j<This->bindCtxTableLastIndex-1; j++)
210 This->bindCtxTable[j]= This->bindCtxTable[j+1];
211
212 This->bindCtxTableLastIndex--;
213
214 return S_OK;
215}
216
217/******************************************************************************
218 * BindCtx_ReleaseBoundObjects
219 ******************************************************************************/
220static HRESULT WINAPI
222{
223 DWORD i;
224
226
227 TRACE("(%p)\n",This);
228
229 for(i=0;i<This->bindCtxTableLastIndex;i++)
230 {
231 if(This->bindCtxTable[i].pObj)
232 IUnknown_Release(This->bindCtxTable[i].pObj);
233 HeapFree(GetProcessHeap(),0,This->bindCtxTable[i].pkeyObj);
234 }
235
236 This->bindCtxTableLastIndex = 0;
237
238 return S_OK;
239}
240
241/******************************************************************************
242 * BindCtx_SetBindOptions
243 ******************************************************************************/
244static HRESULT WINAPI
245BindCtxImpl_SetBindOptions(IBindCtx* iface,BIND_OPTS *pbindopts)
246{
248
249 TRACE("(%p,%p)\n",This,pbindopts);
250
251 if (pbindopts==NULL)
252 return E_POINTER;
253
254 if (pbindopts->cbStruct > sizeof(BIND_OPTS2))
255 {
256 WARN("invalid size\n");
257 return E_INVALIDARG; /* FIXME : not verified */
258 }
259 memcpy(&This->bindOption2, pbindopts, pbindopts->cbStruct);
260 return S_OK;
261}
262
263/******************************************************************************
264 * BindCtx_GetBindOptions
265 ******************************************************************************/
266static HRESULT WINAPI
267BindCtxImpl_GetBindOptions(IBindCtx* iface,BIND_OPTS *pbindopts)
268{
270 ULONG cbStruct;
271
272 TRACE("(%p,%p)\n",This,pbindopts);
273
274 if (pbindopts==NULL)
275 return E_POINTER;
276
277 cbStruct = pbindopts->cbStruct;
278 if (cbStruct > sizeof(BIND_OPTS2))
279 cbStruct = sizeof(BIND_OPTS2);
280
281 memcpy(pbindopts, &This->bindOption2, cbStruct);
282 pbindopts->cbStruct = cbStruct;
283
284 return S_OK;
285}
286
287/******************************************************************************
288 * BindCtx_GetRunningObjectTable
289 ******************************************************************************/
290static HRESULT WINAPI
292{
294
295 TRACE("(%p,%p)\n",This,pprot);
296
297 if (pprot==NULL)
298 return E_POINTER;
299
300 return GetRunningObjectTable(0, pprot);
301}
302
303/******************************************************************************
304 * BindCtx_RegisterObjectParam
305 ******************************************************************************/
306static HRESULT WINAPI
308{
309 DWORD index=0;
311
312 TRACE("(%p,%s,%p)\n",This,debugstr_w(pszkey),punk);
313
314 if (punk==NULL)
315 return E_INVALIDARG;
316
317 if (pszkey!=NULL && BindCtxImpl_GetObjectIndex(This,NULL,pszkey,&index)==S_OK)
318 {
319 TRACE("Overwriting existing key\n");
320 if(This->bindCtxTable[index].pObj!=NULL)
321 IUnknown_Release(This->bindCtxTable[index].pObj);
322 This->bindCtxTable[index].pObj=punk;
323 IUnknown_AddRef(punk);
324 return S_OK;
325 }
326
327 if (This->bindCtxTableLastIndex == This->bindCtxTableSize)
328 {
330 if (FAILED(hr))
331 return hr;
332 }
333
334 This->bindCtxTable[This->bindCtxTableLastIndex].pObj = punk;
335 This->bindCtxTable[This->bindCtxTableLastIndex].regType = 1;
336
337 if (pszkey==NULL)
338
339 This->bindCtxTable[This->bindCtxTableLastIndex].pkeyObj=NULL;
340
341 else
342 {
343
344 This->bindCtxTable[This->bindCtxTableLastIndex].pkeyObj=
345 HeapAlloc(GetProcessHeap(),0,(sizeof(WCHAR)*(1+lstrlenW(pszkey))));
346
347 if (This->bindCtxTable[This->bindCtxTableLastIndex].pkeyObj==NULL)
348 return E_OUTOFMEMORY;
349 lstrcpyW(This->bindCtxTable[This->bindCtxTableLastIndex].pkeyObj,pszkey);
350 }
351
352 This->bindCtxTableLastIndex++;
353
354 IUnknown_AddRef(punk);
355 return S_OK;
356}
357
358/******************************************************************************
359 * BindCtx_GetObjectParam
360 ******************************************************************************/
361static HRESULT WINAPI
363{
364 DWORD index;
366
367 TRACE("(%p,%s,%p)\n",This,debugstr_w(pszkey),punk);
368
369 if (punk==NULL)
370 return E_POINTER;
371
372 *punk=0;
373
375 return E_FAIL;
376
377 IUnknown_AddRef(This->bindCtxTable[index].pObj);
378
379 *punk = This->bindCtxTable[index].pObj;
380
381 return S_OK;
382}
383
384/******************************************************************************
385 * BindCtx_RevokeObjectParam
386 ******************************************************************************/
387static HRESULT WINAPI
389{
390 DWORD index,j;
391
393
394 TRACE("(%p,%s)\n",This,debugstr_w(ppenum));
395
397 return E_FAIL;
398
399 /* release the object if it's found */
400 if(This->bindCtxTable[index].pObj)
401 IUnknown_Release(This->bindCtxTable[index].pObj);
402 HeapFree(GetProcessHeap(),0,This->bindCtxTable[index].pkeyObj);
403
404 /* remove the object from the table with a left-shifting of all objects in the right side */
405 for(j=index; j<This->bindCtxTableLastIndex-1; j++)
406 This->bindCtxTable[j]= This->bindCtxTable[j+1];
407
408 This->bindCtxTableLastIndex--;
409
410 return S_OK;
411}
412
413/******************************************************************************
414 * BindCtx_EnumObjectParam
415 ******************************************************************************/
416static HRESULT WINAPI
418{
419 TRACE("(%p,%p)\n",iface,pszkey);
420
421 *pszkey = NULL;
422
423 /* not implemented in native either */
424 return E_NOTIMPL;
425}
426
427/********************************************************************************
428 * GetObjectIndex (local function)
429 ********************************************************************************/
431 IUnknown* punk,
432 LPOLESTR pszkey,
433 DWORD *index)
434{
435 DWORD i;
436 BOOL found = FALSE;
437
438 TRACE("(%p,%p,%p,%p)\n",This,punk,pszkey,index);
439
440 if (punk==NULL)
441 /* search object identified by a register key */
442 for(i=0; ( (i<This->bindCtxTableLastIndex) && (!found));i++)
443 {
444 if(This->bindCtxTable[i].regType==1){
445
446 if ( ( (This->bindCtxTable[i].pkeyObj==NULL) && (pszkey==NULL) ) ||
447 ( (This->bindCtxTable[i].pkeyObj!=NULL) &&
448 (pszkey!=NULL) &&
449 (wcscmp(This->bindCtxTable[i].pkeyObj,pszkey)==0)
450 )
451 )
452
453 found = TRUE;
454 }
455 }
456 else
457 /* search object identified by a moniker*/
458 for(i=0; ( (i<This->bindCtxTableLastIndex) && (!found));i++)
459 if(This->bindCtxTable[i].pObj==punk)
460 found = TRUE;
461
462 if (index != NULL)
463 *index=i-1;
464
465 if (found)
466 return S_OK;
467 TRACE("key not found\n");
468 return S_FALSE;
469}
470
472{
473 if (!This->bindCtxTableSize)
474 {
475 This->bindCtxTableSize = BINDCTX_FIRST_TABLE_SIZE;
477 This->bindCtxTableSize * sizeof(BindCtxObject));
478 }
479 else
480 {
481 This->bindCtxTableSize *= 2;
482
483 This->bindCtxTable = HeapReAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,This->bindCtxTable,
484 This->bindCtxTableSize * sizeof(BindCtxObject));
485 }
486
487 if (!This->bindCtxTable)
488 return E_OUTOFMEMORY;
489
490 return S_OK;
491}
492
493
494/* Virtual function table for the BindCtx class. */
495static const IBindCtxVtbl VT_BindCtxImpl =
496{
510};
511
512/******************************************************************************
513 * BindCtx_Construct (local function)
514 *******************************************************************************/
516{
517 TRACE("(%p)\n",This);
518
519 /* Initialize the virtual function table.*/
520 This->IBindCtx_iface.lpVtbl = &VT_BindCtxImpl;
521 This->ref = 0;
522
523 /* Initialize the BIND_OPTS2 structure */
524 This->bindOption2.cbStruct = sizeof(BIND_OPTS2);
525 This->bindOption2.grfFlags = 0;
526 This->bindOption2.grfMode = STGM_READWRITE;
527 This->bindOption2.dwTickCountDeadline = 0;
528
529 This->bindOption2.dwTrackFlags = 0;
530 This->bindOption2.dwClassContext = CLSCTX_SERVER;
531 This->bindOption2.locale = GetThreadLocale();
532 This->bindOption2.pServerInfo = 0;
533
534 /* Initialize the bindctx table */
535 This->bindCtxTableSize=0;
536 This->bindCtxTableLastIndex=0;
537 This->bindCtxTable = NULL;
538
539 return S_OK;
540}
541
542/******************************************************************************
543 * CreateBindCtx (OLE32.@)
544 *
545 * Creates a bind context. A bind context encompasses information and options
546 * used when binding to a moniker.
547 *
548 * PARAMS
549 * reserved [I] Reserved. Set to 0.
550 * ppbc [O] Address that receives the bind context object.
551 *
552 * RETURNS
553 * Success: S_OK.
554 * Failure: Any HRESULT code.
555 */
557{
558 BindCtxImpl* newBindCtx;
559 HRESULT hr;
560
561 TRACE("(%d,%p)\n",reserved,ppbc);
562
563 if (!ppbc) return E_INVALIDARG;
564
565 *ppbc = NULL;
566
567 if (reserved != 0)
568 {
569 ERR("reserved should be 0, not 0x%x\n", reserved);
570 return E_INVALIDARG;
571 }
572
573 newBindCtx = HeapAlloc(GetProcessHeap(), 0, sizeof(BindCtxImpl));
574 if (newBindCtx == 0)
575 return E_OUTOFMEMORY;
576
577 hr = BindCtxImpl_Construct(newBindCtx);
578 if (FAILED(hr))
579 {
580 HeapFree(GetProcessHeap(),0,newBindCtx);
581 return hr;
582 }
583
584 return BindCtxImpl_QueryInterface(&newBindCtx->IBindCtx_iface,&IID_IBindCtx,(void**)ppbc);
585}
586
587/******************************************************************************
588 * BindMoniker [OLE32.@]
589 *
590 * Binds to a moniker.
591 *
592 * PARAMS
593 * pmk [I] Moniker to bind to.
594 * grfOpt [I] Reserved option flags. Set to 0.
595 * riid [I] ID of the interface to bind to.
596 * pvResult [O] Address that receives the interface of the object that was bound to.
597 *
598 * RETURNS
599 * Success: S_OK.
600 * Failure: Any HRESULT code.
601 */
603{
604 HRESULT res;
605 IBindCtx * pbc;
606
607 TRACE("(%p, %x, %s, %p)\n", pmk, grfOpt, debugstr_guid(riid), ppvResult);
608
609 res = CreateBindCtx(grfOpt, &pbc);
610 if (SUCCEEDED(res))
611 {
612 res = IMoniker_BindToObject(pmk, pbc, NULL, riid, ppvResult);
613 IBindCtx_Release(pbc);
614 }
615 return res;
616}
#define InterlockedIncrement
Definition: armddk.h:53
#define InterlockedDecrement
Definition: armddk.h:52
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define index(s, c)
Definition: various.h:29
const GUID IID_IUnknown
#define WARN(fmt,...)
Definition: debug.h:112
#define ERR(fmt,...)
Definition: debug.h:110
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapReAlloc
Definition: compat.h:734
#define HeapFree(x, y, z)
Definition: compat.h:735
#define lstrcpyW
Definition: compat.h:749
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define lstrlenW
Definition: compat.h:750
HRESULT WINAPI GetRunningObjectTable(DWORD reserved, LPRUNNINGOBJECTTABLE *pprot)
Definition: moniker.c:1035
r reserved
Definition: btrfs.c:3006
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint res
Definition: glext.h:9613
GLuint index
Definition: glext.h:6031
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
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
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
LCID WINAPI GetThreadLocale(void)
Definition: lang.c:1459
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static LPOLESTR
Definition: stg_prop.c:27
#define STGM_READWRITE
Definition: objbase.h:919
interface IMoniker * LPMONIKER
Definition: objfwd.h:9
interface IBindCtx * LPBC
Definition: objfwd.h:18
static HRESULT BindCtxImpl_Construct(BindCtxImpl *This)
Definition: bindctx.c:515
static HRESULT WINAPI BindCtxImpl_GetObjectParam(IBindCtx *iface, LPOLESTR pszkey, IUnknown **punk)
Definition: bindctx.c:362
static HRESULT BindCtxImpl_GetObjectIndex(BindCtxImpl *, IUnknown *, LPOLESTR, DWORD *)
Definition: bindctx.c:430
static ULONG WINAPI BindCtxImpl_Release(IBindCtx *iface)
Definition: bindctx.c:134
static HRESULT WINAPI BindCtxImpl_RevokeObjectParam(IBindCtx *iface, LPOLESTR ppenum)
Definition: bindctx.c:388
#define BINDCTX_FIRST_TABLE_SIZE
Definition: bindctx.c:36
static HRESULT WINAPI BindCtxImpl_EnumObjectParam(IBindCtx *iface, IEnumString **pszkey)
Definition: bindctx.c:417
static HRESULT BindCtxImpl_ExpandTable(BindCtxImpl *)
Definition: bindctx.c:471
static HRESULT WINAPI BindCtxImpl_GetBindOptions(IBindCtx *iface, BIND_OPTS *pbindopts)
Definition: bindctx.c:267
static HRESULT WINAPI BindCtxImpl_RegisterObjectParam(IBindCtx *iface, LPOLESTR pszkey, IUnknown *punk)
Definition: bindctx.c:307
static ULONG WINAPI BindCtxImpl_AddRef(IBindCtx *iface)
Definition: bindctx.c:106
static HRESULT WINAPI BindCtxImpl_ReleaseBoundObjects(IBindCtx *)
Definition: bindctx.c:221
static HRESULT WINAPI BindCtxImpl_SetBindOptions(IBindCtx *iface, BIND_OPTS *pbindopts)
Definition: bindctx.c:245
static BindCtxImpl * impl_from_IBindCtx(IBindCtx *iface)
Definition: bindctx.c:69
static HRESULT WINAPI BindCtxImpl_RevokeObjectBound(IBindCtx *iface, IUnknown *punk)
Definition: bindctx.c:189
HRESULT WINAPI BindMoniker(LPMONIKER pmk, DWORD grfOpt, REFIID riid, LPVOID *ppvResult)
Definition: bindctx.c:602
static HRESULT BindCtxImpl_Destroy(BindCtxImpl *This)
Definition: bindctx.c:118
static HRESULT WINAPI BindCtxImpl_RegisterObjectBound(IBindCtx *iface, IUnknown *punk)
Definition: bindctx.c:157
static HRESULT WINAPI BindCtxImpl_GetRunningObjectTable(IBindCtx *iface, IRunningObjectTable **pprot)
Definition: bindctx.c:291
HRESULT WINAPI CreateBindCtx(DWORD reserved, LPBC *ppbc)
Definition: bindctx.c:556
static HRESULT WINAPI BindCtxImpl_QueryInterface(IBindCtx *iface, REFIID riid, void **ppvObject)
Definition: bindctx.c:78
static const IBindCtxVtbl VT_BindCtxImpl
Definition: bindctx.c:495
long LONG
Definition: pedump.c:60
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define REFIID
Definition: guiddef.h:118
_Check_return_ _CRTIMP int __cdecl wcscmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
HRESULT hr
Definition: shlfolder.c:183
#define TRACE(s)
Definition: solgame.cpp:4
DWORD bindCtxTableLastIndex
Definition: bindctx.c:57
IBindCtx IBindCtx_iface
Definition: bindctx.c:52
BindCtxObject * bindCtxTable
Definition: bindctx.c:56
LONG ref
Definition: bindctx.c:54
DWORD bindCtxTableSize
Definition: bindctx.c:58
BIND_OPTS2 bindOption2
Definition: bindctx.c:60
BYTE regType
Definition: bindctx.c:45
LPOLESTR pkeyObj
Definition: bindctx.c:43
IUnknown * pObj
Definition: bindctx.c:41
Definition: send.c:48
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
#define WINAPI
Definition: msvc.h:6
#define S_FALSE
Definition: winerror.h:2357
#define E_NOINTERFACE
Definition: winerror.h:2364
#define MK_E_NOTBOUND
Definition: winerror.h:2790
#define E_POINTER
Definition: winerror.h:2365
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned char BYTE
Definition: xxhash.c:193