ReactOS  0.4.15-dev-1374-g8d3e80e
git.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "objbase.h"
#include "ole2.h"
#include "winerror.h"
#include "compobj_private.h"
#include "wine/list.h"
#include "wine/debug.h"
Include dependency graph for git.c:

Go to the source code of this file.

Classes

struct  StdGITEntry
 
struct  StdGlobalInterfaceTableImpl
 

Macros

#define COBJMACROS
 

Typedefs

typedef struct StdGITEntry StdGITEntry
 
typedef struct StdGlobalInterfaceTableImpl StdGlobalInterfaceTableImpl
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (ole)
 
static StdGlobalInterfaceTableImplimpl_from_IGlobalInterfaceTable (IGlobalInterfaceTable *iface)
 
static StdGITEntryStdGlobalInterfaceTable_FindEntry (StdGlobalInterfaceTableImpl *This, DWORD cookie)
 
static HRESULT WINAPI StdGlobalInterfaceTable_QueryInterface (IGlobalInterfaceTable *iface, REFIID riid, void **ppvObject)
 
static ULONG WINAPI StdGlobalInterfaceTable_AddRef (IGlobalInterfaceTable *iface)
 
static ULONG WINAPI StdGlobalInterfaceTable_Release (IGlobalInterfaceTable *iface)
 
static HRESULT WINAPI StdGlobalInterfaceTable_RegisterInterfaceInGlobal (IGlobalInterfaceTable *iface, IUnknown *pUnk, REFIID riid, DWORD *pdwCookie)
 
static HRESULT WINAPI StdGlobalInterfaceTable_RevokeInterfaceFromGlobal (IGlobalInterfaceTable *iface, DWORD dwCookie)
 
static HRESULT WINAPI StdGlobalInterfaceTable_GetInterfaceFromGlobal (IGlobalInterfaceTable *iface, DWORD dwCookie, REFIID riid, void **ppv)
 
static HRESULT WINAPI GITCF_QueryInterface (LPCLASSFACTORY iface, REFIID riid, LPVOID *ppv)
 
static ULONG WINAPI GITCF_AddRef (LPCLASSFACTORY iface)
 
static ULONG WINAPI GITCF_Release (LPCLASSFACTORY iface)
 
static HRESULT WINAPI GITCF_CreateInstance (LPCLASSFACTORY iface, LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv)
 
static HRESULT WINAPI GITCF_LockServer (LPCLASSFACTORY iface, BOOL fLock)
 
HRESULT StdGlobalInterfaceTable_GetFactory (LPVOID *ppv)
 
IGlobalInterfaceTableget_std_git (void)
 
void release_std_git (void)
 

Variables

static IGlobalInterfaceTablestd_git
 
static CRITICAL_SECTION git_section = { &critsect_debug, -1, 0, 0, 0, 0 }
 
static CRITICAL_SECTION_DEBUG critsect_debug
 
static const IClassFactoryVtbl GITClassFactoryVtbl
 
static IClassFactory git_classfactory = { &GITClassFactoryVtbl }
 
static const IGlobalInterfaceTableVtbl StdGlobalInterfaceTableImpl_Vtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 29 of file git.c.

Typedef Documentation

◆ StdGITEntry

◆ StdGlobalInterfaceTableImpl

Function Documentation

◆ get_std_git()

IGlobalInterfaceTable* get_std_git ( void  )

Definition at line 362 of file git.c.

363 {
364  if (!std_git)
365  {
367 
368  newGIT = HeapAlloc(GetProcessHeap(), 0, sizeof(StdGlobalInterfaceTableImpl));
369  if (!newGIT) return NULL;
370 
372  list_init(&newGIT->list);
373  newGIT->nextCookie = 0xf100; /* that's where windows starts, so that's where we start */
374 
376  {
377  HeapFree(GetProcessHeap(), 0, newGIT);
378  }
379  else
380  TRACE("Created the GIT at %p\n", newGIT);
381  }
382 
383  return std_git;
384 }
static IGlobalInterfaceTable * std_git
Definition: git.c:72
IGlobalInterfaceTable IGlobalInterfaceTable_iface
Definition: git.c:65
#define InterlockedCompareExchangePointer
Definition: interlocked.h:129
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
struct list list
Definition: git.c:67
#define NULL
Definition: types.h:112
__WINE_SERVER_LIST_INLINE void list_init(struct list *list)
Definition: list.h:149
static const IGlobalInterfaceTableVtbl StdGlobalInterfaceTableImpl_Vtbl
Definition: git.c:352
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by CoCreateInstanceEx(), and GITCF_CreateInstance().

