windows-nt/Source/XPSP1/NT/enduser/troubleshoot/launcher/server/tsmapabstract.h
2020-09-26 16:20:57 +08:00

161 lines
5.8 KiB
C++

//
// MODULE: TSMapAbstract.h
//
// PURPOSE: Part of launching a Local Troubleshooter from an arbitrary NT5 application
// Data types and abstract classes for mapping from the application's way of naming
// a problem to the Troubleshooter's way.
// Implements the few concrete methods of abstract base class TSMapRuntimeAbstract.
//
// COMPANY: Saltmine Creative, Inc. (206)-633-4743 support@saltmine.com
//
// AUTHOR: Joe Mabel
//
// ORIGINAL DATE: 2-26-98
//
//
// Version Date By Comments
//--------------------------------------------------------------------
// V0.1 - JM Original
///////////////////////
#ifndef _TSMAPABSTRACT_
#define _TSMAPABSTRACT_ 1
typedef DWORD UID;
const UID uidNil = -1;
// Abstract Base Class providing a minimal set of mapping methods which will be available
// at runtime when launching a troubleshooter.
class TSMapRuntimeAbstract {
public:
TSMapRuntimeAbstract();
virtual ~TSMapRuntimeAbstract() = 0;
private:
// High level mappings to troubleshooting networks.
DWORD FromAppVerProbToTS (
const TCHAR * const szApp, const TCHAR * const szVer,
const TCHAR * const szProb,
TCHAR * const szTSBN, TCHAR * const szNode);
DWORD FromAppVerDevIDToTS (
const TCHAR * const szApp, const TCHAR * const szVer,
const TCHAR * const szDevID, const TCHAR * const szProb,
TCHAR * const szTSBN, TCHAR * const szNode);
DWORD FromAppVerDevClassGUIDToTS (
const TCHAR * const szApp, const TCHAR * const szVer,
const TCHAR * const szDevClassGUID, const TCHAR * const szProb,
TCHAR * const szTSBN, TCHAR * const szNode);
public:
DWORD FromAppVerDevAndClassToTS (
const TCHAR * const szApp, const TCHAR * const szVer,
const TCHAR * const szDevID, const TCHAR * const szDevClassGUID,
const TCHAR * const szProb,
TCHAR * const szTSBN, TCHAR * const szNode);
// current status
DWORD GetStatus() {return m_dwStatus;};
void ClearStatus() {m_dwStatus = 0;};
// other statuses reported back by FromAppVerDevAndClassToTS()
// Call this in a loop until it returns 0;
inline DWORD MoreStatus()
{
if (m_stkStatus.Empty())
return 0;
else
return (m_stkStatus.Pop());
}
protected:
// normally returns 0, but can theoretically return TSL_ERROR_OUT_OF_MEMORY
DWORD AddMoreStatus(DWORD dwStatus);
private:
bool DifferentMappingCouldWork(DWORD dwStatus);
protected:
// "Part 1": call these to set query. Notes here are for the benefit of implementor
// of inherited class. -------------------------
// Any non-zero return of ClearAll is a hard error, means this object cannot be used.
virtual DWORD ClearAll ();
// SetApp may return only
// 0 (OK)
// TSL_ERROR_UNKNOWN_APP.
// hard error specific to the implementation of the concrete class
virtual DWORD SetApp (const TCHAR * const szApp)= 0;
// SetVer may return only
// 0 (OK)
// TSM_STAT_NEED_APP_TO_SET_VER - must have successful call to SetApp before calling SetVer
// TSL_ERROR_UNKNOWN_VER
// hard error specific to the implementation of the concrete class
virtual DWORD SetVer (const TCHAR * const szVer)= 0;
// SetProb may return only
// 0 (OK)
// TSM_STAT_UID_NOT_FOUND. This is not necessarily bad, and results in setting
// problem to uidNil. Calling fn must know if that's acceptable.
// hard error specific to the implementation of the concrete class
virtual DWORD SetProb (const TCHAR * const szProb)= 0;
// SetDevID may return only
// 0 (OK)
// TSM_STAT_UID_NOT_FOUND. This is not necessarily bad, and results in setting
// (P&P) device to uidNil. Calling fn must know if that's acceptable.
// hard error specific to the implementation of the concrete class
virtual DWORD SetDevID (const TCHAR * const szDevID)= 0;
// SetDevClassGUID may return only
// 0 (OK)
// TSM_STAT_UID_NOT_FOUND. This is not necessarily bad, and results in setting
// device class to uidNil. Calling fn must know if that's acceptable.
// hard error specific to the implementation of the concrete class
virtual DWORD SetDevClassGUID (const TCHAR * const szDevClassGUID)= 0;
// "Part 2": Low level mappings to troubleshooting networks ------------
// FromProbToTS may return only
// 0 (OK)
// TSM_STAT_NEED_PROB_TO_SET_TS - Nil problem, so we can't do this mapping.
// TSL_ERROR_NO_NETWORK - Mapping failed
// hard error specific to the implementation of the concrete class
virtual DWORD FromProbToTS (TCHAR * const szTSBN, TCHAR * const szNode )= 0;
// FromDevToTS may return only
// 0 (OK)
// TSM_STAT_NEED_DEV_TO_SET_TS - Nil device, so we can't do this mapping.
// TSL_ERROR_NO_NETWORK - Mapping failed
// hard error specific to the implementation of the concrete class
virtual DWORD FromDevToTS (TCHAR * const szTSBN, TCHAR * const szNode )= 0;
// FromDevClassToTS may return only
// 0 (OK)
// TSM_STAT_NEED_DEVCLASS_TO_SET_TS - Nil device class, so we can't do this mapping.
// TSL_ERROR_NO_NETWORK - Mapping failed
// hard error specific to the implementation of the concrete class
virtual DWORD FromDevClassToTS (TCHAR * const szTSBN, TCHAR * const szNode )= 0;
// other functions -----------------------
// ApplyDefaultVer may return only
// 0 (OK)
// TSM_STAT_NEED_APP_TO_SET_VER - must have successful call to SetApp before calling
// ApplyDefaultVer
// TSM_STAT_NEED_VER_TO_SET_VER - must have successful call to SetVer before calling
// ApplyDefaultVer
// TSL_ERROR_UNKNOWN_VER - the version we are mapping _from_ is undefined. This
// would mean a real coding mess someplace.
// hard error specific to the implementation of the concrete class
virtual DWORD ApplyDefaultVer() = 0;
// HardMappingError returns true on errors considered "hard" by the concrete class.
virtual bool HardMappingError (DWORD dwStatus);
protected:
DWORD m_dwStatus;
RSStack<DWORD> m_stkStatus; // Status and Error codes that happened during mapping.
};
#endif // _TSMAPABSTRACT_