Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

135 lines
3.0 KiB

//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1999-2002 Microsoft Corporation
//
// Module Name:
// CFactory.h
//
// Description:
// Class Factory implementation.
//
// Maintained By:
// Geoffrey Pease (GPease) 22-NOV-1999
//
//////////////////////////////////////////////////////////////////////////////
#pragma once
typedef HRESULT (*PFN_FACTORY_METHOD)( IUnknown ** );
typedef HRESULT (*PFN_CATEGORY_REGISTRAR)( ICatRegister *, BOOL );
enum EAppIDRunAsIdentity
{
airaiInvalid,
airaiMinimum = airaiInvalid,
airaiLaunchingUser,
airaiInteractiveUser,
airaiNetworkService,
airaiLocalService,
airaiMaximum
};
struct SAppIDInfo
{
const GUID * pAppID;
PCWSTR pcszName;
size_t cchName;
UINT idsLaunchPermission;
UINT idsAccessPermission;
DWORD nAuthenticationLevel;
EAppIDRunAsIdentity eairai;
};
struct SPrivateClassInfo
{
PFN_FACTORY_METHOD pfnCreateInstance;
const CLSID * pClassID;
PCWSTR pcszName;
size_t cchName;
};
enum EClassThreadingModel
{
ctmInvalid,
ctmMinimum = ctmInvalid,
ctmFree,
ctmApartment,
ctmCreator,
ctmMaximum
};
struct SPublicClassInfo
{
PFN_FACTORY_METHOD pfnCreateInstance;
const CLSID * pClassID;
PCWSTR pcszName;
size_t cchName;
PCWSTR pcszProgID;
size_t cchProgID;
EClassThreadingModel ectm;
const GUID * pAppID;
PFN_CATEGORY_REGISTRAR pfnRegisterCatID;
};
struct SCatIDInfo
{
const CATID * pcatid;
PCWSTR pcszName;
};
struct STypeLibInfo
{
DWORD idTypeLibResource;
BOOL fAtEnd;
};
//////////////////////////////////////////////////////////////////////////////
//++
//
// class CFactory
//
// Description:
// Class implementing a COM class factory.
//
//--
//////////////////////////////////////////////////////////////////////////////
class
CFactory
: public IClassFactory
{
private:
// IUnknown
LONG m_cRef;
// IClassFactory data
PFN_FACTORY_METHOD m_pfnCreateInstance;
private: // Methods
CFactory( void );
~CFactory( void );
STDMETHOD( HrInit )( PFN_FACTORY_METHOD lpfn );
public: // Methods
//
// Public, non interface methods.
//
static HRESULT S_HrCreateInstance( PFN_FACTORY_METHOD lpfn, CFactory ** ppFactoryInstanceOut );
//
// IUnknown
//
STDMETHOD( QueryInterface )( REFIID riid, LPVOID *ppv );
STDMETHOD_( ULONG, AddRef )( void );
STDMETHOD_( ULONG, Release )( void );
//
// IClassFactory
//
STDMETHOD( CreateInstance )( IUnknown * punkOuterIn, REFIID riidIn, LPVOID * ppvOut );
STDMETHOD( LockServer )( BOOL fLock );
}; //*** class CFactory