◆ GITCF_AddRef()

static ULONG WINAPI GITCF_AddRef ( LPCLASSFACTORY  iface)
static

Definition at line 308 of file git.c.

309 {
310  return 2;
311 }

◆ GITCF_CreateInstance()

static HRESULT WINAPI GITCF_CreateInstance ( LPCLASSFACTORY  iface,
LPUNKNOWN  pUnk,
REFIID  riid,
LPVOID ppv 
)
static

Definition at line 319 of file git.c.

321 {
323  HRESULT hr = IGlobalInterfaceTable_QueryInterface(git, riid, ppv);
324  IGlobalInterfaceTable_Release(git);
325  return hr;
326 }
HRESULT hr
Definition: shlfolder.c:183
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
IGlobalInterfaceTable * get_std_git(void)
Definition: git.c:362
LONG HRESULT
Definition: typedefs.h:79

◆ GITCF_LockServer()

static HRESULT WINAPI GITCF_LockServer ( LPCLASSFACTORY  iface,
BOOL  fLock 
)
static

Definition at line 328 of file git.c.

329 {
330  FIXME("(%d), stub!\n",fLock);
331  return S_OK;
332 }
#define FIXME(fmt,...)
Definition: debug.h:111
#define S_OK
Definition: intsafe.h:51

◆ GITCF_QueryInterface()

static HRESULT WINAPI GITCF_QueryInterface ( LPCLASSFACTORY  iface,
REFIID  riid,
LPVOID ppv 
)
static

Definition at line 296 of file git.c.

