|
|
/* agfxsp.h
* header for agfxs.cpp * Copyright (c) 2000-2001 Microsoft Corporation */
#define ZONETYPE_RENDER 1
#define ZONETYPE_CAPTURE 2
#define ZONETYPE_RENDERCAPTURE 3
typedef CList<class CGfxFactory*, class CGfxFactory*> CListGfxFactories; typedef CList<class CZoneFactory*, class CZoneFactory*> CListZoneFactories; typedef CList<class CLmAutoLoad*, class CLmAutoLoad*> CListLmAutoLoads; typedef CList<class CCuUserLoad*, class CCuUserLoad*> CListCuUserLoads;
//=== CUser ===
class CUser { public: CUser(void); ~CUser(void);
BOOL operator==(const CUser &other); PSID GetSid(void); LONG Initialize(DWORD SessionId); LONG RegOpen(IN REGSAM samDesired, OUT PHKEY phkResult);
private: void CloseUserRegistry(void); BOOL OpenUserRegistry(void); HANDLE m_hUserToken; DWORD m_SessionId; PSID m_pSid; CRITICAL_SECTION m_csRegistry; BOOL m_fcsRegistry; LONG m_refRegistry; HKEY m_hRegistry; };
//=== CCuUserLoad ===
class CCuUserLoad { public: CCuUserLoad(CUser *pUser); ~CCuUserLoad(void);
LONG AddToZoneGraph(CZoneFactory *pZoneFactory); LONG CreateFromAutoLoad(ULONG CuAutoLoadId); LONG CreateFromUser(PCTSTR GfxFactoryDi, PCTSTR ZoneFactoryDi, ULONG Type, ULONG Order); LONG Erase(void); HANDLE GetFilterHandle(void); PCTSTR GetGfxFactoryDi(void); LONG GetGfxFactoryClsid(CListGfxFactories &rlistGfxFactories, LPCLSID pClsid); DWORD GetId(void); ULONG GetOrder(void); ULONG GetType(void); PCTSTR GetZoneFactoryDi(void); LONG Initialize(PCTSTR pstrCuAutoLoad); LONG ModifyOrder(ULONG NewOrder); LONG RegCreateFilterKey(IN PCTSTR SubKey, IN REGSAM samDesired, OUT PHKEY phkResult); LONG RegOpenFilterKey(IN PCTSTR SubKey, IN REGSAM samDesired, OUT PHKEY phkResult); void RemoveFromZoneGraph(void); LONG Scan(CListZoneFactories &rlistZoneFactories, CListGfxFactories &rlistGfxFactories); LONG Write(void);
static void FillListFromReg(CUser *pUser, CListCuUserLoads& rlistCuUserLoads); static void ListRemoveGfxFactoryDi(IN CListCuUserLoads &rlistCuUserLoads, IN PCTSTR DeviceInterface); static void ListRemoveZoneFactoryDi(IN CListCuUserLoads &rlistCuUserLoads, IN PCTSTR DeviceInterface); static void ListRemoveZoneFactoryDiCapture(IN CListCuUserLoads &rlistCuUserLoads, IN PCTSTR DeviceInterface); static void ListRemoveZoneFactoryDiRender(IN CListCuUserLoads &rlistCuUserLoads, IN PCTSTR DeviceInterface); static void ScanList(CListCuUserLoads& rlistCuUsrLoads, CListZoneFactories& rlistZoneFactories, CListGfxFactories& rlistGfxFactories);
private: LONG AddGfxToGraph(void); LONG ChangeGfxOrderInGraph(IN ULONG NewOrder); LONG RemoveFromGraph(void); BOOL WinsConflictWith(CCuUserLoad *pOther); CUser *m_User; ULONG m_CuUserLoadId; ULONG m_CuAutoLoadId; PTSTR m_GfxFactoryDi; PTSTR m_ZoneFactoryDi; ULONG m_Type; ULONG m_Order;
HANDLE m_FilterHandle; LONG m_ErrorFilterCreate;
CZoneFactory *m_pZoneFactory; POSITION m_posZoneGfxList; };
//=== CCuAutoLoad ===
class CCuAutoLoad { public: CCuAutoLoad(CUser *pUser); ~CCuAutoLoad(void);
LONG Create(PCTSTR ZoneFactoryDi, ULONG LmAutoLoadId); LONG Erase(void); PCTSTR GetGfxFactoryDi(void); ULONG GetLmAutoLoadId(void); ULONG GetType(void); PCTSTR GetZoneFactoryDi(void); LONG Initialize(ULONG CuAutoLoadId); LONG Write(void);
static void ScanReg(IN CUser *pUser, IN PCTSTR ZoneFactoryDi, IN ULONG LmAutoLoadId, IN CListCuUserLoads &rlistCuUserLoads);
private: CUser *m_User; ULONG m_CuAutoLoadId; ULONG m_LmAutoLoadId; PTSTR m_ZoneFactoryDi; PTSTR m_GfxFactoryDi; ULONG m_Type; };
//=== CLmAutoLoad ===
class CLmAutoLoad { public: CLmAutoLoad(void); ~CLmAutoLoad(void);
LONG Create(DWORD Id, PCTSTR GfxFactoryDi, PCTSTR HardwareId, PCTSTR ReferenceString, ULONG Type); LONG Erase(void); PCTSTR GetGfxFactoryDi(void); ULONG GetType(void); LONG Initialize(DWORD Id); BOOL IsCompatibleZoneFactory(CZoneFactory& rZoneFactory); LONG Write(void);
static CListLmAutoLoads* CreateListFromReg(void); static void DestroyList(CListLmAutoLoads* pListLmAutoLoads); static void ScanRegOnGfxFactory(CUser *pUser, CGfxFactory& rGfxFactory, CListZoneFactories &rlistZoneFactories, CListCuUserLoads &rlistCuUserLoads); static void ScanRegOnZoneFactory(CUser *pUser, CZoneFactory& rZoneFactory, CListGfxFactories &rlistGfxFactories, CListCuUserLoads &rlistCuUserLoads);
private: DWORD m_Id; PTSTR m_GfxFactoryDi; PTSTR m_HardwareId; PTSTR m_ReferenceString; ULONG m_Type; };
//=== CInfAutoLoad ===
class CInfAutoLoad { public: CInfAutoLoad(); ~CInfAutoLoad();
LONG Initialize(HKEY hkey, CGfxFactory *pGfxFactory); LONG Scan(void); static LONG ScanReg(HKEY hkey, CGfxFactory *pGfxFactory);
private: CGfxFactory *m_pGfxFactory; HKEY m_hkey; DWORD m_Id; DWORD m_NewAutoLoad;
PTSTR m_GfxFactoryDi; PTSTR m_HardwareId; PTSTR m_ReferenceString; ULONG m_Type; };
//=== CGfxFactory ===
class CGfxFactory { public: CGfxFactory(); ~CGfxFactory();
REFCLSID GetClsid(void); PCTSTR GetDeviceInterface(void); CListLmAutoLoads& GetListLmAutoLoads(void); LONG Initialize(HKEY hkey, PCTSTR DeviceInterface); BOOL IsCompatibleZoneFactory(IN ULONG Type, IN CZoneFactory& rZoneFactory);
static void ListRemoveGfxFactoryDi(IN CListGfxFactories &rlistGfxFactories, IN PCTSTR DeviceInterface); static CGfxFactory* ListSearchOnDi(IN CListGfxFactories& rlistGfxFactories, IN PCTSTR GfxFactoryDi);
private: CListLmAutoLoads *m_plistLmAutoLoads; PTSTR m_DeviceInterface; CLSID m_Clsid; };
//=== CZoneFactory ===
class CZoneFactory { public: CZoneFactory(void); ~CZoneFactory(void);
LONG AddType(IN ULONG Type); PCTSTR GetDeviceInterface(void); PCTSTR GetTargetHardwareId(void); BOOL HasHardwareId(IN PCTSTR HardwareId); BOOL HasReferenceString(IN PCTSTR ReferenceString); BOOL HasCompatibleType(IN ULONG Type); LONG Initialize(IN PCTSTR DeviceInterface, IN ULONG Type); LONG RemoveType(IN ULONG Type);
static void ListRemoveZoneFactoryDi(IN CListZoneFactories &rlistZoneFactories, IN PCTSTR DeviceInterface); static void ListRemoveZoneFactoryDiCapture(IN CListZoneFactories &rlistZoneFactories, IN PCTSTR DeviceInterface); static void ListRemoveZoneFactoryDiRender(IN CListZoneFactories &rlistZoneFactories, IN PCTSTR DeviceInterface); static CZoneFactory* ListSearchOnDi(IN CListZoneFactories& rlistZoneFactories, IN PCTSTR ZoneFactoryDi);
CListCuUserLoads m_listCaptureGfxs; CListCuUserLoads m_listRenderGfxs; private: PTSTR m_DeviceInterface; PTSTR m_HardwareId; PTSTR m_ReferenceString; ULONG m_Type; };
|