// ConnectionManager.cpp: implementation of the CConnectionManager class. // ////////////////////////////////////////////////////////////////////// // // 03/05/00 v-marfin bug 59643 : Check for empty Marshal list before proceeding in // UnMarshalCnxMgr() // 04/05/00 v-marfin bug 62501 : Display appropriate msg when unable to connect to a server. // // #include "stdafx.h" #include "SnapIn.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif const IID IID_IConnectionManager = {0xFA84E6F2,0x0B7B,0x11D2,{0xBD,0xCB,0x00,0xC0,0x4F,0xA3,0x54,0x47}}; const IID LIBID_CONNMGRLib = {0xFA84E6E5,0x0B7B,0x11D2,{0xBD,0xCB,0x00,0xC0,0x4F,0xA3,0x54,0x47}}; const CLSID CLSID_ConnectionManager = {0xFA84E6F3,0x0B7B,0x11D2,{0xBD,0xCB,0x00,0xC0,0x4F,0xA3,0x54,0x47}}; ////////////////////////////////////////////////////////////////////// // CMarhsalledConnection CMarshalledConnection::CMarshalledConnection() { m_pIMarshalledConnectionManager = NULL; m_lpMarshalStream = NULL; } ////////////////////////////////////////////////////////////////////// // Operations ////////////////////////////////////////////////////////////////////// HRESULT CMarshalledConnection::Marshal(IConnectionManager* pIConMgr) { TRACEX(_T("CMarshalledConnection::Marshal\n")); TRACEARGn(pIConMgr); HRESULT hr = S_OK; if( m_lpMarshalStream == NULL ) { hr = CoMarshalInterThreadInterfaceInStream(IID_IConnectionManager,pIConMgr,&m_lpMarshalStream); if( ! CHECKHRESULT(hr) ) { TRACE(_T("FAILED : CoMarshalInterThreadInterfaceInStream failed.\n")); } } return hr; } HRESULT CMarshalledConnection::UnMarshal() { TRACEX(_T("CMarshalledConnection::UnMarshal\n")); HRESULT hr = S_OK; if( m_pIMarshalledConnectionManager == NULL ) { hr = CoGetInterfaceAndReleaseStream(m_lpMarshalStream,IID_IConnectionManager,(LPVOID*)(&m_pIMarshalledConnectionManager)); if(!CHECKHRESULT(hr)) { TRACE(_T("FAILED : CoGetInterfaceAndReleaseStream failed.\n")); } } return hr; } IConnectionManager* CMarshalledConnection::GetConnection() { TRACEX(_T("CMarshalledConnection::GetConnection\n")); // make certain the pointer has been unmarshalled HRESULT hr = UnMarshal(); CHECKHRESULT(hr); ASSERT(m_pIMarshalledConnectionManager); return m_pIMarshalledConnectionManager; } ////////////////////////////////////////////////////////////////////// // CConnectionManager IMPLEMENT_DYNCREATE(CConnectionManager,CObject) ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CConnectionManager theCnxManager; CConnectionManager::CConnectionManager() { m_pIConnectionManager = NULL; } CConnectionManager::~CConnectionManager() { Destroy(); } BOOL CConnectionManager::Create() { TRACEX(_T("CConnectionManager::Create\n")); // create the ConnectionManager object if( m_pIConnectionManager != NULL ) { return TRUE; } HRESULT hr = CoCreateInstance(CLSID_ConnectionManager,NULL,CLSCTX_LOCAL_SERVER,IID_IConnectionManager,(LPVOID*)&m_pIConnectionManager); if( !CHECKHRESULT(hr) ) { TRACE(_T("FAILED : Failed to create Connection Manager !\n")); return FALSE; } ASSERT(m_pIConnectionManager); return TRUE; } void CConnectionManager::Destroy() { TRACEX(_T("CConnectionManager::Destroy\n")); // clean up any marshalled connections laying around POSITION pos = m_MarshalMap.GetStartPosition(); CMarshalledConnection* pMC = NULL; DWORD dwKey = 0L; while( pos ) { m_MarshalMap.GetNextAssoc(pos,dwKey,pMC); if( pMC ) { delete pMC; } } m_MarshalMap.RemoveAll(); // release the ConnectionManager object if( m_pIConnectionManager ) { m_pIConnectionManager->Release(); m_pIConnectionManager = NULL; } } ////////////////////////////////////////////////////////////////////// // Connection Operations ////////////////////////////////////////////////////////////////////// HRESULT CConnectionManager::GetConnection(const CString& sMachineName, IWbemServices*& pIWbemServices, BOOL& bAvailable ) { TRACEX(_T("CConnectionManager::GetConnection\n")); TRACEARGs(sMachineName); ASSERT(m_pIConnectionManager); if( m_pIConnectionManager == NULL ) { TRACE(_T("FAILED : CConnectionManager::GetConnection failed. m_pIConnectionManager is NULL.\n")); pIWbemServices = NULL; bAvailable = FALSE; return E_FAIL; } BSTR bsMachineName = sMachineName.AllocSysString(); long lAvail = 0L; HRESULT hr = m_pIConnectionManager->GetConnection(bsMachineName,&pIWbemServices,&lAvail); if( HRESULT_CODE(hr) == RPC_S_SERVER_UNAVAILABLE ) { HandleConnMgrException(hr); Destroy(); Create(); hr = m_pIConnectionManager->GetConnection(bsMachineName,&pIWbemServices,&lAvail); } if( hr == RPC_E_WRONG_THREAD ) { CMarshalledConnection* pConnection = NULL; DWORD dwThreadID = GetCurrentThreadId(); m_MarshalMap.Lookup(dwThreadID,pConnection); ASSERT(pConnection); if( pConnection == NULL ) { TRACE(_T("FAILED : Could not find a marshalled connection for the calling thread!\n")); return E_FAIL; } IConnectionManager* pCnxMgr = pConnection->GetConnection(); ASSERT(pCnxMgr); if( pCnxMgr == NULL ) { TRACE(_T("FAILED : CMarshalledConnection::GetConnection returns NULL. Failed.\n")); return E_FAIL; } hr = pCnxMgr->GetConnection(bsMachineName,&pIWbemServices,&lAvail); if( HRESULT_CODE(hr) == RPC_S_SERVER_UNAVAILABLE ) { HandleConnMgrException(hr); } if( !SUCCEEDED(hr) ) { TRACE(_T("The marshalled connection manager's GetConnection failed.\n")); } } SysFreeString(bsMachineName); bAvailable = lAvail; if( !CHECKHRESULT(hr) ) { TRACE(_T("FAILED : IConnectionManager::GetConnection failed.\n")); return hr; } return hr; } HRESULT CConnectionManager::ConnectToNamespace(const CString& sNamespace, IWbemServices*& pIWbemServices) { TRACEX(_T("CConnectionManager::ConnectToNamespace\n")); TRACEARGs(sNamespace); ASSERT(m_pIConnectionManager); if( m_pIConnectionManager == NULL ) { TRACE(_T("FAILED : CConnectionManager::ConnectToNamespace failed. m_pIConnectionManager is NULL.\n")); pIWbemServices = NULL; return E_FAIL; } BSTR bsNamespace = sNamespace.AllocSysString(); HRESULT hr = m_pIConnectionManager->ConnectToNamespace(bsNamespace,&pIWbemServices); if( HRESULT_CODE(hr) == RPC_S_SERVER_UNAVAILABLE ) { // v-marfin 62501 HandleConnMgrException(hr); CString sMsg; sMsg.Format(IDS_STRING_TRANSPORT_ERROR,sNamespace); AfxMessageBox(sMsg); //Destroy(); // v-marfin 62501 - This was here originally, so keep?? -------------------- //Create(); //hr = m_pIConnectionManager->ConnectToNamespace(bsNamespace,&pIWbemServices); //-------------------------------------------------------------------------- SysFreeString(bsNamespace); // v-marfin 62501 return E_FAIL; // v-marfin 62501 } if( hr == RPC_E_WRONG_THREAD ) { CMarshalledConnection* pConnection = NULL; DWORD dwThreadID = GetCurrentThreadId(); m_MarshalMap.Lookup(dwThreadID,pConnection); ASSERT(pConnection); if( pConnection == NULL ) { TRACE(_T("FAILED : Could not find a marshalled connection for the calling thread!\n")); return E_FAIL; } IConnectionManager* pCnxMgr = pConnection->GetConnection(); ASSERT(pCnxMgr); if( pCnxMgr == NULL ) { TRACE(_T("FAILED : CMarshalledConnection::GetConnection returns NULL. Failed.\n")); return E_FAIL; } hr = pCnxMgr->ConnectToNamespace(bsNamespace,&pIWbemServices); if( HRESULT_CODE(hr) == RPC_S_SERVER_UNAVAILABLE ) { HandleConnMgrException(hr); } if( !SUCCEEDED(hr) ) { TRACE(_T("The marshalled connection manager's GetConnection failed.\n")); } } SysFreeString(bsNamespace); if( !CHECKHRESULT(hr) ) { TRACE(_T("FAILED : IConnectionManager::ConnectToNamespace failed.\n")); return hr; } return hr; } HRESULT CConnectionManager::RemoveConnection(const CString& sMachineName, IWbemObjectSink* pSink) { TRACEX(_T("CConnectionManager::RemoveConnection\n")); TRACEARGs(sMachineName); TRACEARGn(pSink); ASSERT(m_pIConnectionManager); if( m_pIConnectionManager == NULL ) { TRACE(_T("FAILED : CConnectionManager::RemoveConnection failed. m_pIConnectionManager is NULL.\n")); return FALSE; } BSTR bsMachineName = sMachineName.AllocSysString(); HRESULT hr = m_pIConnectionManager->RemoveConnection(bsMachineName,pSink); SysFreeString(bsMachineName); if( !CHECKHRESULT(hr) ) { TRACE(_T("FAILED : IConnectionManager::RemoveConnection failed.\n")); return hr; } return hr; } ////////////////////////////////////////////////////////////////////// // Event Operations ////////////////////////////////////////////////////////////////////// HRESULT CConnectionManager::ExecQueryAsync(const CString& sMachineName, const CString& sQuery, IWbemObjectSink*& pSink) { TRACEX(_T("CConnectionManager::ExecQueryAsync\n")); TRACEARGs(sMachineName); TRACEARGs(sQuery); if( ! GfxCheckPtr(m_pIConnectionManager,IConnectionManager) ) { TRACE(_T("FAILED : m_pIConnectionManager is not a valid pointer.\n")); return E_FAIL; } BSTR bsMachineName = sMachineName.AllocSysString(); BSTR bsQuery = sQuery.AllocSysString(); HRESULT hr = m_pIConnectionManager->ExecQueryAsync(bsMachineName,bsQuery,pSink); if( hr == RPC_E_WRONG_THREAD ) { CMarshalledConnection* pConnection = NULL; DWORD dwThreadID = GetCurrentThreadId(); m_MarshalMap.Lookup(dwThreadID,pConnection); ASSERT(pConnection); if( pConnection == NULL ) { TRACE(_T("FAILED : Could not find a marshalled connection for the calling thread!\n")); return E_FAIL; } IConnectionManager* pCnxMgr = pConnection->GetConnection(); ASSERT(pCnxMgr); if( pCnxMgr == NULL ) { TRACE(_T("FAILED : CMarshalledConnection::GetConnection returns NULL. Failed.\n")); return E_FAIL; } hr = pCnxMgr->ExecQueryAsync(bsMachineName,bsQuery,pSink); if( HRESULT_CODE(hr) == RPC_S_SERVER_UNAVAILABLE ) { HandleConnMgrException(hr); } if( !SUCCEEDED(hr) ) { TRACE(_T("The marshalled connection manager's GetConnection failed.\n")); } } SysFreeString(bsMachineName); SysFreeString(bsQuery); if( !CHECKHRESULT(hr) ) { TRACE(_T("FAILED : IConnectionManager::ExecQueryAsync failed.\n")); return hr; } return hr; } ////////////////////////////////////////////////////////////////////// // Event Operations ////////////////////////////////////////////////////////////////////// HRESULT CConnectionManager::RegisterEventNotification(const CString& sMachineName, const CString& sQuery, IWbemObjectSink*& pSink) { TRACEX(_T("CConnectionManager::RegisterEventNotification\n")); TRACEARGs(sMachineName); TRACEARGs(sQuery); if( ! GfxCheckPtr(m_pIConnectionManager,IConnectionManager) ) { TRACE(_T("FAILED : m_pIConnectionManager is not a valid pointer.\n")); return E_FAIL; } BSTR bsMachineName = sMachineName.AllocSysString(); BSTR bsQuery = sQuery.AllocSysString(); HRESULT hr = m_pIConnectionManager->RegisterEventNotification(bsMachineName,bsQuery,pSink); if( HRESULT_CODE(hr) == RPC_S_SERVER_UNAVAILABLE ) { HandleConnMgrException(hr); Destroy(); Create(); hr = m_pIConnectionManager->RegisterEventNotification(bsMachineName,bsQuery,pSink); } if( hr == RPC_E_WRONG_THREAD ) { CMarshalledConnection* pConnection = NULL; DWORD dwThreadID = GetCurrentThreadId(); m_MarshalMap.Lookup(dwThreadID,pConnection); ASSERT(pConnection); if( pConnection == NULL ) { TRACE(_T("FAILED : Could not find a marshalled connection for the calling thread!\n")); SysFreeString(bsMachineName); SysFreeString(bsQuery); return E_FAIL; } IConnectionManager* pCnxMgr = pConnection->GetConnection(); ASSERT(pCnxMgr); if( pCnxMgr == NULL ) { TRACE(_T("FAILED : CMarshalledConnection::GetConnection returns NULL. Failed.\n")); SysFreeString(bsMachineName); SysFreeString(bsQuery); return E_FAIL; } hr = pCnxMgr->RegisterEventNotification(bsMachineName,bsQuery,pSink); if( HRESULT_CODE(hr) == RPC_S_SERVER_UNAVAILABLE ) { HandleConnMgrException(hr); } if( !SUCCEEDED(hr) ) { TRACE(_T("The marshalled connection manager's GetConnection failed.\n")); } } SysFreeString(bsMachineName); SysFreeString(bsQuery); if( !CHECKHRESULT(hr) ) { TRACE(_T("FAILED : IConnectionManager::RegisterEventNotification failed.\n")); return hr; } return hr; } ////////////////////////////////////////////////////////////////////// // Error Display Operations ////////////////////////////////////////////////////////////////////// void CConnectionManager::DisplayErrorMsgBox(HRESULT hr, const CString& sMachineName) { TRACEX(_T("CConnectionManager::DisplayErrorMsgBox\n")); TRACEARGn(hr); TRACEARGs(sMachineName); CString sText; CString sTitle; GetErrorString(hr,sMachineName,sText); if( ! sText.IsEmpty() ) AfxMessageBox(sText); } void CConnectionManager::GetErrorString(HRESULT hr, const CString& sMachineName, CString& sErrorText) { TRACEX(_T("CConnectionManager::GetErrorString\n")); TRACEARGn(hr); TRACEARGs(sMachineName); TRACEARGs(sErrorText); if( hr == S_OK ) return; switch( hr ) { case E_FAIL: { sErrorText.Format(IDS_STRING_INVALID_MACHINE_NAME,sMachineName); } break; case WBEM_E_INVALID_CLASS: case E_NOTIMPL: { sErrorText.Format(IDS_STRING_INCORRECT_AGENT_VERSION,sMachineName); } break; case REGDB_E_CLASSNOTREG: { sErrorText.Format(IDS_STRING_WBEM_NOT_INSTALLED,sMachineName); } break; case E_ACCESSDENIED: case WBEM_E_ACCESS_DENIED: { sErrorText.Format(IDS_STRING_NO_CONNECT,sMachineName); } break; case WBEM_E_PROVIDER_FAILURE: { sErrorText.Format(IDS_STRING_PROVIDER_FAILURE,sMachineName,sMachineName); } break; case WBEM_E_PROVIDER_LOAD_FAILURE: { sErrorText.Format(IDS_STRING_PROVIDER_LOAD_FAILURE,sMachineName,sMachineName); } break; case WBEM_E_INVALID_NAMESPACE: { sErrorText.Format(IDS_STRING_INVALID_NAMESPACE,sMachineName,sMachineName); } break; case WBEM_E_INVALID_PARAMETER: { sErrorText.Format(IDS_STRING_INVALID_PARAMETER,sMachineName); } break; case WBEM_E_OUT_OF_MEMORY: { sErrorText.Format(IDS_STRING_OUT_OF_MEMORY,sMachineName); } break; case WBEM_E_TRANSPORT_FAILURE: { sErrorText.Format(IDS_STRING_TRANSPORT_ERROR,sMachineName); } break; case WBEM_S_OPERATION_CANCELLED: { sErrorText.Format(IDS_STRING_OPERATION_CANCELLED,sMachineName); } break; case WBEMESS_E_REGISTRATION_TOO_PRECISE: { sErrorText.Format(IDS_STRING_REGISTRATION_TOO_PRECISE,sMachineName); } break; default: { if( HRESULT_CODE(hr) == RPC_S_CALL_FAILED || HRESULT_CODE(hr) == RPC_S_CALL_FAILED_DNE ) { sErrorText.Format(IDS_STRING_WBEM_NOT_AVAILABLE,sMachineName); return; } TCHAR szFacility[_FACILITYLEN]; TCHAR szErrorName[_ERRORNAMELEN]; TCHAR szErrorDesc[_ERRORDESCLEN]; ZeroMemory(szErrorName,sizeof(TCHAR)*_ERRORNAMELEN); ZeroMemory(szFacility,sizeof(TCHAR)*_FACILITYLEN); ZeroMemory(szErrorDesc,sizeof(TCHAR)*_ERRORDESCLEN); DecodeHResult(hr,szFacility,szErrorName,szErrorDesc); if( szFacility[0] == NULL || szErrorName[0] == NULL || szErrorDesc[0] == NULL ) { sErrorText.Format(IDS_STRING_UNKNOWN_ERROR,sMachineName,hr); } else { CString sErrorDesc = szErrorDesc; sErrorDesc.TrimRight(); sErrorText.Format(IDS_STRING_UNSPECIFIED_ERROR,sMachineName,sErrorDesc); } } } } #define CASE_FACILITY(f) \ case f: \ _tcscpy((LPTSTR)szFacility, (LPTSTR)#f); \ break; #define CASE_HRESULT(hr) \ case hr: \ _tcscpy((LPTSTR)szErrorName, (LPTSTR)#hr); \ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, \ MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), \ szErrorDesc, sizeof(TCHAR)*_ERRORDESCLEN, NULL);\ break; #define CASE_CODE(c) \ case c: \ _tcscpy((LPTSTR)szErrorName, (LPTSTR)#c); \ FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, \ MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), \ szErrorDesc, sizeof(TCHAR)*_ERRORDESCLEN, NULL);\ break; #pragma warning( disable : 4245 ) void CConnectionManager::DecodeHResult(HRESULT hr, LPTSTR pszFacility, LPTSTR pszErrorName, LPTSTR pszErrorDesc) { TCHAR szFacility[_FACILITYLEN]; TCHAR szErrorName[_ERRORNAMELEN]; TCHAR szErrorDesc[_ERRORDESCLEN]; ZeroMemory(szErrorName,sizeof(TCHAR)*_ERRORNAMELEN); ZeroMemory(szFacility,sizeof(TCHAR)*_FACILITYLEN); ZeroMemory(szErrorDesc,sizeof(TCHAR)*_ERRORDESCLEN); _tcscpy(szErrorDesc, _T("")); switch (HRESULT_FACILITY(hr)) { CASE_FACILITY(FACILITY_WINDOWS) CASE_FACILITY(FACILITY_STORAGE) CASE_FACILITY(FACILITY_RPC) CASE_FACILITY(FACILITY_SSPI) CASE_FACILITY(FACILITY_WIN32) CASE_FACILITY(FACILITY_CONTROL) CASE_FACILITY(FACILITY_NULL) CASE_FACILITY(FACILITY_INTERNET) CASE_FACILITY(FACILITY_ITF) CASE_FACILITY(FACILITY_DISPATCH) CASE_FACILITY(FACILITY_CERT) default: _tcscpy(szFacility, _T("")); } switch (hr) { CASE_HRESULT(E_UNEXPECTED) CASE_HRESULT(E_NOTIMPL) CASE_HRESULT(E_OUTOFMEMORY) CASE_HRESULT(E_INVALIDARG) CASE_HRESULT(E_NOINTERFACE) CASE_HRESULT(E_POINTER) CASE_HRESULT(E_HANDLE) CASE_HRESULT(E_ABORT) CASE_HRESULT(E_FAIL) CASE_HRESULT(E_ACCESSDENIED) CASE_HRESULT(E_PENDING) CASE_HRESULT(CO_E_INIT_TLS) CASE_HRESULT(CO_E_INIT_SHARED_ALLOCATOR) CASE_HRESULT(CO_E_INIT_MEMORY_ALLOCATOR) CASE_HRESULT(CO_E_INIT_CLASS_CACHE) CASE_HRESULT(CO_E_INIT_RPC_CHANNEL) CASE_HRESULT(CO_E_INIT_TLS_SET_CHANNEL_CONTROL) CASE_HRESULT(CO_E_INIT_TLS_CHANNEL_CONTROL) CASE_HRESULT(CO_E_INIT_UNACCEPTED_USER_ALLOCATOR) CASE_HRESULT(CO_E_INIT_SCM_MUTEX_EXISTS) CASE_HRESULT(CO_E_INIT_SCM_FILE_MAPPING_EXISTS) CASE_HRESULT(CO_E_INIT_SCM_MAP_VIEW_OF_FILE) CASE_HRESULT(CO_E_INIT_SCM_EXEC_FAILURE) CASE_HRESULT(CO_E_INIT_ONLY_SINGLE_THREADED) CASE_HRESULT(CO_E_CANT_REMOTE) CASE_HRESULT(CO_E_BAD_SERVER_NAME) CASE_HRESULT(CO_E_WRONG_SERVER_IDENTITY) CASE_HRESULT(CO_E_OLE1DDE_DISABLED) CASE_HRESULT(CO_E_RUNAS_SYNTAX) CASE_HRESULT(CO_E_CREATEPROCESS_FAILURE) CASE_HRESULT(CO_E_RUNAS_CREATEPROCESS_FAILURE) CASE_HRESULT(CO_E_RUNAS_LOGON_FAILURE) CASE_HRESULT(CO_E_LAUNCH_PERMSSION_DENIED) CASE_HRESULT(CO_E_START_SERVICE_FAILURE) CASE_HRESULT(CO_E_REMOTE_COMMUNICATION_FAILURE) CASE_HRESULT(CO_E_SERVER_START_TIMEOUT) CASE_HRESULT(CO_E_CLSREG_INCONSISTENT) CASE_HRESULT(CO_E_IIDREG_INCONSISTENT) CASE_HRESULT(CO_E_NOT_SUPPORTED) CASE_HRESULT(S_OK) CASE_HRESULT(S_FALSE) CASE_HRESULT(OLE_E_OLEVERB) CASE_HRESULT(OLE_E_ADVF) CASE_HRESULT(OLE_E_ENUM_NOMORE) CASE_HRESULT(OLE_E_ADVISENOTSUPPORTED) CASE_HRESULT(OLE_E_NOCONNECTION) CASE_HRESULT(OLE_E_NOTRUNNING) CASE_HRESULT(OLE_E_NOCACHE) CASE_HRESULT(OLE_E_BLANK) CASE_HRESULT(OLE_E_CLASSDIFF) CASE_HRESULT(OLE_E_CANT_GETMONIKER) CASE_HRESULT(OLE_E_CANT_BINDTOSOURCE) CASE_HRESULT(OLE_E_STATIC) CASE_HRESULT(OLE_E_PROMPTSAVECANCELLED) CASE_HRESULT(OLE_E_INVALIDRECT) CASE_HRESULT(OLE_E_WRONGCOMPOBJ) CASE_HRESULT(OLE_E_INVALIDHWND) CASE_HRESULT(OLE_E_NOT_INPLACEACTIVE) CASE_HRESULT(OLE_E_CANTCONVERT) CASE_HRESULT(OLE_E_NOSTORAGE) CASE_HRESULT(DV_E_FORMATETC) CASE_HRESULT(DV_E_DVTARGETDEVICE) CASE_HRESULT(DV_E_STGMEDIUM) CASE_HRESULT(DV_E_STATDATA) CASE_HRESULT(DV_E_LINDEX) CASE_HRESULT(DV_E_TYMED) CASE_HRESULT(DV_E_CLIPFORMAT) CASE_HRESULT(DV_E_DVASPECT) CASE_HRESULT(DV_E_DVTARGETDEVICE_SIZE) CASE_HRESULT(DV_E_NOIVIEWOBJECT) CASE_HRESULT(DRAGDROP_E_NOTREGISTERED) CASE_HRESULT(DRAGDROP_E_ALREADYREGISTERED) CASE_HRESULT(DRAGDROP_E_INVALIDHWND) CASE_HRESULT(CLASS_E_NOAGGREGATION) CASE_HRESULT(CLASS_E_CLASSNOTAVAILABLE) CASE_HRESULT(VIEW_E_DRAW) CASE_HRESULT(REGDB_E_READREGDB) CASE_HRESULT(REGDB_E_WRITEREGDB) CASE_HRESULT(REGDB_E_KEYMISSING) CASE_HRESULT(REGDB_E_INVALIDVALUE) CASE_HRESULT(REGDB_E_CLASSNOTREG) CASE_HRESULT(REGDB_E_IIDNOTREG) CASE_HRESULT(CACHE_E_NOCACHE_UPDATED) CASE_HRESULT(OLEOBJ_E_NOVERBS) CASE_HRESULT(OLEOBJ_E_INVALIDVERB) CASE_HRESULT(INPLACE_E_NOTUNDOABLE) CASE_HRESULT(INPLACE_E_NOTOOLSPACE) CASE_HRESULT(CONVERT10_E_OLESTREAM_GET) CASE_HRESULT(CONVERT10_E_OLESTREAM_PUT) CASE_HRESULT(CONVERT10_E_OLESTREAM_FMT) CASE_HRESULT(CONVERT10_E_OLESTREAM_BITMAP_TO_DIB) CASE_HRESULT(CONVERT10_E_STG_FMT) CASE_HRESULT(CONVERT10_E_STG_NO_STD_STREAM) CASE_HRESULT(CONVERT10_E_STG_DIB_TO_BITMAP) CASE_HRESULT(CLIPBRD_E_CANT_OPEN) CASE_HRESULT(CLIPBRD_E_CANT_EMPTY) CASE_HRESULT(CLIPBRD_E_CANT_SET) CASE_HRESULT(CLIPBRD_E_BAD_DATA) CASE_HRESULT(CLIPBRD_E_CANT_CLOSE) CASE_HRESULT(MK_E_CONNECTMANUALLY) CASE_HRESULT(MK_E_EXCEEDEDDEADLINE) CASE_HRESULT(MK_E_NEEDGENERIC) CASE_HRESULT(MK_E_UNAVAILABLE) CASE_HRESULT(MK_E_SYNTAX) CASE_HRESULT(MK_E_NOOBJECT) CASE_HRESULT(MK_E_INVALIDEXTENSION) CASE_HRESULT(MK_E_INTERMEDIATEINTERFACENOTSUPPORTED) CASE_HRESULT(MK_E_NOTBINDABLE) CASE_HRESULT(MK_E_NOTBOUND) CASE_HRESULT(MK_E_CANTOPENFILE) CASE_HRESULT(MK_E_MUSTBOTHERUSER) CASE_HRESULT(MK_E_NOINVERSE) CASE_HRESULT(MK_E_NOSTORAGE) CASE_HRESULT(MK_E_NOPREFIX) CASE_HRESULT(MK_E_ENUMERATION_FAILED) CASE_HRESULT(CO_E_NOTINITIALIZED) CASE_HRESULT(CO_E_ALREADYINITIALIZED) CASE_HRESULT(CO_E_CANTDETERMINECLASS) CASE_HRESULT(CO_E_CLASSSTRING) CASE_HRESULT(CO_E_IIDSTRING) CASE_HRESULT(CO_E_APPNOTFOUND) CASE_HRESULT(CO_E_APPSINGLEUSE) CASE_HRESULT(CO_E_ERRORINAPP) CASE_HRESULT(CO_E_DLLNOTFOUND) CASE_HRESULT(CO_E_ERRORINDLL) CASE_HRESULT(CO_E_WRONGOSFORAPP) CASE_HRESULT(CO_E_OBJNOTREG) CASE_HRESULT(CO_E_OBJISREG) CASE_HRESULT(CO_E_OBJNOTCONNECTED) CASE_HRESULT(CO_E_APPDIDNTREG) CASE_HRESULT(CO_E_RELEASED) CASE_HRESULT(OLE_S_USEREG) CASE_HRESULT(OLE_S_STATIC) CASE_HRESULT(OLE_S_MAC_CLIPFORMAT) CASE_HRESULT(DRAGDROP_S_DROP) CASE_HRESULT(DRAGDROP_S_CANCEL) CASE_HRESULT(DRAGDROP_S_USEDEFAULTCURSORS) CASE_HRESULT(DATA_S_SAMEFORMATETC) CASE_HRESULT(VIEW_S_ALREADY_FROZEN) CASE_HRESULT(CACHE_S_FORMATETC_NOTSUPPORTED) CASE_HRESULT(CACHE_S_SAMECACHE) CASE_HRESULT(CACHE_S_SOMECACHES_NOTUPDATED) CASE_HRESULT(OLEOBJ_S_INVALIDVERB) CASE_HRESULT(OLEOBJ_S_CANNOT_DOVERB_NOW) CASE_HRESULT(OLEOBJ_S_INVALIDHWND) CASE_HRESULT(INPLACE_S_TRUNCATED) CASE_HRESULT(CONVERT10_S_NO_PRESENTATION) CASE_HRESULT(MK_S_REDUCED_TO_SELF) CASE_HRESULT(MK_S_ME) CASE_HRESULT(MK_S_HIM) CASE_HRESULT(MK_S_US) CASE_HRESULT(MK_S_MONIKERALREADYREGISTERED) CASE_HRESULT(CO_E_CLASS_CREATE_FAILED) CASE_HRESULT(CO_E_SCM_ERROR) CASE_HRESULT(CO_E_SCM_RPC_FAILURE) CASE_HRESULT(CO_E_BAD_PATH) CASE_HRESULT(CO_E_SERVER_EXEC_FAILURE) CASE_HRESULT(CO_E_OBJSRV_RPC_FAILURE) CASE_HRESULT(MK_E_NO_NORMALIZED) CASE_HRESULT(CO_E_SERVER_STOPPING) CASE_HRESULT(MEM_E_INVALID_ROOT) CASE_HRESULT(MEM_E_INVALID_LINK) CASE_HRESULT(MEM_E_INVALID_SIZE) CASE_HRESULT(CO_S_NOTALLINTERFACES) CASE_HRESULT(DISP_E_UNKNOWNINTERFACE) CASE_HRESULT(DISP_E_MEMBERNOTFOUND) CASE_HRESULT(DISP_E_PARAMNOTFOUND) CASE_HRESULT(DISP_E_TYPEMISMATCH) CASE_HRESULT(DISP_E_UNKNOWNNAME) CASE_HRESULT(DISP_E_NONAMEDARGS) CASE_HRESULT(DISP_E_BADVARTYPE) CASE_HRESULT(DISP_E_EXCEPTION) CASE_HRESULT(DISP_E_OVERFLOW) CASE_HRESULT(DISP_E_BADINDEX) CASE_HRESULT(DISP_E_UNKNOWNLCID) CASE_HRESULT(DISP_E_ARRAYISLOCKED) CASE_HRESULT(DISP_E_BADPARAMCOUNT) CASE_HRESULT(DISP_E_PARAMNOTOPTIONAL) CASE_HRESULT(DISP_E_BADCALLEE) CASE_HRESULT(DISP_E_NOTACOLLECTION) CASE_HRESULT(TYPE_E_BUFFERTOOSMALL) CASE_HRESULT(TYPE_E_INVDATAREAD) CASE_HRESULT(TYPE_E_UNSUPFORMAT) CASE_HRESULT(TYPE_E_REGISTRYACCESS) CASE_HRESULT(TYPE_E_LIBNOTREGISTERED) CASE_HRESULT(TYPE_E_UNDEFINEDTYPE) CASE_HRESULT(TYPE_E_QUALIFIEDNAMEDISALLOWED) CASE_HRESULT(TYPE_E_INVALIDSTATE) CASE_HRESULT(TYPE_E_WRONGTYPEKIND) CASE_HRESULT(TYPE_E_ELEMENTNOTFOUND) CASE_HRESULT(TYPE_E_AMBIGUOUSNAME) CASE_HRESULT(TYPE_E_NAMECONFLICT) CASE_HRESULT(TYPE_E_UNKNOWNLCID) CASE_HRESULT(TYPE_E_DLLFUNCTIONNOTFOUND) CASE_HRESULT(TYPE_E_BADMODULEKIND) CASE_HRESULT(TYPE_E_SIZETOOBIG) CASE_HRESULT(TYPE_E_DUPLICATEID) CASE_HRESULT(TYPE_E_INVALIDID) CASE_HRESULT(TYPE_E_TYPEMISMATCH) CASE_HRESULT(TYPE_E_OUTOFBOUNDS) CASE_HRESULT(TYPE_E_IOERROR) CASE_HRESULT(TYPE_E_CANTCREATETMPFILE) CASE_HRESULT(TYPE_E_CANTLOADLIBRARY) CASE_HRESULT(TYPE_E_INCONSISTENTPROPFUNCS) CASE_HRESULT(TYPE_E_CIRCULARTYPE) CASE_HRESULT(STG_E_INVALIDFUNCTION) CASE_HRESULT(STG_E_FILENOTFOUND) CASE_HRESULT(STG_E_PATHNOTFOUND) CASE_HRESULT(STG_E_TOOMANYOPENFILES) CASE_HRESULT(STG_E_ACCESSDENIED) CASE_HRESULT(STG_E_INVALIDHANDLE) CASE_HRESULT(STG_E_INSUFFICIENTMEMORY) CASE_HRESULT(STG_E_INVALIDPOINTER) CASE_HRESULT(STG_E_NOMOREFILES) CASE_HRESULT(STG_E_DISKISWRITEPROTECTED) CASE_HRESULT(STG_E_SEEKERROR) CASE_HRESULT(STG_E_WRITEFAULT) CASE_HRESULT(STG_E_READFAULT) CASE_HRESULT(STG_E_SHAREVIOLATION) CASE_HRESULT(STG_E_LOCKVIOLATION) CASE_HRESULT(STG_E_FILEALREADYEXISTS) CASE_HRESULT(STG_E_INVALIDPARAMETER) CASE_HRESULT(STG_E_MEDIUMFULL) CASE_HRESULT(STG_E_PROPSETMISMATCHED) CASE_HRESULT(STG_E_ABNORMALAPIEXIT) CASE_HRESULT(STG_E_INVALIDHEADER) CASE_HRESULT(STG_E_INVALIDNAME) CASE_HRESULT(STG_E_UNKNOWN) CASE_HRESULT(STG_E_UNIMPLEMENTEDFUNCTION) CASE_HRESULT(STG_E_INVALIDFLAG) CASE_HRESULT(STG_E_INUSE) CASE_HRESULT(STG_E_NOTCURRENT) CASE_HRESULT(STG_E_REVERTED) CASE_HRESULT(STG_E_CANTSAVE) CASE_HRESULT(STG_E_OLDFORMAT) CASE_HRESULT(STG_E_OLDDLL) CASE_HRESULT(STG_E_SHAREREQUIRED) CASE_HRESULT(STG_E_NOTFILEBASEDSTORAGE) CASE_HRESULT(STG_E_EXTANTMARSHALLINGS) CASE_HRESULT(STG_E_DOCFILECORRUPT) CASE_HRESULT(STG_E_BADBASEADDRESS) CASE_HRESULT(STG_E_INCOMPLETE) CASE_HRESULT(STG_E_TERMINATED) CASE_HRESULT(STG_S_CONVERTED) CASE_HRESULT(STG_S_BLOCK) CASE_HRESULT(STG_S_RETRYNOW) CASE_HRESULT(STG_S_MONITORING) CASE_HRESULT(RPC_E_CALL_REJECTED) CASE_HRESULT(RPC_E_CALL_CANCELED) CASE_HRESULT(RPC_E_CANTPOST_INSENDCALL) CASE_HRESULT(RPC_E_CANTCALLOUT_INASYNCCALL) CASE_HRESULT(RPC_E_CANTCALLOUT_INEXTERNALCALL) CASE_HRESULT(RPC_E_CONNECTION_TERMINATED) CASE_HRESULT(RPC_E_SERVER_DIED) CASE_HRESULT(RPC_E_CLIENT_DIED) CASE_HRESULT(RPC_E_INVALID_DATAPACKET) CASE_HRESULT(RPC_E_CANTTRANSMIT_CALL) CASE_HRESULT(RPC_E_CLIENT_CANTMARSHAL_DATA) CASE_HRESULT(RPC_E_CLIENT_CANTUNMARSHAL_DATA) CASE_HRESULT(RPC_E_SERVER_CANTMARSHAL_DATA) CASE_HRESULT(RPC_E_SERVER_CANTUNMARSHAL_DATA) CASE_HRESULT(RPC_E_INVALID_DATA) CASE_HRESULT(RPC_E_INVALID_PARAMETER) CASE_HRESULT(RPC_E_CANTCALLOUT_AGAIN) CASE_HRESULT(RPC_E_SERVER_DIED_DNE) CASE_HRESULT(RPC_E_SYS_CALL_FAILED) CASE_HRESULT(RPC_E_OUT_OF_RESOURCES) CASE_HRESULT(RPC_E_ATTEMPTED_MULTITHREAD) CASE_HRESULT(RPC_E_NOT_REGISTERED) CASE_HRESULT(RPC_E_FAULT) CASE_HRESULT(RPC_E_SERVERFAULT) CASE_HRESULT(RPC_E_CHANGED_MODE) CASE_HRESULT(RPC_E_INVALIDMETHOD) CASE_HRESULT(RPC_E_DISCONNECTED) CASE_HRESULT(RPC_E_RETRY) CASE_HRESULT(RPC_E_SERVERCALL_RETRYLATER) CASE_HRESULT(RPC_E_SERVERCALL_REJECTED) CASE_HRESULT(RPC_E_INVALID_CALLDATA) CASE_HRESULT(RPC_E_CANTCALLOUT_ININPUTSYNCCALL) CASE_HRESULT(RPC_E_WRONG_THREAD) CASE_HRESULT(RPC_E_THREAD_NOT_INIT) CASE_HRESULT(RPC_E_VERSION_MISMATCH) CASE_HRESULT(RPC_E_INVALID_HEADER) CASE_HRESULT(RPC_E_INVALID_EXTENSION) CASE_HRESULT(RPC_E_INVALID_IPID) CASE_HRESULT(RPC_E_INVALID_OBJECT) CASE_HRESULT(RPC_S_CALLPENDING) CASE_HRESULT(RPC_S_WAITONTIMER) CASE_HRESULT(RPC_E_CALL_COMPLETE) CASE_HRESULT(RPC_E_UNSECURE_CALL) CASE_HRESULT(RPC_E_TOO_LATE) CASE_HRESULT(RPC_E_NO_GOOD_SECURITY_PACKAGES) CASE_HRESULT(RPC_E_ACCESS_DENIED) CASE_HRESULT(RPC_E_REMOTE_DISABLED) CASE_HRESULT(RPC_E_INVALID_OBJREF) CASE_HRESULT(RPC_E_UNEXPECTED) CASE_HRESULT(NTE_BAD_UID) CASE_HRESULT(NTE_BAD_HASH) CASE_HRESULT(NTE_BAD_KEY) CASE_HRESULT(NTE_BAD_LEN) CASE_HRESULT(NTE_BAD_DATA) CASE_HRESULT(NTE_BAD_SIGNATURE) CASE_HRESULT(NTE_BAD_VER) CASE_HRESULT(NTE_BAD_ALGID) CASE_HRESULT(NTE_BAD_FLAGS) CASE_HRESULT(NTE_BAD_TYPE) CASE_HRESULT(NTE_BAD_KEY_STATE) CASE_HRESULT(NTE_BAD_HASH_STATE) CASE_HRESULT(NTE_NO_KEY) CASE_HRESULT(NTE_NO_MEMORY) CASE_HRESULT(NTE_EXISTS) CASE_HRESULT(NTE_PERM) CASE_HRESULT(NTE_NOT_FOUND) CASE_HRESULT(NTE_DOUBLE_ENCRYPT) CASE_HRESULT(NTE_BAD_PROVIDER) CASE_HRESULT(NTE_BAD_PROV_TYPE) CASE_HRESULT(NTE_BAD_PUBLIC_KEY) CASE_HRESULT(NTE_BAD_KEYSET) CASE_HRESULT(NTE_PROV_TYPE_NOT_DEF) CASE_HRESULT(NTE_PROV_TYPE_ENTRY_BAD) CASE_HRESULT(NTE_KEYSET_NOT_DEF) CASE_HRESULT(NTE_KEYSET_ENTRY_BAD) CASE_HRESULT(NTE_PROV_TYPE_NO_MATCH) CASE_HRESULT(NTE_SIGNATURE_FILE_BAD) CASE_HRESULT(NTE_PROVIDER_DLL_FAIL) CASE_HRESULT(NTE_PROV_DLL_NOT_FOUND) CASE_HRESULT(NTE_BAD_KEYSET_PARAM) CASE_HRESULT(NTE_FAIL) CASE_HRESULT(NTE_SYS_ERR) CASE_HRESULT(TRUST_E_PROVIDER_UNKNOWN) CASE_HRESULT(TRUST_E_ACTION_UNKNOWN) CASE_HRESULT(TRUST_E_SUBJECT_FORM_UNKNOWN) CASE_HRESULT(TRUST_E_SUBJECT_NOT_TRUSTED) CASE_HRESULT(DIGSIG_E_ENCODE) CASE_HRESULT(DIGSIG_E_DECODE) CASE_HRESULT(DIGSIG_E_EXTENSIBILITY) CASE_HRESULT(DIGSIG_E_CRYPTO) CASE_HRESULT(PERSIST_E_SIZEDEFINITE) CASE_HRESULT(PERSIST_E_SIZEINDEFINITE) CASE_HRESULT(PERSIST_E_NOTSELFSIZING) CASE_HRESULT(TRUST_E_NOSIGNATURE) CASE_HRESULT(CERT_E_EXPIRED) // CASE_HRESULT(CERT_E_VALIDITYPERIODNESTING) CASE_HRESULT(CERT_E_ROLE) CASE_HRESULT(CERT_E_PATHLENCONST) CASE_HRESULT(CERT_E_CRITICAL) CASE_HRESULT(CERT_E_PURPOSE) CASE_HRESULT(CERT_E_ISSUERCHAINING) CASE_HRESULT(CERT_E_MALFORMED) CASE_HRESULT(CERT_E_UNTRUSTEDROOT) CASE_HRESULT(CERT_E_CHAINING) // OLE controls CASE_HRESULT(CTL_E_ILLEGALFUNCTIONCALL) CASE_HRESULT(CTL_E_OVERFLOW) CASE_HRESULT(CTL_E_OUTOFMEMORY) CASE_HRESULT(CTL_E_DIVISIONBYZERO) CASE_HRESULT(CTL_E_OUTOFSTRINGSPACE) CASE_HRESULT(CTL_E_OUTOFSTACKSPACE) CASE_HRESULT(CTL_E_BADFILENAMEORNUMBER) CASE_HRESULT(CTL_E_FILENOTFOUND) CASE_HRESULT(CTL_E_BADFILEMODE) CASE_HRESULT(CTL_E_FILEALREADYOPEN) CASE_HRESULT(CTL_E_DEVICEIOERROR) CASE_HRESULT(CTL_E_FILEALREADYEXISTS) CASE_HRESULT(CTL_E_BADRECORDLENGTH) CASE_HRESULT(CTL_E_DISKFULL) CASE_HRESULT(CTL_E_BADRECORDNUMBER) CASE_HRESULT(CTL_E_BADFILENAME) CASE_HRESULT(CTL_E_TOOMANYFILES) CASE_HRESULT(CTL_E_DEVICEUNAVAILABLE) CASE_HRESULT(CTL_E_PERMISSIONDENIED) CASE_HRESULT(CTL_E_DISKNOTREADY) CASE_HRESULT(CTL_E_PATHFILEACCESSERROR) CASE_HRESULT(CTL_E_PATHNOTFOUND) CASE_HRESULT(CTL_E_INVALIDPATTERNSTRING) CASE_HRESULT(CTL_E_INVALIDUSEOFNULL) CASE_HRESULT(CTL_E_INVALIDFILEFORMAT) CASE_HRESULT(CTL_E_INVALIDPROPERTYVALUE) CASE_HRESULT(CTL_E_INVALIDPROPERTYARRAYINDEX) CASE_HRESULT(CTL_E_SETNOTSUPPORTEDATRUNTIME) CASE_HRESULT(CTL_E_SETNOTSUPPORTED) CASE_HRESULT(CTL_E_NEEDPROPERTYARRAYINDEX) CASE_HRESULT(CTL_E_SETNOTPERMITTED) CASE_HRESULT(CTL_E_GETNOTSUPPORTEDATRUNTIME) CASE_HRESULT(CTL_E_GETNOTSUPPORTED) CASE_HRESULT(CTL_E_PROPERTYNOTFOUND) CASE_HRESULT(CTL_E_INVALIDCLIPBOARDFORMAT) CASE_HRESULT(CTL_E_INVALIDPICTURE) CASE_HRESULT(CTL_E_PRINTERERROR) CASE_HRESULT(CTL_E_CANTSAVEFILETOTEMP) CASE_HRESULT(CTL_E_SEARCHTEXTNOTFOUND) CASE_HRESULT(CTL_E_REPLACEMENTSTOOLONG) CASE_HRESULT(CLASS_E_NOTLICENSED) default: // Check if the HRESULT has FACILITY_WIN32. If so, // extract the code and check against the codes in winerror.h if (HRESULT_FACILITY(hr) == FACILITY_WIN32) { switch (HRESULT_CODE(hr)) { CASE_CODE(ERROR_SUCCESS) CASE_CODE(ERROR_INVALID_FUNCTION) CASE_CODE(ERROR_FILE_NOT_FOUND) CASE_CODE(ERROR_PATH_NOT_FOUND) CASE_CODE(ERROR_TOO_MANY_OPEN_FILES) CASE_CODE(ERROR_ACCESS_DENIED) CASE_CODE(ERROR_INVALID_HANDLE) CASE_CODE(ERROR_ARENA_TRASHED) CASE_CODE(ERROR_NOT_ENOUGH_MEMORY) CASE_CODE(ERROR_INVALID_BLOCK) CASE_CODE(ERROR_BAD_ENVIRONMENT) CASE_CODE(ERROR_BAD_FORMAT) CASE_CODE(ERROR_INVALID_ACCESS) CASE_CODE(ERROR_INVALID_DATA) CASE_CODE(ERROR_OUTOFMEMORY) CASE_CODE(ERROR_INVALID_DRIVE) CASE_CODE(ERROR_CURRENT_DIRECTORY) CASE_CODE(ERROR_NOT_SAME_DEVICE) CASE_CODE(ERROR_NO_MORE_FILES) CASE_CODE(ERROR_WRITE_PROTECT) CASE_CODE(ERROR_BAD_UNIT) CASE_CODE(ERROR_NOT_READY) CASE_CODE(ERROR_BAD_COMMAND) CASE_CODE(ERROR_CRC) CASE_CODE(ERROR_BAD_LENGTH) CASE_CODE(ERROR_SEEK) CASE_CODE(ERROR_NOT_DOS_DISK) CASE_CODE(ERROR_SECTOR_NOT_FOUND) CASE_CODE(ERROR_OUT_OF_PAPER) CASE_CODE(ERROR_WRITE_FAULT) CASE_CODE(ERROR_READ_FAULT) CASE_CODE(ERROR_GEN_FAILURE) CASE_CODE(ERROR_SHARING_VIOLATION) CASE_CODE(ERROR_LOCK_VIOLATION) CASE_CODE(ERROR_WRONG_DISK) CASE_CODE(ERROR_SHARING_BUFFER_EXCEEDED) CASE_CODE(ERROR_HANDLE_EOF) CASE_CODE(ERROR_HANDLE_DISK_FULL) CASE_CODE(ERROR_NOT_SUPPORTED) CASE_CODE(ERROR_REM_NOT_LIST) CASE_CODE(ERROR_DUP_NAME) CASE_CODE(ERROR_BAD_NETPATH) CASE_CODE(ERROR_NETWORK_BUSY) CASE_CODE(ERROR_DEV_NOT_EXIST) CASE_CODE(ERROR_TOO_MANY_CMDS) CASE_CODE(ERROR_ADAP_HDW_ERR) CASE_CODE(ERROR_BAD_NET_RESP) CASE_CODE(ERROR_UNEXP_NET_ERR) CASE_CODE(ERROR_BAD_REM_ADAP) CASE_CODE(ERROR_PRINTQ_FULL) CASE_CODE(ERROR_NO_SPOOL_SPACE) CASE_CODE(ERROR_PRINT_CANCELLED) CASE_CODE(ERROR_NETNAME_DELETED) CASE_CODE(ERROR_NETWORK_ACCESS_DENIED) CASE_CODE(ERROR_BAD_DEV_TYPE) CASE_CODE(ERROR_BAD_NET_NAME) CASE_CODE(ERROR_TOO_MANY_NAMES) CASE_CODE(ERROR_TOO_MANY_SESS) CASE_CODE(ERROR_SHARING_PAUSED) CASE_CODE(ERROR_REQ_NOT_ACCEP) CASE_CODE(ERROR_REDIR_PAUSED) CASE_CODE(ERROR_FILE_EXISTS) CASE_CODE(ERROR_CANNOT_MAKE) CASE_CODE(ERROR_FAIL_I24) CASE_CODE(ERROR_OUT_OF_STRUCTURES) CASE_CODE(ERROR_ALREADY_ASSIGNED) CASE_CODE(ERROR_INVALID_PASSWORD) CASE_CODE(ERROR_INVALID_PARAMETER) CASE_CODE(ERROR_NET_WRITE_FAULT) CASE_CODE(ERROR_NO_PROC_SLOTS) CASE_CODE(ERROR_TOO_MANY_SEMAPHORES) CASE_CODE(ERROR_EXCL_SEM_ALREADY_OWNED) CASE_CODE(ERROR_SEM_IS_SET) CASE_CODE(ERROR_TOO_MANY_SEM_REQUESTS) CASE_CODE(ERROR_INVALID_AT_INTERRUPT_TIME) CASE_CODE(ERROR_SEM_OWNER_DIED) CASE_CODE(ERROR_SEM_USER_LIMIT) CASE_CODE(ERROR_DISK_CHANGE) CASE_CODE(ERROR_DRIVE_LOCKED) CASE_CODE(ERROR_BROKEN_PIPE) CASE_CODE(ERROR_OPEN_FAILED) CASE_CODE(ERROR_BUFFER_OVERFLOW) CASE_CODE(ERROR_DISK_FULL) CASE_CODE(ERROR_NO_MORE_SEARCH_HANDLES) CASE_CODE(ERROR_INVALID_TARGET_HANDLE) CASE_CODE(ERROR_INVALID_CATEGORY) CASE_CODE(ERROR_INVALID_VERIFY_SWITCH) CASE_CODE(ERROR_BAD_DRIVER_LEVEL) CASE_CODE(ERROR_CALL_NOT_IMPLEMENTED) CASE_CODE(ERROR_SEM_TIMEOUT) CASE_CODE(ERROR_INSUFFICIENT_BUFFER) CASE_CODE(ERROR_INVALID_NAME) CASE_CODE(ERROR_INVALID_LEVEL) CASE_CODE(ERROR_NO_VOLUME_LABEL) CASE_CODE(ERROR_MOD_NOT_FOUND) CASE_CODE(ERROR_PROC_NOT_FOUND) CASE_CODE(ERROR_WAIT_NO_CHILDREN) CASE_CODE(ERROR_CHILD_NOT_COMPLETE) CASE_CODE(ERROR_DIRECT_ACCESS_HANDLE) CASE_CODE(ERROR_NEGATIVE_SEEK) CASE_CODE(ERROR_SEEK_ON_DEVICE) CASE_CODE(ERROR_IS_JOIN_TARGET) CASE_CODE(ERROR_IS_JOINED) CASE_CODE(ERROR_IS_SUBSTED) CASE_CODE(ERROR_NOT_JOINED) CASE_CODE(ERROR_NOT_SUBSTED) CASE_CODE(ERROR_JOIN_TO_JOIN) CASE_CODE(ERROR_SUBST_TO_SUBST) CASE_CODE(ERROR_JOIN_TO_SUBST) CASE_CODE(ERROR_SUBST_TO_JOIN) CASE_CODE(ERROR_BUSY_DRIVE) CASE_CODE(ERROR_SAME_DRIVE) CASE_CODE(ERROR_DIR_NOT_ROOT) CASE_CODE(ERROR_DIR_NOT_EMPTY) CASE_CODE(ERROR_IS_SUBST_PATH) CASE_CODE(ERROR_IS_JOIN_PATH) CASE_CODE(ERROR_PATH_BUSY) CASE_CODE(ERROR_IS_SUBST_TARGET) CASE_CODE(ERROR_SYSTEM_TRACE) CASE_CODE(ERROR_INVALID_EVENT_COUNT) CASE_CODE(ERROR_TOO_MANY_MUXWAITERS) CASE_CODE(ERROR_INVALID_LIST_FORMAT) CASE_CODE(ERROR_LABEL_TOO_LONG) CASE_CODE(ERROR_TOO_MANY_TCBS) CASE_CODE(ERROR_SIGNAL_REFUSED) CASE_CODE(ERROR_DISCARDED) CASE_CODE(ERROR_NOT_LOCKED) CASE_CODE(ERROR_BAD_THREADID_ADDR) CASE_CODE(ERROR_BAD_ARGUMENTS) CASE_CODE(ERROR_BAD_PATHNAME) CASE_CODE(ERROR_SIGNAL_PENDING) CASE_CODE(ERROR_MAX_THRDS_REACHED) CASE_CODE(ERROR_LOCK_FAILED) CASE_CODE(ERROR_BUSY) CASE_CODE(ERROR_CANCEL_VIOLATION) CASE_CODE(ERROR_ATOMIC_LOCKS_NOT_SUPPORTED) CASE_CODE(ERROR_INVALID_SEGMENT_NUMBER) CASE_CODE(ERROR_INVALID_ORDINAL) CASE_CODE(ERROR_ALREADY_EXISTS) CASE_CODE(ERROR_INVALID_FLAG_NUMBER) CASE_CODE(ERROR_SEM_NOT_FOUND) CASE_CODE(ERROR_INVALID_STARTING_CODESEG) CASE_CODE(ERROR_INVALID_STACKSEG) CASE_CODE(ERROR_INVALID_MODULETYPE) CASE_CODE(ERROR_INVALID_EXE_SIGNATURE) CASE_CODE(ERROR_EXE_MARKED_INVALID) CASE_CODE(ERROR_BAD_EXE_FORMAT) CASE_CODE(ERROR_ITERATED_DATA_EXCEEDS_64k) CASE_CODE(ERROR_INVALID_MINALLOCSIZE) CASE_CODE(ERROR_DYNLINK_FROM_INVALID_RING) CASE_CODE(ERROR_IOPL_NOT_ENABLED) CASE_CODE(ERROR_INVALID_SEGDPL) CASE_CODE(ERROR_AUTODATASEG_EXCEEDS_64k) CASE_CODE(ERROR_RING2SEG_MUST_BE_MOVABLE) CASE_CODE(ERROR_RELOC_CHAIN_XEEDS_SEGLIM) CASE_CODE(ERROR_INFLOOP_IN_RELOC_CHAIN) CASE_CODE(ERROR_ENVVAR_NOT_FOUND) CASE_CODE(ERROR_NO_SIGNAL_SENT) CASE_CODE(ERROR_FILENAME_EXCED_RANGE) CASE_CODE(ERROR_RING2_STACK_IN_USE) CASE_CODE(ERROR_META_EXPANSION_TOO_LONG) CASE_CODE(ERROR_INVALID_SIGNAL_NUMBER) CASE_CODE(ERROR_THREAD_1_INACTIVE) CASE_CODE(ERROR_LOCKED) CASE_CODE(ERROR_TOO_MANY_MODULES) CASE_CODE(ERROR_NESTING_NOT_ALLOWED) CASE_CODE(ERROR_EXE_MACHINE_TYPE_MISMATCH) CASE_CODE(ERROR_BAD_PIPE) CASE_CODE(ERROR_PIPE_BUSY) CASE_CODE(ERROR_NO_DATA) CASE_CODE(ERROR_PIPE_NOT_CONNECTED) CASE_CODE(ERROR_MORE_DATA) CASE_CODE(ERROR_VC_DISCONNECTED) CASE_CODE(ERROR_INVALID_EA_NAME) CASE_CODE(ERROR_EA_LIST_INCONSISTENT) CASE_CODE(ERROR_NO_MORE_ITEMS) CASE_CODE(ERROR_CANNOT_COPY) CASE_CODE(ERROR_DIRECTORY) CASE_CODE(ERROR_EAS_DIDNT_FIT) CASE_CODE(ERROR_EA_FILE_CORRUPT) CASE_CODE(ERROR_EA_TABLE_FULL) CASE_CODE(ERROR_INVALID_EA_HANDLE) CASE_CODE(ERROR_EAS_NOT_SUPPORTED) CASE_CODE(ERROR_NOT_OWNER) CASE_CODE(ERROR_TOO_MANY_POSTS) CASE_CODE(ERROR_PARTIAL_COPY) CASE_CODE(ERROR_MR_MID_NOT_FOUND) CASE_CODE(ERROR_INVALID_ADDRESS) CASE_CODE(ERROR_ARITHMETIC_OVERFLOW) CASE_CODE(ERROR_PIPE_CONNECTED) CASE_CODE(ERROR_PIPE_LISTENING) CASE_CODE(ERROR_EA_ACCESS_DENIED) CASE_CODE(ERROR_OPERATION_ABORTED) CASE_CODE(ERROR_IO_INCOMPLETE) CASE_CODE(ERROR_IO_PENDING) CASE_CODE(ERROR_NOACCESS) CASE_CODE(ERROR_SWAPERROR) CASE_CODE(ERROR_STACK_OVERFLOW) CASE_CODE(ERROR_INVALID_MESSAGE) CASE_CODE(ERROR_CAN_NOT_COMPLETE) CASE_CODE(ERROR_INVALID_FLAGS) CASE_CODE(ERROR_UNRECOGNIZED_VOLUME) CASE_CODE(ERROR_FILE_INVALID) CASE_CODE(ERROR_FULLSCREEN_MODE) CASE_CODE(ERROR_NO_TOKEN) CASE_CODE(ERROR_BADDB) CASE_CODE(ERROR_BADKEY) CASE_CODE(ERROR_CANTOPEN) CASE_CODE(ERROR_CANTREAD) CASE_CODE(ERROR_CANTWRITE) CASE_CODE(ERROR_REGISTRY_RECOVERED) CASE_CODE(ERROR_REGISTRY_CORRUPT) CASE_CODE(ERROR_REGISTRY_IO_FAILED) CASE_CODE(ERROR_NOT_REGISTRY_FILE) CASE_CODE(ERROR_KEY_DELETED) CASE_CODE(ERROR_NO_LOG_SPACE) CASE_CODE(ERROR_KEY_HAS_CHILDREN) CASE_CODE(ERROR_CHILD_MUST_BE_VOLATILE) CASE_CODE(ERROR_NOTIFY_ENUM_DIR) CASE_CODE(ERROR_DEPENDENT_SERVICES_RUNNING) CASE_CODE(ERROR_INVALID_SERVICE_CONTROL) CASE_CODE(ERROR_SERVICE_REQUEST_TIMEOUT) CASE_CODE(ERROR_SERVICE_NO_THREAD) CASE_CODE(ERROR_SERVICE_DATABASE_LOCKED) CASE_CODE(ERROR_SERVICE_ALREADY_RUNNING) CASE_CODE(ERROR_INVALID_SERVICE_ACCOUNT) CASE_CODE(ERROR_SERVICE_DISABLED) CASE_CODE(ERROR_CIRCULAR_DEPENDENCY) CASE_CODE(ERROR_SERVICE_DOES_NOT_EXIST) CASE_CODE(ERROR_SERVICE_CANNOT_ACCEPT_CTRL) CASE_CODE(ERROR_SERVICE_NOT_ACTIVE) CASE_CODE(ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) CASE_CODE(ERROR_EXCEPTION_IN_SERVICE) CASE_CODE(ERROR_DATABASE_DOES_NOT_EXIST) CASE_CODE(ERROR_SERVICE_SPECIFIC_ERROR) CASE_CODE(ERROR_PROCESS_ABORTED) CASE_CODE(ERROR_SERVICE_DEPENDENCY_FAIL) CASE_CODE(ERROR_SERVICE_LOGON_FAILED) CASE_CODE(ERROR_SERVICE_START_HANG) CASE_CODE(ERROR_INVALID_SERVICE_LOCK) CASE_CODE(ERROR_SERVICE_MARKED_FOR_DELETE) CASE_CODE(ERROR_SERVICE_EXISTS) CASE_CODE(ERROR_ALREADY_RUNNING_LKG) CASE_CODE(ERROR_SERVICE_DEPENDENCY_DELETED) CASE_CODE(ERROR_BOOT_ALREADY_ACCEPTED) CASE_CODE(ERROR_SERVICE_NEVER_STARTED) CASE_CODE(ERROR_DUPLICATE_SERVICE_NAME) CASE_CODE(ERROR_DIFFERENT_SERVICE_ACCOUNT) CASE_CODE(ERROR_END_OF_MEDIA) CASE_CODE(ERROR_FILEMARK_DETECTED) CASE_CODE(ERROR_BEGINNING_OF_MEDIA) CASE_CODE(ERROR_SETMARK_DETECTED) CASE_CODE(ERROR_NO_DATA_DETECTED) CASE_CODE(ERROR_PARTITION_FAILURE) CASE_CODE(ERROR_INVALID_BLOCK_LENGTH) CASE_CODE(ERROR_DEVICE_NOT_PARTITIONED) CASE_CODE(ERROR_UNABLE_TO_LOCK_MEDIA) CASE_CODE(ERROR_UNABLE_TO_UNLOAD_MEDIA) CASE_CODE(ERROR_MEDIA_CHANGED) CASE_CODE(ERROR_BUS_RESET) CASE_CODE(ERROR_NO_MEDIA_IN_DRIVE) CASE_CODE(ERROR_NO_UNICODE_TRANSLATION) CASE_CODE(ERROR_DLL_INIT_FAILED) CASE_CODE(ERROR_SHUTDOWN_IN_PROGRESS) CASE_CODE(ERROR_NO_SHUTDOWN_IN_PROGRESS) CASE_CODE(ERROR_IO_DEVICE) CASE_CODE(ERROR_SERIAL_NO_DEVICE) CASE_CODE(ERROR_IRQ_BUSY) CASE_CODE(ERROR_MORE_WRITES) CASE_CODE(ERROR_COUNTER_TIMEOUT) CASE_CODE(ERROR_FLOPPY_ID_MARK_NOT_FOUND) CASE_CODE(ERROR_FLOPPY_WRONG_CYLINDER) CASE_CODE(ERROR_FLOPPY_UNKNOWN_ERROR) CASE_CODE(ERROR_FLOPPY_BAD_REGISTERS) CASE_CODE(ERROR_DISK_RECALIBRATE_FAILED) CASE_CODE(ERROR_DISK_OPERATION_FAILED) CASE_CODE(ERROR_DISK_RESET_FAILED) CASE_CODE(ERROR_EOM_OVERFLOW) CASE_CODE(ERROR_NOT_ENOUGH_SERVER_MEMORY) CASE_CODE(ERROR_POSSIBLE_DEADLOCK) CASE_CODE(ERROR_MAPPED_ALIGNMENT) CASE_CODE(ERROR_SET_POWER_STATE_VETOED) CASE_CODE(ERROR_SET_POWER_STATE_FAILED) CASE_CODE(ERROR_TOO_MANY_LINKS) CASE_CODE(ERROR_OLD_WIN_VERSION) CASE_CODE(ERROR_APP_WRONG_OS) CASE_CODE(ERROR_SINGLE_INSTANCE_APP) CASE_CODE(ERROR_RMODE_APP) CASE_CODE(ERROR_INVALID_DLL) CASE_CODE(ERROR_NO_ASSOCIATION) CASE_CODE(ERROR_DDE_FAIL) CASE_CODE(ERROR_DLL_NOT_FOUND) CASE_CODE(ERROR_BAD_USERNAME) CASE_CODE(ERROR_NOT_CONNECTED) CASE_CODE(ERROR_OPEN_FILES) CASE_CODE(ERROR_ACTIVE_CONNECTIONS) CASE_CODE(ERROR_DEVICE_IN_USE) CASE_CODE(ERROR_BAD_DEVICE) CASE_CODE(ERROR_CONNECTION_UNAVAIL) CASE_CODE(ERROR_DEVICE_ALREADY_REMEMBERED) CASE_CODE(ERROR_NO_NET_OR_BAD_PATH) CASE_CODE(ERROR_BAD_PROVIDER) CASE_CODE(ERROR_CANNOT_OPEN_PROFILE) CASE_CODE(ERROR_BAD_PROFILE) CASE_CODE(ERROR_NOT_CONTAINER) CASE_CODE(ERROR_EXTENDED_ERROR) CASE_CODE(ERROR_INVALID_GROUPNAME) CASE_CODE(ERROR_INVALID_COMPUTERNAME) CASE_CODE(ERROR_INVALID_EVENTNAME) CASE_CODE(ERROR_INVALID_DOMAINNAME) CASE_CODE(ERROR_INVALID_SERVICENAME) CASE_CODE(ERROR_INVALID_NETNAME) CASE_CODE(ERROR_INVALID_SHARENAME) CASE_CODE(ERROR_INVALID_PASSWORDNAME) CASE_CODE(ERROR_INVALID_MESSAGENAME) CASE_CODE(ERROR_INVALID_MESSAGEDEST) CASE_CODE(ERROR_SESSION_CREDENTIAL_CONFLICT) CASE_CODE(ERROR_REMOTE_SESSION_LIMIT_EXCEEDED) CASE_CODE(ERROR_DUP_DOMAINNAME) CASE_CODE(ERROR_NO_NETWORK) CASE_CODE(ERROR_CANCELLED) CASE_CODE(ERROR_USER_MAPPED_FILE) CASE_CODE(ERROR_CONNECTION_REFUSED) CASE_CODE(ERROR_GRACEFUL_DISCONNECT) CASE_CODE(ERROR_ADDRESS_ALREADY_ASSOCIATED) CASE_CODE(ERROR_ADDRESS_NOT_ASSOCIATED) CASE_CODE(ERROR_CONNECTION_INVALID) CASE_CODE(ERROR_CONNECTION_ACTIVE) CASE_CODE(ERROR_NETWORK_UNREACHABLE) CASE_CODE(ERROR_HOST_UNREACHABLE) CASE_CODE(ERROR_PROTOCOL_UNREACHABLE) CASE_CODE(ERROR_PORT_UNREACHABLE) CASE_CODE(ERROR_REQUEST_ABORTED) CASE_CODE(ERROR_CONNECTION_ABORTED) CASE_CODE(ERROR_RETRY) CASE_CODE(ERROR_CONNECTION_COUNT_LIMIT) CASE_CODE(ERROR_LOGIN_TIME_RESTRICTION) CASE_CODE(ERROR_LOGIN_WKSTA_RESTRICTION) CASE_CODE(ERROR_INCORRECT_ADDRESS) CASE_CODE(ERROR_ALREADY_REGISTERED) CASE_CODE(ERROR_SERVICE_NOT_FOUND) CASE_CODE(ERROR_NOT_AUTHENTICATED) CASE_CODE(ERROR_NOT_LOGGED_ON) CASE_CODE(ERROR_CONTINUE) CASE_CODE(ERROR_ALREADY_INITIALIZED) CASE_CODE(ERROR_NO_MORE_DEVICES) CASE_CODE(ERROR_NOT_ALL_ASSIGNED) CASE_CODE(ERROR_SOME_NOT_MAPPED) CASE_CODE(ERROR_NO_QUOTAS_FOR_ACCOUNT) CASE_CODE(ERROR_LOCAL_USER_SESSION_KEY) CASE_CODE(ERROR_NULL_LM_PASSWORD) CASE_CODE(ERROR_UNKNOWN_REVISION) CASE_CODE(ERROR_REVISION_MISMATCH) CASE_CODE(ERROR_INVALID_OWNER) CASE_CODE(ERROR_INVALID_PRIMARY_GROUP) CASE_CODE(ERROR_NO_IMPERSONATION_TOKEN) CASE_CODE(ERROR_CANT_DISABLE_MANDATORY) CASE_CODE(ERROR_NO_LOGON_SERVERS) CASE_CODE(ERROR_NO_SUCH_LOGON_SESSION) CASE_CODE(ERROR_NO_SUCH_PRIVILEGE) CASE_CODE(ERROR_PRIVILEGE_NOT_HELD) CASE_CODE(ERROR_INVALID_ACCOUNT_NAME) CASE_CODE(ERROR_USER_EXISTS) CASE_CODE(ERROR_NO_SUCH_USER) CASE_CODE(ERROR_GROUP_EXISTS) CASE_CODE(ERROR_NO_SUCH_GROUP) CASE_CODE(ERROR_MEMBER_IN_GROUP) CASE_CODE(ERROR_MEMBER_NOT_IN_GROUP) CASE_CODE(ERROR_LAST_ADMIN) CASE_CODE(ERROR_WRONG_PASSWORD) CASE_CODE(ERROR_ILL_FORMED_PASSWORD) CASE_CODE(ERROR_PASSWORD_RESTRICTION) CASE_CODE(ERROR_LOGON_FAILURE) CASE_CODE(ERROR_ACCOUNT_RESTRICTION) CASE_CODE(ERROR_INVALID_LOGON_HOURS) CASE_CODE(ERROR_INVALID_WORKSTATION) CASE_CODE(ERROR_PASSWORD_EXPIRED) CASE_CODE(ERROR_ACCOUNT_DISABLED) CASE_CODE(ERROR_NONE_MAPPED) CASE_CODE(ERROR_TOO_MANY_LUIDS_REQUESTED) CASE_CODE(ERROR_LUIDS_EXHAUSTED) CASE_CODE(ERROR_INVALID_SUB_AUTHORITY) CASE_CODE(ERROR_INVALID_ACL) CASE_CODE(ERROR_INVALID_SID) CASE_CODE(ERROR_INVALID_SECURITY_DESCR) CASE_CODE(ERROR_BAD_INHERITANCE_ACL) CASE_CODE(ERROR_SERVER_DISABLED) CASE_CODE(ERROR_SERVER_NOT_DISABLED) CASE_CODE(ERROR_INVALID_ID_AUTHORITY) CASE_CODE(ERROR_ALLOTTED_SPACE_EXCEEDED) CASE_CODE(ERROR_INVALID_GROUP_ATTRIBUTES) CASE_CODE(ERROR_BAD_IMPERSONATION_LEVEL) CASE_CODE(ERROR_CANT_OPEN_ANONYMOUS) CASE_CODE(ERROR_BAD_VALIDATION_CLASS) CASE_CODE(ERROR_BAD_TOKEN_TYPE) CASE_CODE(ERROR_NO_SECURITY_ON_OBJECT) CASE_CODE(ERROR_CANT_ACCESS_DOMAIN_INFO) CASE_CODE(ERROR_INVALID_SERVER_STATE) CASE_CODE(ERROR_INVALID_DOMAIN_STATE) CASE_CODE(ERROR_INVALID_DOMAIN_ROLE) CASE_CODE(ERROR_NO_SUCH_DOMAIN) CASE_CODE(ERROR_DOMAIN_EXISTS) CASE_CODE(ERROR_DOMAIN_LIMIT_EXCEEDED) CASE_CODE(ERROR_INTERNAL_DB_CORRUPTION) CASE_CODE(ERROR_INTERNAL_ERROR) CASE_CODE(ERROR_GENERIC_NOT_MAPPED) CASE_CODE(ERROR_BAD_DESCRIPTOR_FORMAT) CASE_CODE(ERROR_NOT_LOGON_PROCESS) CASE_CODE(ERROR_LOGON_SESSION_EXISTS) CASE_CODE(ERROR_NO_SUCH_PACKAGE) CASE_CODE(ERROR_BAD_LOGON_SESSION_STATE) CASE_CODE(ERROR_LOGON_SESSION_COLLISION) CASE_CODE(ERROR_INVALID_LOGON_TYPE) CASE_CODE(ERROR_CANNOT_IMPERSONATE) CASE_CODE(ERROR_RXACT_INVALID_STATE) CASE_CODE(ERROR_RXACT_COMMIT_FAILURE) CASE_CODE(ERROR_SPECIAL_ACCOUNT) CASE_CODE(ERROR_SPECIAL_GROUP) CASE_CODE(ERROR_SPECIAL_USER) CASE_CODE(ERROR_MEMBERS_PRIMARY_GROUP) CASE_CODE(ERROR_TOKEN_ALREADY_IN_USE) CASE_CODE(ERROR_NO_SUCH_ALIAS) CASE_CODE(ERROR_MEMBER_NOT_IN_ALIAS) CASE_CODE(ERROR_MEMBER_IN_ALIAS) CASE_CODE(ERROR_ALIAS_EXISTS) CASE_CODE(ERROR_LOGON_NOT_GRANTED) CASE_CODE(ERROR_TOO_MANY_SECRETS) CASE_CODE(ERROR_SECRET_TOO_LONG) CASE_CODE(ERROR_INTERNAL_DB_ERROR) CASE_CODE(ERROR_TOO_MANY_CONTEXT_IDS) CASE_CODE(ERROR_LOGON_TYPE_NOT_GRANTED) CASE_CODE(ERROR_NT_CROSS_ENCRYPTION_REQUIRED) CASE_CODE(ERROR_NO_SUCH_MEMBER) CASE_CODE(ERROR_INVALID_MEMBER) CASE_CODE(ERROR_TOO_MANY_SIDS) CASE_CODE(ERROR_LM_CROSS_ENCRYPTION_REQUIRED) CASE_CODE(ERROR_NO_INHERITANCE) CASE_CODE(ERROR_FILE_CORRUPT) CASE_CODE(ERROR_DISK_CORRUPT) CASE_CODE(ERROR_NO_USER_SESSION_KEY) CASE_CODE(ERROR_LICENSE_QUOTA_EXCEEDED) CASE_CODE(ERROR_INVALID_WINDOW_HANDLE) CASE_CODE(ERROR_INVALID_MENU_HANDLE) CASE_CODE(ERROR_INVALID_CURSOR_HANDLE) CASE_CODE(ERROR_INVALID_ACCEL_HANDLE) CASE_CODE(ERROR_INVALID_HOOK_HANDLE) CASE_CODE(ERROR_INVALID_DWP_HANDLE) CASE_CODE(ERROR_TLW_WITH_WSCHILD) CASE_CODE(ERROR_CANNOT_FIND_WND_CLASS) CASE_CODE(ERROR_WINDOW_OF_OTHER_THREAD) CASE_CODE(ERROR_HOTKEY_ALREADY_REGISTERED) CASE_CODE(ERROR_CLASS_ALREADY_EXISTS) CASE_CODE(ERROR_CLASS_DOES_NOT_EXIST) CASE_CODE(ERROR_CLASS_HAS_WINDOWS) CASE_CODE(ERROR_INVALID_INDEX) CASE_CODE(ERROR_INVALID_ICON_HANDLE) CASE_CODE(ERROR_PRIVATE_DIALOG_INDEX) CASE_CODE(ERROR_LISTBOX_ID_NOT_FOUND) CASE_CODE(ERROR_NO_WILDCARD_CHARACTERS) CASE_CODE(ERROR_CLIPBOARD_NOT_OPEN) CASE_CODE(ERROR_HOTKEY_NOT_REGISTERED) CASE_CODE(ERROR_WINDOW_NOT_DIALOG) CASE_CODE(ERROR_CONTROL_ID_NOT_FOUND) CASE_CODE(ERROR_INVALID_COMBOBOX_MESSAGE) CASE_CODE(ERROR_WINDOW_NOT_COMBOBOX) CASE_CODE(ERROR_INVALID_EDIT_HEIGHT) CASE_CODE(ERROR_DC_NOT_FOUND) CASE_CODE(ERROR_INVALID_HOOK_FILTER) CASE_CODE(ERROR_INVALID_FILTER_PROC) CASE_CODE(ERROR_HOOK_NEEDS_HMOD) CASE_CODE(ERROR_GLOBAL_ONLY_HOOK) CASE_CODE(ERROR_JOURNAL_HOOK_SET) CASE_CODE(ERROR_HOOK_NOT_INSTALLED) CASE_CODE(ERROR_INVALID_LB_MESSAGE) CASE_CODE(ERROR_SETCOUNT_ON_BAD_LB) CASE_CODE(ERROR_LB_WITHOUT_TABSTOPS) CASE_CODE(ERROR_DESTROY_OBJECT_OF_OTHER_THREAD) CASE_CODE(ERROR_CHILD_WINDOW_MENU) CASE_CODE(ERROR_NO_SYSTEM_MENU) CASE_CODE(ERROR_INVALID_MSGBOX_STYLE) CASE_CODE(ERROR_INVALID_SPI_VALUE) CASE_CODE(ERROR_SCREEN_ALREADY_LOCKED) CASE_CODE(ERROR_HWNDS_HAVE_DIFF_PARENT) CASE_CODE(ERROR_NOT_CHILD_WINDOW) CASE_CODE(ERROR_INVALID_GW_COMMAND) CASE_CODE(ERROR_INVALID_THREAD_ID) CASE_CODE(ERROR_NON_MDICHILD_WINDOW) CASE_CODE(ERROR_POPUP_ALREADY_ACTIVE) CASE_CODE(ERROR_NO_SCROLLBARS) CASE_CODE(ERROR_INVALID_SCROLLBAR_RANGE) CASE_CODE(ERROR_INVALID_SHOWWIN_COMMAND) CASE_CODE(ERROR_NO_SYSTEM_RESOURCES) CASE_CODE(ERROR_NONPAGED_SYSTEM_RESOURCES) CASE_CODE(ERROR_PAGED_SYSTEM_RESOURCES) CASE_CODE(ERROR_WORKING_SET_QUOTA) CASE_CODE(ERROR_PAGEFILE_QUOTA) CASE_CODE(ERROR_COMMITMENT_LIMIT) CASE_CODE(ERROR_MENU_ITEM_NOT_FOUND) CASE_CODE(ERROR_INVALID_KEYBOARD_HANDLE) CASE_CODE(ERROR_HOOK_TYPE_NOT_ALLOWED) CASE_CODE(ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION) CASE_CODE(ERROR_EVENTLOG_FILE_CORRUPT) CASE_CODE(ERROR_EVENTLOG_CANT_START) CASE_CODE(ERROR_LOG_FILE_FULL) CASE_CODE(ERROR_EVENTLOG_FILE_CHANGED) CASE_CODE(RPC_S_INVALID_STRING_BINDING) CASE_CODE(RPC_S_WRONG_KIND_OF_BINDING) CASE_CODE(RPC_S_INVALID_BINDING) CASE_CODE(RPC_S_PROTSEQ_NOT_SUPPORTED) CASE_CODE(RPC_S_INVALID_RPC_PROTSEQ) CASE_CODE(RPC_S_INVALID_STRING_UUID) CASE_CODE(RPC_S_INVALID_ENDPOINT_FORMAT) CASE_CODE(RPC_S_INVALID_NET_ADDR) CASE_CODE(RPC_S_NO_ENDPOINT_FOUND) CASE_CODE(RPC_S_INVALID_TIMEOUT) CASE_CODE(RPC_S_OBJECT_NOT_FOUND) CASE_CODE(RPC_S_ALREADY_REGISTERED) CASE_CODE(RPC_S_TYPE_ALREADY_REGISTERED) CASE_CODE(RPC_S_ALREADY_LISTENING) CASE_CODE(RPC_S_NO_PROTSEQS_REGISTERED) CASE_CODE(RPC_S_NOT_LISTENING) CASE_CODE(RPC_S_UNKNOWN_MGR_TYPE) CASE_CODE(RPC_S_UNKNOWN_IF) CASE_CODE(RPC_S_NO_BINDINGS) CASE_CODE(RPC_S_NO_PROTSEQS) CASE_CODE(RPC_S_CANT_CREATE_ENDPOINT) CASE_CODE(RPC_S_OUT_OF_RESOURCES) CASE_CODE(RPC_S_SERVER_UNAVAILABLE) CASE_CODE(RPC_S_SERVER_TOO_BUSY) CASE_CODE(RPC_S_INVALID_NETWORK_OPTIONS) CASE_CODE(RPC_S_NO_CALL_ACTIVE) CASE_CODE(RPC_S_CALL_FAILED) CASE_CODE(RPC_S_CALL_FAILED_DNE) CASE_CODE(RPC_S_PROTOCOL_ERROR) CASE_CODE(RPC_S_UNSUPPORTED_TRANS_SYN) CASE_CODE(RPC_S_UNSUPPORTED_TYPE) CASE_CODE(RPC_S_INVALID_TAG) CASE_CODE(RPC_S_INVALID_BOUND) CASE_CODE(RPC_S_NO_ENTRY_NAME) CASE_CODE(RPC_S_INVALID_NAME_SYNTAX) CASE_CODE(RPC_S_UNSUPPORTED_NAME_SYNTAX) CASE_CODE(RPC_S_UUID_NO_ADDRESS) CASE_CODE(RPC_S_DUPLICATE_ENDPOINT) CASE_CODE(RPC_S_UNKNOWN_AUTHN_TYPE) CASE_CODE(RPC_S_MAX_CALLS_TOO_SMALL) CASE_CODE(RPC_S_STRING_TOO_LONG) CASE_CODE(RPC_S_PROTSEQ_NOT_FOUND) CASE_CODE(RPC_S_PROCNUM_OUT_OF_RANGE) CASE_CODE(RPC_S_BINDING_HAS_NO_AUTH) CASE_CODE(RPC_S_UNKNOWN_AUTHN_SERVICE) CASE_CODE(RPC_S_UNKNOWN_AUTHN_LEVEL) CASE_CODE(RPC_S_INVALID_AUTH_IDENTITY) CASE_CODE(RPC_S_UNKNOWN_AUTHZ_SERVICE) CASE_CODE(EPT_S_INVALID_ENTRY) CASE_CODE(EPT_S_CANT_PERFORM_OP) CASE_CODE(EPT_S_NOT_REGISTERED) CASE_CODE(RPC_S_NOTHING_TO_EXPORT) CASE_CODE(RPC_S_INCOMPLETE_NAME) CASE_CODE(RPC_S_INVALID_VERS_OPTION) CASE_CODE(RPC_S_NO_MORE_MEMBERS) CASE_CODE(RPC_S_NOT_ALL_OBJS_UNEXPORTED) CASE_CODE(RPC_S_INTERFACE_NOT_FOUND) CASE_CODE(RPC_S_ENTRY_ALREADY_EXISTS) CASE_CODE(RPC_S_ENTRY_NOT_FOUND) CASE_CODE(RPC_S_NAME_SERVICE_UNAVAILABLE) CASE_CODE(RPC_S_INVALID_NAF_ID) CASE_CODE(RPC_S_CANNOT_SUPPORT) CASE_CODE(RPC_S_NO_CONTEXT_AVAILABLE) CASE_CODE(RPC_S_INTERNAL_ERROR) CASE_CODE(RPC_S_ZERO_DIVIDE) CASE_CODE(RPC_S_ADDRESS_ERROR) CASE_CODE(RPC_S_FP_DIV_ZERO) CASE_CODE(RPC_S_FP_UNDERFLOW) CASE_CODE(RPC_S_FP_OVERFLOW) CASE_CODE(RPC_X_NO_MORE_ENTRIES) CASE_CODE(RPC_X_SS_CHAR_TRANS_OPEN_FAIL) CASE_CODE(RPC_X_SS_CHAR_TRANS_SHORT_FILE) CASE_CODE(RPC_X_SS_IN_NULL_CONTEXT) CASE_CODE(RPC_X_SS_CONTEXT_DAMAGED) CASE_CODE(RPC_X_SS_HANDLES_MISMATCH) CASE_CODE(RPC_X_SS_CANNOT_GET_CALL_HANDLE) CASE_CODE(RPC_X_NULL_REF_POINTER) CASE_CODE(RPC_X_ENUM_VALUE_OUT_OF_RANGE) CASE_CODE(RPC_X_BYTE_COUNT_TOO_SMALL) CASE_CODE(RPC_X_BAD_STUB_DATA) CASE_CODE(ERROR_INVALID_USER_BUFFER) CASE_CODE(ERROR_UNRECOGNIZED_MEDIA) CASE_CODE(ERROR_NO_TRUST_LSA_SECRET) CASE_CODE(ERROR_NO_TRUST_SAM_ACCOUNT) CASE_CODE(ERROR_TRUSTED_DOMAIN_FAILURE) CASE_CODE(ERROR_TRUSTED_RELATIONSHIP_FAILURE) CASE_CODE(ERROR_TRUST_FAILURE) CASE_CODE(RPC_S_CALL_IN_PROGRESS) CASE_CODE(ERROR_NETLOGON_NOT_STARTED) CASE_CODE(ERROR_ACCOUNT_EXPIRED) CASE_CODE(ERROR_REDIRECTOR_HAS_OPEN_HANDLES) CASE_CODE(ERROR_PRINTER_DRIVER_ALREADY_INSTALLED) CASE_CODE(ERROR_UNKNOWN_PORT) CASE_CODE(ERROR_UNKNOWN_PRINTER_DRIVER) CASE_CODE(ERROR_UNKNOWN_PRINTPROCESSOR) CASE_CODE(ERROR_INVALID_SEPARATOR_FILE) CASE_CODE(ERROR_INVALID_PRIORITY) CASE_CODE(ERROR_INVALID_PRINTER_NAME) CASE_CODE(ERROR_PRINTER_ALREADY_EXISTS) CASE_CODE(ERROR_INVALID_PRINTER_COMMAND) CASE_CODE(ERROR_INVALID_DATATYPE) CASE_CODE(ERROR_INVALID_ENVIRONMENT) CASE_CODE(RPC_S_NO_MORE_BINDINGS) CASE_CODE(ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT) CASE_CODE(ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT) CASE_CODE(ERROR_NOLOGON_SERVER_TRUST_ACCOUNT) CASE_CODE(ERROR_DOMAIN_TRUST_INCONSISTENT) CASE_CODE(ERROR_SERVER_HAS_OPEN_HANDLES) CASE_CODE(ERROR_RESOURCE_DATA_NOT_FOUND) CASE_CODE(ERROR_RESOURCE_TYPE_NOT_FOUND) CASE_CODE(ERROR_RESOURCE_NAME_NOT_FOUND) CASE_CODE(ERROR_RESOURCE_LANG_NOT_FOUND) CASE_CODE(ERROR_NOT_ENOUGH_QUOTA) CASE_CODE(RPC_S_NO_INTERFACES) CASE_CODE(RPC_S_CALL_CANCELLED) CASE_CODE(RPC_S_BINDING_INCOMPLETE) CASE_CODE(RPC_S_COMM_FAILURE) CASE_CODE(RPC_S_UNSUPPORTED_AUTHN_LEVEL) CASE_CODE(RPC_S_NO_PRINC_NAME) CASE_CODE(RPC_S_NOT_RPC_ERROR) CASE_CODE(RPC_S_UUID_LOCAL_ONLY) CASE_CODE(RPC_S_SEC_PKG_ERROR) CASE_CODE(RPC_S_NOT_CANCELLED) CASE_CODE(RPC_X_INVALID_ES_ACTION) CASE_CODE(RPC_X_WRONG_ES_VERSION) CASE_CODE(RPC_X_WRONG_STUB_VERSION) CASE_CODE(RPC_X_INVALID_PIPE_OBJECT) CASE_CODE(RPC_X_INVALID_PIPE_OPERATION) CASE_CODE(RPC_X_WRONG_PIPE_VERSION) CASE_CODE(RPC_S_GROUP_MEMBER_NOT_FOUND) CASE_CODE(EPT_S_CANT_CREATE) CASE_CODE(RPC_S_INVALID_OBJECT) CASE_CODE(ERROR_INVALID_TIME) CASE_CODE(ERROR_INVALID_FORM_NAME) CASE_CODE(ERROR_INVALID_FORM_SIZE) CASE_CODE(ERROR_ALREADY_WAITING) CASE_CODE(ERROR_PRINTER_DELETED) CASE_CODE(ERROR_INVALID_PRINTER_STATE) CASE_CODE(ERROR_PASSWORD_MUST_CHANGE) CASE_CODE(ERROR_DOMAIN_CONTROLLER_NOT_FOUND) CASE_CODE(ERROR_ACCOUNT_LOCKED_OUT) CASE_CODE(OR_INVALID_OXID) CASE_CODE(OR_INVALID_OID) CASE_CODE(OR_INVALID_SET) CASE_CODE(RPC_S_SEND_INCOMPLETE) CASE_CODE(ERROR_NO_BROWSER_SERVERS_FOUND) CASE_CODE(ERROR_INVALID_PIXEL_FORMAT) CASE_CODE(ERROR_BAD_DRIVER) CASE_CODE(ERROR_INVALID_WINDOW_STYLE) CASE_CODE(ERROR_METAFILE_NOT_SUPPORTED) CASE_CODE(ERROR_TRANSFORM_NOT_SUPPORTED) CASE_CODE(ERROR_CLIPPING_NOT_SUPPORTED) CASE_CODE(ERROR_UNKNOWN_PRINT_MONITOR) CASE_CODE(ERROR_PRINTER_DRIVER_IN_USE) CASE_CODE(ERROR_SPOOL_FILE_NOT_FOUND) CASE_CODE(ERROR_SPL_NO_STARTDOC) CASE_CODE(ERROR_SPL_NO_ADDJOB) CASE_CODE(ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED) CASE_CODE(ERROR_PRINT_MONITOR_ALREADY_INSTALLED) CASE_CODE(ERROR_INVALID_PRINT_MONITOR) CASE_CODE(ERROR_PRINT_MONITOR_IN_USE) CASE_CODE(ERROR_PRINTER_HAS_JOBS_QUEUED) CASE_CODE(ERROR_SUCCESS_REBOOT_REQUIRED) CASE_CODE(ERROR_SUCCESS_RESTART_REQUIRED) CASE_CODE(ERROR_WINS_INTERNAL) CASE_CODE(ERROR_CAN_NOT_DEL_LOCAL_WINS) CASE_CODE(ERROR_STATIC_INIT) CASE_CODE(ERROR_INC_BACKUP) CASE_CODE(ERROR_FULL_BACKUP) CASE_CODE(ERROR_REC_NON_EXISTENT) CASE_CODE(ERROR_RPL_NOT_ALLOWED) default: _tcscpy(szErrorName, _T("")); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), szErrorDesc, sizeof(TCHAR)*_ERRORDESCLEN, NULL); } } // if FACILITY_WIN32 else if (HRESULT_FACILITY(hr) == FACILITY_CONTROL && HRESULT_CODE(hr) >= 600) { szErrorName[0] = _T('\0'); _tcscpy(szErrorDesc, _T("")); } else if (HRESULT_FACILITY(hr) == FACILITY_ITF && HRESULT_CODE(hr) >= 0x200) { szErrorName[0] = _T('\0'); _tcscpy(szErrorDesc, _T("")); } else { _tcscpy(szErrorName, _T("")); // Not FACILITY_WIN32 or FACILITY_ITF(code >= 0x200) or FACILTY_CONTROL(code >= 600) FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), szErrorDesc, sizeof(TCHAR)*_ERRORDESCLEN, NULL); } } _tcscpy(pszFacility,szFacility); _tcscpy(pszErrorName,szErrorName); _tcscpy(pszErrorDesc,szErrorDesc); } #pragma warning( default : 4245 ) inline void CConnectionManager::HandleConnMgrException(HRESULT hr) { TRACEX(_T("CConnectionManager::HandleConnMgrException\n")); TRACEARGn(hr); AfxMessageBox(IDS_STRING_CONNMGR_DEAD); } ////////////////////////////////////////////////////////////////////// // Marshalling Operations ////////////////////////////////////////////////////////////////////// // I support these only because we now need to use Property Pages in the // snap-in. Since property pages run in their own thread and the snap-in // architeture uses apartment threading model, ANY COM interface pointers // to be used within the property page thread must be marshalled...fortunately // I have only to marshal IConnectionManager. HRESULT CConnectionManager::MarshalCnxMgr() { TRACEX(_T("CConnectionManager::MarshalCnxMgr\n")); HRESULT hr = S_OK; // we are called from the snapin's main thread here in prep for marshalling CMarshalledConnection* pNewConnection = new CMarshalledConnection; hr = pNewConnection->Marshal(m_pIConnectionManager); if( !CHECKHRESULT(hr) ) { TRACE(_T("FAILED : CMarshalledConnection::Marshal failed.\n")); } m_MarshalStack.AddHead(pNewConnection); return hr; } HRESULT CConnectionManager::UnMarshalCnxMgr() { TRACEX(_T("CConnectionManager::UnMarshalCnxMgr\n")); HRESULT hr = S_OK; // unmarshal the connection now that we are in the new property page thread // v-marfin : bug 59643 // Check for empty list before proceeding. if (m_MarshalStack.IsEmpty()) { TRACE(_T("WARNING : Could not find a connection waiting on the stack!\n")); return E_FAIL; } CMarshalledConnection* pConnection = m_MarshalStack.RemoveTail(); ASSERT(pConnection); if( pConnection == NULL ) { TRACE(_T("FAILED : Could not find a connection waiting on the stack!\n")); return E_FAIL; } // now insert the marshalled connection into the map of thread ids to connections. // first check if a connection has already been marshalled before inserting // the connection into the map DWORD dwThreadID = GetCurrentThreadId(); CMarshalledConnection* pExistingConnection = NULL; if( m_MarshalMap.Lookup(dwThreadID,pExistingConnection) ) { ASSERT(pExistingConnection); // delete the connection we were going to add, because it has already been // marshalled for this thread id delete pConnection; return hr; } else { m_MarshalMap.SetAt(dwThreadID,pConnection); } // unmarshal the connection now hr = pConnection->UnMarshal(); if( !CHECKHRESULT(hr) ) { TRACE(_T("FAILED : CMarshalledConnection::UnMarshal failed.\n")); return E_FAIL; } return hr; } void CConnectionManager::CleanUpMarshalCnxMgr() { TRACEX(_T("CConnectionManager::CleanUpMarshalCnxMgr\n")); // we are called here by the dying thread of the property page which is about to be // destroyed. We must clean up by removing the marshalled connection from the map DWORD dwThreadID = GetCurrentThreadId(); CMarshalledConnection* pConnection = NULL; m_MarshalMap.Lookup(dwThreadID,pConnection); if( pConnection == NULL ) { TRACE(_T("FAILED : Could not find a connection for the calling thread!\n")); return; } if( ! m_MarshalMap.RemoveKey(dwThreadID) ) { TRACE(_T("FAILED : Could not remove the key from the marshal map.\n")); return; } delete pConnection; return; } ////////////////////////////////////////////////////////////////////// // Implementation Operations //////////////////////////////////////////////////////////////////////