297 {
298  *ppv = NULL;
299  if (IsEqualIID(riid, &IID_IUnknown) ||
301  {
302  *ppv = iface;
303  return S_OK;
304  }
305  return E_NOINTERFACE;
306 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
const GUID IID_IUnknown
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
const GUID IID_IClassFactory
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ GITCF_Release()

static ULONG WINAPI GITCF_Release ( LPCLASSFACTORY  iface)
static

Definition at line 313 of file git.c.

314 {
315  return 1;
316 }

◆ impl_from_IGlobalInterfaceTable()

static StdGlobalInterfaceTableImpl* impl_from_IGlobalInterfaceTable ( IGlobalInterfaceTable iface)
inlinestatic

Definition at line 84 of file git.c.

85 {
86  return CONTAINING_RECORD(iface, StdGlobalInterfaceTableImpl, IGlobalInterfaceTable_iface);
87 }
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

Referenced by release_std_git(), StdGlobalInterfaceTable_GetInterfaceFromGlobal(), StdGlobalInterfaceTable_RegisterInterfaceInGlobal(), and StdGlobalInterfaceTable_RevokeInterfaceFromGlobal().

◆ release_std_git()

void release_std_git ( void  )

Definition at line 386 of file git.c.

387 {
389  StdGITEntry *entry, *entry2;
390 
391  if (!std_git) return;
392 
395  {
396  list_remove(&entry->entry);
397 
398  CoReleaseMarshalData(entry->stream);
399  IStream_Release(entry->stream);
401  }
402 
403  HeapFree(GetProcessHeap(), 0, git);
404 }
HRESULT WINAPI CoReleaseMarshalData(IStream *pStream)
Definition: marshal.c:2055
static IGlobalInterfaceTable * std_git
Definition: git.c:72
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
Definition: list.h:108
#define GetProcessHeap()
Definition: compat.h:595
uint32_t entry
Definition: isohybrid.c:63
#define LIST_FOR_EACH_ENTRY_SAFE(cursor, cursor2, list, type, field)
Definition: list.h:204
struct list list
Definition: git.c:67
#define HeapFree(x, y, z)
Definition: compat.h:594
static StdGlobalInterfaceTableImpl * impl_from_IGlobalInterfaceTable(IGlobalInterfaceTable *iface)
Definition: git.c:84

Referenced by DllMain().

◆ StdGlobalInterfaceTable_AddRef()

static ULONG WINAPI StdGlobalInterfaceTable_AddRef ( IGlobalInterfaceTable iface)
static

Definition at line 140 of file git.c.

141 {
142  return 1;
143 }

◆ StdGlobalInterfaceTable_FindEntry()

static StdGITEntry* StdGlobalInterfaceTable_FindEntry ( StdGlobalInterfaceTableImpl This,
DWORD  cookie 
)
static

Definition at line 93 of file git.c.

95 {
96  StdGITEntry* e;
97 
98  TRACE("This=%p, cookie=0x%x\n", This, cookie);
99 
101  if (e->cookie == cookie)
102  return e;
103  }
104 
105  TRACE("Entry not found\n");
106  return NULL;
107 }
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
Definition: list.h:198
#define e
Definition: ke_i.h:82
#define TRACE(s)
Definition: solgame.cpp:4
uint32_t entry
Definition: isohybrid.c:63
Definition: cookie.c:33
#define NULL
Definition: types.h:112

Referenced by StdGlobalInterfaceTable_GetInterfaceFromGlobal(), and StdGlobalInterfaceTable_RevokeInterfaceFromGlobal().

◆ StdGlobalInterfaceTable_GetFactory()

HRESULT StdGlobalInterfaceTable_GetFactory ( LPVOID ppv)

Definition at line 344 of file git.c.

345 {
346  *ppv = &git_classfactory;
347  TRACE("Returning GIT classfactory\n");
348  return S_OK;
349 }
REFIID LPVOID * ppv
Definition: atlbase.h:39
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:51
static IClassFactory git_classfactory
Definition: git.c:342

Referenced by DllGetClassObject().

◆ StdGlobalInterfaceTable_GetInterfaceFromGlobal()

static HRESULT WINAPI StdGlobalInterfaceTable_GetInterfaceFromGlobal ( IGlobalInterfaceTable iface,
DWORD  dwCookie,
REFIID  riid,
void **  ppv 
)
static

Definition at line 249 of file git.c.

252 {
255  HRESULT hres;
256  IStream *stream;
257 
258  TRACE("dwCookie=0x%x, riid=%s, ppv=%p\n", dwCookie, debugstr_guid(riid), ppv);
259 
261 
263  if (entry == NULL) {
264  WARN("Entry for cookie 0x%x not found\n", dwCookie);
266  return E_INVALIDARG;
267  }
268 
269  TRACE("entry=%p\n", entry);
270 
271  hres = IStream_Clone(entry->stream, &stream);
272 
274 
275  if (hres != S_OK) {
276  WARN("Failed to clone stream with error 0x%08x\n", hres);
277  return hres;
278  }
279 
280  /* unmarshal the interface */
282  IStream_Release(stream);
283 
284  if (hres != S_OK) {
285  WARN("Failed to unmarshal stream\n");
286  return hres;
287  }
288 
289  TRACE("ppv=%p\n", *ppv);
290  return S_OK;
291 }
HRESULT WINAPI CoUnmarshalInterface(IStream *pStream, REFIID riid, LPVOID *ppv)
Definition: marshal.c:1981
static CRITICAL_SECTION git_section
Definition: git.c:74
REFIID riid
Definition: precomp.h:44
#define WARN(fmt,...)
Definition: debug.h:112
REFIID LPVOID * ppv
Definition: atlbase.h:39
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define E_INVALIDARG
Definition: ddrawi.h:101
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
Definition: parse.h:22
GLuint GLuint stream
Definition: glext.h:7522
uint32_t entry
Definition: isohybrid.c:63
#define S_OK
Definition: intsafe.h:51
static StdGITEntry * StdGlobalInterfaceTable_FindEntry(StdGlobalInterfaceTableImpl *This, DWORD cookie)
Definition: git.c:93
#define NULL
Definition: types.h:112
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
static StdGlobalInterfaceTableImpl * impl_from_IGlobalInterfaceTable(IGlobalInterfaceTable *iface)
Definition: git.c:84

◆ StdGlobalInterfaceTable_QueryInterface()

static HRESULT WINAPI StdGlobalInterfaceTable_QueryInterface ( IGlobalInterfaceTable iface,
REFIID  riid,
void **  ppvObject 
)
static

Definition at line 114 of file git.c.

116 {
117  /* Make sure silly coders can't crash us */
118  if (ppvObject == 0) return E_INVALIDARG;
119 
120  *ppvObject = 0; /* assume we don't have the interface */
121 
122  /* Do we implement that interface? */
123  if (IsEqualIID(&IID_IUnknown, riid) ||
124  IsEqualIID(&IID_IGlobalInterfaceTable, riid))
125  {
126  *ppvObject = iface;
127  }
128  else
129  {
130  FIXME("(%s), not supported.\n", debugstr_guid(riid));
131  return E_NOINTERFACE;
132  }
133 
134  /* Now inc the refcount */
135  IGlobalInterfaceTable_AddRef(iface);
136  return S_OK;
137 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_INVALIDARG
Definition: ddrawi.h:101
#define debugstr_guid
Definition: kernel32.h:35
const GUID IID_IUnknown
REFIID LPVOID * ppvObject
Definition: precomp.h:44
#define S_OK
Definition: intsafe.h:51
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ StdGlobalInterfaceTable_RegisterInterfaceInGlobal()

static HRESULT WINAPI StdGlobalInterfaceTable_RegisterInterfaceInGlobal ( IGlobalInterfaceTable iface,
IUnknown pUnk,
REFIID  riid,
DWORD pdwCookie 
)
static

Definition at line 156 of file git.c.

159 {
161  IStream* stream = NULL;
162  HRESULT hres;
165 
166  TRACE("iface=%p, pUnk=%p, riid=%s, pdwCookie=0x%p\n", iface, pUnk, debugstr_guid(riid), pdwCookie);
167 
168  if (pUnk == NULL) return E_INVALIDARG;
169 
170  /* marshal the interface */
171  TRACE("About to marshal the interface\n");
172 
174  if (hres != S_OK) return hres;
175  hres = CoMarshalInterface(stream, riid, pUnk, MSHCTX_INPROC, NULL, MSHLFLAGS_TABLESTRONG);
176  if (hres != S_OK)
177  {
178  IStream_Release(stream);
179  return hres;
180  }
181 
182  zero.QuadPart = 0;
183  IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL);
184 
185  entry = HeapAlloc(GetProcessHeap(), 0, sizeof(StdGITEntry));
186  if (!entry)
187  {
189  IStream_Release(stream);
190  return E_OUTOFMEMORY;
191  }
192 
194 
195  entry->iid = *riid;
196  entry->stream = stream;
197  entry->cookie = This->nextCookie;
198  This->nextCookie++; /* inc the cookie count */
199 
200  /* insert the new entry at the end of the list */
201  list_add_tail(&This->list, &entry->entry);
202 
203  /* and return the cookie */
204  *pdwCookie = entry->cookie;
205 
207 
208  TRACE("Cookie is 0x%x\n", entry->cookie);
209  return S_OK;
210 }
HRESULT WINAPI CoReleaseMarshalData(IStream *pStream)
Definition: marshal.c:2055
static CRITICAL_SECTION git_section
Definition: git.c:74
#define TRUE
Definition: types.h:120
REFIID riid
Definition: precomp.h:44
HRESULT WINAPI CreateStreamOnHGlobal(HGLOBAL hGlobal, BOOL fDeleteOnRelease, LPSTREAM *ppstm)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
__WINE_SERVER_LIST_INLINE void list_add_tail(struct list *list, struct list *elem)
Definition: list.h:102
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_INVALIDARG
Definition: ddrawi.h:101
int zero
Definition: sehframes.cpp:29
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
LONG HRESULT
Definition: typedefs.h:79
Definition: parse.h:22
GLuint GLuint stream
Definition: glext.h:7522
uint32_t entry
Definition: isohybrid.c:63
#define S_OK
Definition: intsafe.h:51
#define NULL
Definition: types.h:112
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
HRESULT WINAPI CoMarshalInterface(IStream *pStream, REFIID riid, IUnknown *pUnk, DWORD dwDestContext, void *pvDestContext, DWORD mshlFlags)
Definition: marshal.c:1876
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
Definition: dplayx.c:30
static StdGlobalInterfaceTableImpl * impl_from_IGlobalInterfaceTable(IGlobalInterfaceTable *iface)
Definition: git.c:84

◆ StdGlobalInterfaceTable_Release()

static ULONG WINAPI StdGlobalInterfaceTable_Release ( IGlobalInterfaceTable iface)
static

Definition at line 146 of file git.c.

147 {
148  return 1;
149 }

◆ StdGlobalInterfaceTable_RevokeInterfaceFromGlobal()

static HRESULT WINAPI StdGlobalInterfaceTable_RevokeInterfaceFromGlobal ( IGlobalInterfaceTable iface,
DWORD  dwCookie 
)
static

Definition at line 213 of file git.c.

215 {
218  HRESULT hr;
219 
220  TRACE("iface=%p, dwCookie=0x%x\n", iface, dwCookie);
221 
223 
225  if (entry == NULL) {
226  TRACE("Entry not found\n");
228  return E_INVALIDARG; /* not found */
229  }
230 
231  list_remove(&entry->entry);
232 
234 
235  /* Free the stream */
236  hr = CoReleaseMarshalData(entry->stream);
237  if (hr != S_OK)
238  {
239  WARN("Failed to release marshal data, hr = 0x%08x\n", hr);
240  return hr;
241  }
242  IStream_Release(entry->stream);
243 
245  return S_OK;
246 }
HRESULT WINAPI CoReleaseMarshalData(IStream *pStream)
Definition: marshal.c:2055
static CRITICAL_SECTION git_section
Definition: git.c:74
HRESULT hr
Definition: shlfolder.c:183
#define WARN(fmt,...)
Definition: debug.h:112
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define E_INVALIDARG
Definition: ddrawi.h:101
__WINE_SERVER_LIST_INLINE void list_remove(struct list *elem)
Definition: list.h:108
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
LONG HRESULT
Definition: typedefs.h:79
uint32_t entry
Definition: isohybrid.c:63
#define S_OK
Definition: intsafe.h:51
static StdGITEntry * StdGlobalInterfaceTable_FindEntry(StdGlobalInterfaceTableImpl *This, DWORD cookie)
Definition: git.c:93
#define NULL
Definition: types.h:112
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
#define HeapFree(x, y, z)
Definition: compat.h:594
static StdGlobalInterfaceTableImpl * impl_from_IGlobalInterfaceTable(IGlobalInterfaceTable *iface)
Definition: git.c:84

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( ole  )

Variable Documentation

◆ critsect_debug

CRITICAL_SECTION_DEBUG critsect_debug
static
Initial value:
=
{
0, 0, &git_section,
0, 0, { (DWORD_PTR)(__FILE__ ": global interface table") }
}
static CRITICAL_SECTION git_section
Definition: git.c:74
#define DWORD_PTR
Definition: treelist.c:76
LIST_ENTRY ProcessLocksList
Definition: winbase.h:861
static CRITICAL_SECTION_DEBUG critsect_debug
Definition: git.c:75

Definition at line 75 of file git.c.

◆ git_classfactory

IClassFactory git_classfactory = { &GITClassFactoryVtbl }
static

Definition at line 342 of file git.c.

Referenced by StdGlobalInterfaceTable_GetFactory().

◆ git_section

◆ GITClassFactoryVtbl

const IClassFactoryVtbl GITClassFactoryVtbl
static
Initial value:
= {
}
static HRESULT WINAPI GITCF_LockServer(LPCLASSFACTORY iface, BOOL fLock)
Definition: git.c:328
static ULONG WINAPI GITCF_AddRef(LPCLASSFACTORY iface)
Definition: git.c:308
static HRESULT WINAPI GITCF_CreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pUnk, REFIID riid, LPVOID *ppv)
Definition: git.c:319
static ULONG WINAPI GITCF_Release(LPCLASSFACTORY iface)
Definition: git.c:313
static HRESULT WINAPI GITCF_QueryInterface(LPCLASSFACTORY iface, REFIID riid, LPVOID *ppv)
Definition: git.c:296

