Mercurial > games > semicongine
comparison fuhtark_test/include/winapi/mspaddr.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1499:1f58458b7ef7 | 1500:91c8c3b7cbf0 |
|---|---|
| 1 #ifndef __MSPADDR_H_ | |
| 2 #define __MSPADDR_H_ | |
| 3 | |
| 4 typedef struct { | |
| 5 LIST_ENTRY Link; | |
| 6 MSP_EVENT_INFO MSPEventInfo; | |
| 7 } MSPEVENTITEM,*PMSPEVENTITEM; | |
| 8 | |
| 9 MSPEVENTITEM *AllocateEventItem(SIZE_T nExtraBytes = 0); | |
| 10 WINBOOL FreeEventItem(MSPEVENTITEM *pEventItemToFree); | |
| 11 | |
| 12 typedef HRESULT (*PFNCREATETERM)(CComPtr<IMoniker> pMoniker,MSP_HANDLE htAddress,ITTerminal **pTerm); | |
| 13 | |
| 14 typedef struct { | |
| 15 DWORD dwMediaType; | |
| 16 const CLSID *clsidClassManager; | |
| 17 PFNCREATETERM pfnCreateTerm; | |
| 18 } STATIC_TERMINAL_TYPE; | |
| 19 | |
| 20 class ATL_NO_VTABLE CPlugTerminalClassInfo : public IDispatchImpl<ITPluggableTerminalClassInfo,&IID_ITPluggableTerminalClassInfo,&LIBID_TAPI3Lib>,public CComObjectRootEx<CComMultiThreadModel>,public CMSPObjectSafetyImpl | |
| 21 { | |
| 22 public: | |
| 23 DECLARE_GET_CONTROLLING_UNKNOWN() | |
| 24 virtual HRESULT FinalConstruct(void); | |
| 25 BEGIN_COM_MAP(CPlugTerminalClassInfo) | |
| 26 COM_INTERFACE_ENTRY(ITPluggableTerminalClassInfo) | |
| 27 COM_INTERFACE_ENTRY(IDispatch) | |
| 28 COM_INTERFACE_ENTRY(IObjectSafety) | |
| 29 COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal,m_pFTM) | |
| 30 END_COM_MAP() | |
| 31 public: | |
| 32 CPlugTerminalClassInfo() : m_bstrName(NULL),m_bstrCompany(NULL),m_bstrVersion(NULL),m_bstrCLSID(NULL),m_bstrTerminalClass(NULL),m_lMediaType(1),m_Direction(TD_CAPTURE),m_pFTM(NULL) | |
| 33 { | |
| 34 } | |
| 35 ~CPlugTerminalClassInfo() { | |
| 36 if(m_bstrName) { | |
| 37 SysFreeString(m_bstrName); | |
| 38 } | |
| 39 if(m_bstrCompany) { | |
| 40 SysFreeString(m_bstrCompany); | |
| 41 } | |
| 42 if(m_bstrVersion) { | |
| 43 SysFreeString(m_bstrVersion); | |
| 44 } | |
| 45 if(m_bstrCLSID) { | |
| 46 SysFreeString(m_bstrCLSID); | |
| 47 } | |
| 48 if(m_bstrTerminalClass) { | |
| 49 SysFreeString(m_bstrTerminalClass); | |
| 50 } | |
| 51 if(m_pFTM) { | |
| 52 m_pFTM->Release(); | |
| 53 } | |
| 54 } | |
| 55 public: | |
| 56 STDMETHOD(get_Name)(BSTR *pName); | |
| 57 STDMETHOD(get_Company)(BSTR *pCompany); | |
| 58 STDMETHOD(get_Version)(BSTR *pVersion); | |
| 59 STDMETHOD(get_TerminalClass)(BSTR *pTerminalClass); | |
| 60 STDMETHOD(get_CLSID)(BSTR *pCLSID); | |
| 61 STDMETHOD(get_Direction)(TERMINAL_DIRECTION *pDirection); | |
| 62 STDMETHOD(get_MediaTypes)(long *pMediaTypes); | |
| 63 private: | |
| 64 CMSPCritSection m_CritSect; | |
| 65 BSTR m_bstrName; | |
| 66 BSTR m_bstrCompany; | |
| 67 BSTR m_bstrVersion; | |
| 68 BSTR m_bstrTerminalClass; | |
| 69 BSTR m_bstrCLSID; | |
| 70 long m_lMediaType; | |
| 71 TERMINAL_DIRECTION m_Direction; | |
| 72 IUnknown *m_pFTM; | |
| 73 private: | |
| 74 STDMETHOD(put_Name)(BSTR bstrName); | |
| 75 STDMETHOD(put_Company)(BSTR bstrCompany); | |
| 76 STDMETHOD(put_Version)(BSTR bstrVersion); | |
| 77 STDMETHOD(put_TerminalClass)(BSTR bstrTerminalClass); | |
| 78 STDMETHOD(put_CLSID)(BSTR bstrCLSID); | |
| 79 STDMETHOD(put_Direction)(TERMINAL_DIRECTION nDirection); | |
| 80 STDMETHOD(put_MediaTypes)(long nMediaTypes); | |
| 81 friend class CMSPAddress; | |
| 82 }; | |
| 83 | |
| 84 class ATL_NO_VTABLE CPlugTerminalSuperclassInfo : public IDispatchImpl<ITPluggableTerminalSuperclassInfo,&IID_ITPluggableTerminalSuperclassInfo,&LIBID_TAPI3Lib>,public CComObjectRootEx<CComMultiThreadModel>,public CMSPObjectSafetyImpl | |
| 85 { | |
| 86 public: | |
| 87 DECLARE_GET_CONTROLLING_UNKNOWN() | |
| 88 virtual HRESULT FinalConstruct(void); | |
| 89 BEGIN_COM_MAP(CPlugTerminalSuperclassInfo) | |
| 90 COM_INTERFACE_ENTRY(ITPluggableTerminalSuperclassInfo) | |
| 91 COM_INTERFACE_ENTRY(IDispatch) | |
| 92 COM_INTERFACE_ENTRY(IObjectSafety) | |
| 93 COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal,m_pFTM) | |
| 94 END_COM_MAP() | |
| 95 public: | |
| 96 CPlugTerminalSuperclassInfo() : m_bstrCLSID(NULL),m_bstrName(NULL),m_pFTM(NULL) { | |
| 97 } | |
| 98 ~CPlugTerminalSuperclassInfo() { | |
| 99 if(m_bstrName) { | |
| 100 SysFreeString(m_bstrName); | |
| 101 } | |
| 102 if(m_bstrCLSID) { | |
| 103 SysFreeString(m_bstrCLSID); | |
| 104 } | |
| 105 if(m_pFTM) { | |
| 106 m_pFTM->Release(); | |
| 107 } | |
| 108 } | |
| 109 public: | |
| 110 STDMETHOD(get_Name)(BSTR *pName); | |
| 111 STDMETHOD(get_CLSID)(BSTR *pCLSID); | |
| 112 private: | |
| 113 CMSPCritSection m_CritSect; | |
| 114 BSTR m_bstrCLSID; | |
| 115 BSTR m_bstrName; | |
| 116 IUnknown *m_pFTM; | |
| 117 private: | |
| 118 STDMETHOD(put_Name)(BSTR bstrName); | |
| 119 STDMETHOD(put_CLSID)(BSTR bstrCLSID); | |
| 120 friend class CMSPAddress; | |
| 121 }; | |
| 122 | |
| 123 class ATL_NO_VTABLE CMSPAddress : public CComObjectRootEx<CComMultiThreadModelNoCS>,public ITMSPAddress,public IDispatchImpl<ITTerminalSupport2,&IID_ITTerminalSupport2,&LIBID_TAPI3Lib> | |
| 124 { | |
| 125 public: | |
| 126 BEGIN_COM_MAP(CMSPAddress) | |
| 127 COM_INTERFACE_ENTRY(ITMSPAddress) | |
| 128 COM_INTERFACE_ENTRY(IDispatch) | |
| 129 COM_INTERFACE_ENTRY(ITTerminalSupport) | |
| 130 COM_INTERFACE_ENTRY(ITTerminalSupport2) | |
| 131 END_COM_MAP() | |
| 132 DECLARE_GET_CONTROLLING_UNKNOWN() | |
| 133 DECLARE_VQI() | |
| 134 CMSPAddress(); | |
| 135 virtual ~CMSPAddress(); | |
| 136 virtual ULONG MSPAddressAddRef(void) = 0; | |
| 137 virtual ULONG MSPAddressRelease(void) = 0; | |
| 138 STDMETHOD (Initialize) (MSP_HANDLE htEvent); | |
| 139 STDMETHOD (Shutdown) (); | |
| 140 STDMETHOD (CreateMSPCall) (MSP_HANDLE htCall,DWORD dwReserved,DWORD dwMediaType,IUnknown *pOuterUnknown,IUnknown **ppMSPCall) = 0; | |
| 141 STDMETHOD (ShutdownMSPCall) (IUnknown *pMSPCall) = 0; | |
| 142 STDMETHOD (ReceiveTSPData) (IUnknown *pMSPCall,LPBYTE pBuffer,DWORD dwBufferSize); | |
| 143 STDMETHOD (GetEvent) (DWORD *pdwSize,BYTE *pBuffer); | |
| 144 STDMETHOD (get_StaticTerminals) (VARIANT *pVariant); | |
| 145 STDMETHOD (EnumerateStaticTerminals) (IEnumTerminal **ppTerminalEnumerator); | |
| 146 STDMETHOD (get_DynamicTerminalClasses) (VARIANT *pVariant); | |
| 147 STDMETHOD (EnumerateDynamicTerminalClasses) (IEnumTerminalClass **ppTerminalClassEnumerator); | |
| 148 STDMETHOD (CreateTerminal) (BSTR pTerminalClass,long lMediaType,TERMINAL_DIRECTION Direction,ITTerminal **ppTerminal); | |
| 149 STDMETHOD (GetDefaultStaticTerminal) (long lMediaType,TERMINAL_DIRECTION Direction,ITTerminal **ppTerminal); | |
| 150 STDMETHOD (get_PluggableSuperclasses)(VARIANT *pVariant); | |
| 151 STDMETHOD (EnumeratePluggableSuperclasses)(IEnumPluggableSuperclassInfo **ppSuperclassEnumerator); | |
| 152 STDMETHOD (get_PluggableTerminalClasses)(BSTR bstrTerminalSuperclass,long lMediaType,VARIANT *pVariant); | |
| 153 STDMETHOD (EnumeratePluggableTerminalClasses)(CLSID iidTerminalSuperclass,long lMediaType,IEnumPluggableTerminalClassInfo **ppClassEnumerator); | |
| 154 protected: | |
| 155 virtual HRESULT GetStaticTerminals (DWORD *pdwNumTerminals,ITTerminal **ppTerminals); | |
| 156 virtual HRESULT GetDynamicTerminalClasses (DWORD *pdwNumClasses,IID *pTerminalClasses); | |
| 157 public: | |
| 158 virtual WINBOOL IsValidSetOfMediaTypes(DWORD dwMediaType,DWORD dwMask); | |
| 159 virtual HRESULT PostEvent(MSPEVENTITEM *EventItem); | |
| 160 virtual DWORD GetCallMediaTypes(void) = 0; | |
| 161 protected: | |
| 162 virtual HRESULT IsMonikerInTerminalList(IMoniker *pMoniker); | |
| 163 virtual HRESULT UpdateTerminalListForPnp(WINBOOL bDeviceArrival); | |
| 164 virtual HRESULT UpdateTerminalList(void); | |
| 165 virtual HRESULT ReceiveTSPAddressData(PBYTE pBuffer,DWORD dwSize); | |
| 166 public: | |
| 167 virtual HRESULT PnpNotifHandler(WINBOOL bDeviceArrival); | |
| 168 protected: | |
| 169 HANDLE m_htEvent; | |
| 170 LIST_ENTRY m_EventList; | |
| 171 CMSPCritSection m_EventDataLock; | |
| 172 ITTerminalManager *m_pITTerminalManager; | |
| 173 CMSPArray <ITTerminal *> m_Terminals; | |
| 174 WINBOOL m_fTerminalsUpToDate; | |
| 175 CMSPCritSection m_TerminalDataLock; | |
| 176 private: | |
| 177 static const STATIC_TERMINAL_TYPE m_saTerminalTypes[]; | |
| 178 static const DWORD m_sdwTerminalTypesCount; | |
| 179 }; | |
| 180 | |
| 181 template <class T> HRESULT CreateMSPCallHelper(CMSPAddress *pCMSPAddress,MSP_HANDLE htCall,DWORD dwReserved,DWORD dwMediaType,IUnknown *pOuterUnknown,IUnknown **ppMSPCall,T **ppCMSPCall) | |
| 182 { | |
| 183 LOG((MSP_TRACE,"CreateMSPCallHelper - enter")); | |
| 184 HRESULT hr; | |
| 185 T *pMSPCall; | |
| 186 IUnknown *pUnknown = NULL; | |
| 187 if(IsBadReadPtr(pCMSPAddress,sizeof(CMSPAddress))) { | |
| 188 LOG((MSP_ERROR,"CreateMSPCallHelper - bad address pointer - exit E_POINTER")); | |
| 189 return E_POINTER; | |
| 190 } | |
| 191 if(IsBadReadPtr(pOuterUnknown,sizeof(IUnknown))) { | |
| 192 LOG((MSP_ERROR,"CreateMSPCallHelper - bad outer unknown - we require aggregation - exit E_POINTER")); | |
| 193 return E_POINTER; | |
| 194 } | |
| 195 if(IsBadReadPtr(ppMSPCall,sizeof(IUnknown *))) { | |
| 196 LOG((MSP_ERROR,"CreateMSPCallHelper - bad iunknown return ptr - exit E_POINTER")); | |
| 197 return E_POINTER; | |
| 198 } | |
| 199 if(IsBadReadPtr(ppCMSPCall,sizeof(T *))) { | |
| 200 LOG((MSP_ERROR,"CreateMSPCallHelper - bad class return ptr - exit E_POINTER")); | |
| 201 return E_POINTER; | |
| 202 } | |
| 203 if(! pCMSPAddress->IsValidSetOfMediaTypes(dwMediaType,pCMSPAddress->GetCallMediaTypes())) { | |
| 204 LOG((MSP_ERROR,"CreateMSPCallHelper - unsupported media types - exit TAPI_E_INVALIDMEDIATYPE")); | |
| 205 return TAPI_E_INVALIDMEDIATYPE; | |
| 206 } | |
| 207 CComAggObject<T> *pCall; | |
| 208 pCall = new CComAggObject<T>(pOuterUnknown); | |
| 209 if(!pCall) { | |
| 210 LOG((MSP_ERROR,"CreateMSPCallHelper - could not create agg call instance - exit E_OUTOFMEMORY")); | |
| 211 return E_OUTOFMEMORY; | |
| 212 } | |
| 213 hr = pCall->QueryInterface(IID_IUnknown,(void **)&pUnknown); | |
| 214 if(FAILED(hr)) { | |
| 215 LOG((MSP_ERROR,"CreateMSPCallHelper - QueryInterface failed: %x",hr)); | |
| 216 delete pCall; | |
| 217 return hr; | |
| 218 } | |
| 219 hr = pCall->FinalConstruct(); | |
| 220 if(FAILED(hr)) { | |
| 221 LOG((MSP_ERROR,"CreateMSPCallHelper - FinalConstruct failed: %x.",hr)); | |
| 222 pUnknown->Release(); | |
| 223 return hr; | |
| 224 } | |
| 225 pMSPCall = dynamic_cast<T *>(&(pCall->m_contained)); | |
| 226 if(!pMSPCall) { | |
| 227 LOG((MSP_ERROR,"CreateMSPCallHelper - can not cast to agg object to class pointer - exit E_UNEXPECTED")); | |
| 228 pUnknown->Release(); | |
| 229 return E_UNEXPECTED; | |
| 230 } | |
| 231 hr = pMSPCall->Init(pCMSPAddress,htCall,dwReserved,dwMediaType); | |
| 232 if(FAILED(hr)) { | |
| 233 LOG((MSP_ERROR,"CreateMSPCallHelper - call init failed: %x",hr)); | |
| 234 pUnknown->Release(); | |
| 235 return hr; | |
| 236 } | |
| 237 *ppMSPCall = pUnknown; | |
| 238 *ppCMSPCall = pMSPCall; | |
| 239 LOG((MSP_TRACE,"CreateMSPCallHelper - exit S_OK")); | |
| 240 return hr; | |
| 241 } | |
| 242 | |
| 243 template <class T> HRESULT ShutdownMSPCallHelper(IUnknown *pUnknown,T **ppCMSPCall) | |
| 244 { | |
| 245 LOG((MSP_TRACE,"ShutdownMSPCallHelper - enter")); | |
| 246 if(IsBadReadPtr(pUnknown,sizeof(IUnknown))) { | |
| 247 LOG((MSP_ERROR,"ShutdownMSPCallHelper - bad IUnknown pointer - exit E_POINTER")); | |
| 248 return E_POINTER; | |
| 249 } | |
| 250 if(IsBadWritePtr(ppCMSPCall,sizeof(T *))) { | |
| 251 LOG((MSP_ERROR,"ShutdownMSPCallHelper - bad return pointer - exit E_POINTER")); | |
| 252 return E_POINTER; | |
| 253 } | |
| 254 T *pMSPCall; | |
| 255 CComAggObject<T> *pCall = dynamic_cast<CComAggObject<T> *> (pUnknown); | |
| 256 if(!pCall) { | |
| 257 LOG((MSP_ERROR,"ShutdownMSPCallHelper - can't cast unknown to agg object pointer - exit E_UNEXPECTED")); | |
| 258 return E_UNEXPECTED; | |
| 259 } | |
| 260 pMSPCall = dynamic_cast<T *> (&(pCall->m_contained)); | |
| 261 if(!pMSPCall) { | |
| 262 LOG((MSP_ERROR,"ShutdownMSPCallHelper - can't cast contained unknown to class pointer - exit E_UNEXPECTED")); | |
| 263 return E_UNEXPECTED; | |
| 264 } | |
| 265 HRESULT hr = pMSPCall->ShutDown(); | |
| 266 if(FAILED(hr)) { | |
| 267 LOG((MSP_ERROR,"ShutdownMSPCallHelper - ShutDownMSPCall failed: %x",hr)); | |
| 268 return hr; | |
| 269 } | |
| 270 *ppCMSPCall = pMSPCall; | |
| 271 LOG((MSP_TRACE,"ShutdownMSPCallHelper - exit S_OK")); | |
| 272 return S_OK; | |
| 273 } | |
| 274 #endif |
