60 return (m_cLocked > 0);
65 int CClassFactory::m_cLocked = 0;
70 , m_pTemplate(pTemplate)
83 if ((
riid == IID_IUnknown) || (
riid == IID_IClassFactory)) {
86 ((LPUNKNOWN) *ppv)->AddRef();
90 return ResultFromScode(E_NOINTERFACE);
95 CClassFactory::AddRef()
101 CClassFactory::Release()
103 LONG lRef = InterlockedDecrement((
volatile LONG *)&m_cRef);
116 __deref_out
void **
pv)
124 if (pUnkOuter !=
NULL) {
125 if (IsEqualIID(
riid,IID_IUnknown) == FALSE) {
127 return ResultFromScode(E_NOINTERFACE);
133 HRESULT
hr = NOERROR;
158 pObj->NonDelegatingAddRef();
160 pObj->NonDelegatingRelease();
191 __in REFCLSID rClsID,
193 __deref_out
void **
pv)
196 if (!(
riid == IID_IUnknown) && !(
riid == IID_IClassFactory)) {
197 return E_NOINTERFACE;
211 return E_OUTOFMEMORY;
213 ((LPUNKNOWN)*
pv)->AddRef();
249 DbgLog((
LOG_MEMORY,2,TEXT(
"DLLCanUnloadNow called - IsLocked = %d, Active objects = %d"),
266 #pragma comment(linker, "/merge:.CRT=.rdata") 275 __inout_opt LPVOID
pv 278 if ( ulReason == DLL_PROCESS_ATTACH ) {
292 __inout_opt LPVOID
pv 296 extern bool g_fDbgInDllEntryPoint;
297 g_fDbgInDllEntryPoint =
true;
303 case DLL_PROCESS_ATTACH:
304 DisableThreadLibraryCalls(hInstance);
317 DbgLog((
LOG_ERROR, 1, TEXT(
"Failed to get the OS platform, assuming Win95")));
325 case DLL_PROCESS_DETACH:
332 extern TCHAR m_ModuleName[];
334 TCHAR FullName[_MAX_PATH];
337 GetModuleFileName(
NULL,FullName,_MAX_PATH);
338 pName = _tcsrchr(FullName,
'\\');
345 (
void)StringCchPrintf(szInfo,
NUMELMS(szInfo), TEXT(
"Executable: %s Pid %x Tid %x. "),
346 pName, GetCurrentProcessId(), GetCurrentThreadId());
348 (
void)StringCchPrintf(szInfo+lstrlen(szInfo),
NUMELMS(szInfo) - lstrlen(szInfo), TEXT(
"Module %s, %d objects left active!"),
350 DbgAssert(szInfo, TEXT(__FILE__),__LINE__);
362 g_fDbgInDllEntryPoint =
false;
ULONG(__stdcall *_RegisterTraceGuids)(__in IN WMIDPREQUEST RequestAddress
static LONG ObjectsActive()
LPFNInitRoutine m_lpfnInit
STDMETHODIMP_(ULONG) AddRef()
#define ValidateReadWritePtr(p, cb)
BOOL WINAPI _DllEntryPoint(HINSTANCE, ULONG, __inout_opt LPVOID)
BOOL IsClassID(REFCLSID rclsid) const
STDMETHODIMP_(ULONG) CUnknown
void __cdecl __security_init_cookie(void)
STDMETHODIMP QueryInterface(REFIID riid, __deref_out void **ppv)
#define DbgSetModuleLevel(Type, Level)
CUnknown * CreateInstance(__inout_opt LPUNKNOWN pUnk, __inout_opt HRESULT *phr) const
STDMETHODIMP CreateInstance(LPUNKNOWN pUnkOuter, REFIID riid, __deref_out void **pv)
void DllInitClasses(BOOL bLoading)
STDMETHODIMP LockServer(BOOL fLock)
#define DbgInitialise(hInst)
__control_entrypoint(DllExport) STDAPI DllGetClassObject(__in REFCLSID rClsID
DECLSPEC_NOINLINE BOOL WINAPI DllEntryPoint(HINSTANCE hInstance, ULONG ulReason, __inout_opt LPVOID pv)
STDMETHODIMP NonDelegatingQueryInterface(REFIID, __deref_out void **)
CClassFactory(const CFactoryTemplate *)
__in REFIID __deref_out void ** pv
#define CheckPointer(p, ret)
CFactoryTemplate g_Templates[]
#define DbgDumpObjectRegister()
return CLASS_E_CLASSNOTAVAILABLE