Definition at line 334 of file git.c.

◆ std_git

IGlobalInterfaceTable* std_git
static

Definition at line 72 of file git.c.

Referenced by get_std_git(), and release_std_git().

◆ StdGlobalInterfaceTableImpl_Vtbl

const IGlobalInterfaceTableVtbl StdGlobalInterfaceTableImpl_Vtbl
static
Initial value:
=
{
}
static HRESULT WINAPI StdGlobalInterfaceTable_QueryInterface(IGlobalInterfaceTable *iface, REFIID riid, void **ppvObject)
Definition: git.c:114
static HRESULT WINAPI StdGlobalInterfaceTable_RegisterInterfaceInGlobal(IGlobalInterfaceTable *iface, IUnknown *pUnk, REFIID riid, DWORD *pdwCookie)
Definition: git.c:156
static HRESULT WINAPI StdGlobalInterfaceTable_RevokeInterfaceFromGlobal(IGlobalInterfaceTable *iface, DWORD dwCookie)
Definition: git.c:213
static ULONG WINAPI StdGlobalInterfaceTable_AddRef(IGlobalInterfaceTable *iface)
Definition: git.c:140
static ULONG WINAPI StdGlobalInterfaceTable_Release(IGlobalInterfaceTable *iface)
Definition: git.c:146
static HRESULT WINAPI StdGlobalInterfaceTable_GetInterfaceFromGlobal(IGlobalInterfaceTable *iface, DWORD dwCookie, REFIID riid, void **ppv)
Definition: git.c:249

Definition at line 352 of file git.c.

Referenced by get_std_git().