📄 dbproviderbase.h
字号:
//---------------------------------------------------------------------------
#ifndef DBProviderBaseH
#define DBProviderBaseH
//---------------------------------------------------------------------------
#include "list.hpp"
#include "Rights.h"
enum SecOFCmd { ofcCheck, ofcInit, ofcGetSecDMod, ofcGetSecDModSmpDlg, ofcGetSecDModDlg, ofcDestruct, ofcValidate , ofcGetDBProvider, ofcDelDBProvider};
namespace Security {
class TSecurity;
class TSecDModBaseFrm;
class TSecDModSmpDlgBaseFrm;
class TSecDModDlgBaseFrm;
struct TSecObjData {
TSecurity *Security;
union {
struct {
const char *SecName;
const char *Alias;
const char *SecUser;
};
struct {
int UserID;
int GroupID;
};
TObject *Object;
char privkey[sizeof(PswdString)];
};
PswdString &Key() { return *(PswdString *)privkey; }
TSecObjData(TSecurity *co, const char *pSecName, const char *pAlias, const char *pSecUser):
Security(co)
{
SecName = pSecName, Alias = pAlias, SecUser = pSecUser;
}
TSecObjData(TSecurity *co, int pUserID, int pGroupID) :
Security(co)
{
UserID = pUserID;
GroupID = pGroupID;
}
TSecObjData(TSecurity *co, TObject *obj) :
Security(co)
{
Object = obj;
}
TSecObjData(TSecurity *co, const PswdString &key) :
Security(co)
{
Key() = key;
}
TSecObjData(TSecurity *co) :
Security(co)
{}
};
class DBProviderBase : public TObject {
private:
// static ilist<DBProviderBase> DBProviders;
static const char *DBEnginesNames[];
static const TClass DBEnginesClasses[];
static const int DBEnginesCount;
static PswdString AddrKey;
// static void * (*SecObjectFactory)(const char *dbeng, void *co, SecOFCmd cmd, TSecObjData *od);
HINSTANCE ChildProv;
word Counter;
void SetPath();
void *operator new(size_t, void *b) { return b; }
protected:
adptr<TStringList> Params;
void *Data;
DBProviderBase *DBProv;
TSecurity *Security;
AnsiString Path;
AnsiString GetParam(const char *name) const { return Params->Values[name]; }
bool GetBoolParam(const char *name) const { return GetParam(name) != "0"; }
int GetIntParam(const char *name) const { return StrToIntDef(GetParam(name), 0); }
static PswdString __fastcall (*EncodeWithDBProviderKey)(const PswdString &co);
static PswdString __fastcall (*DecodeWithDBProviderKey)(const PswdString &co);
public:
AnsiString Name;
virtual __fastcall DBProviderBase(const char *name);
__fastcall DBProviderBase(const char *name, bool useparams);
virtual __fastcall ~DBProviderBase() { if (ChildProv) FreeLibrary(ChildProv); }
virtual TSecDModBaseFrm * __fastcall GetSecDMod(TSecObjData *od) { return 0; }
virtual TSecDModSmpDlgBaseFrm * __fastcall GetSecDModSmpDlg(TSecObjData *od) { return 0; };
virtual TSecDModDlgBaseFrm * __fastcall GetSecDModDlg(TSecObjData *od) { return 0; };
virtual void __fastcall Destruct(TSecObjData *od);
virtual bool __fastcall Init(void *data) { Data = data; if (Params) Params->CommaText = (char *)data; return true; }
//-----------------
DBProviderBase *LoadDBProvider(const char *filename, const char *dbeng, void *data = 0);
void __fastcall UnloadDBProvider(DBProviderBase *);
virtual PswdString __fastcall Validate(const PswdString &co) { return (EncodeWithDBProviderKey)(co); }
static DBProviderBase * __stdcall Handle(const char *dbeng, SecOFCmd cmd, TSecObjData *od);
static bool CheckAddress(const PswdString &key) {
PswdString p = DecodeWithDBProviderKey(key);
return *(void **)(void *)p == Handle;
}
static bool CheckAddress() {
PswdString p = DecodeWithDBProviderKey(AddrKey);
return *(void **)(void *)p == Handle;
}
static inline void SetKeys( PswdString __fastcall (*enc)(const PswdString &co), PswdString __fastcall (*dec)(const PswdString &co)) {
EncodeWithDBProviderKey = enc;
DecodeWithDBProviderKey = dec;
}
};
typedef DBProviderBase * __stdcall (*TSecObjectFactory)(const char *dbengine, SecOFCmd cmd, TSecObjData *odata);
__fastcall DBProviderBase::DBProviderBase(const char *name)
: ChildProv(0), Counter(0), Name(name), Path(":")
{
Params = new TStringList();
}
__fastcall DBProviderBase::DBProviderBase(const char *name, bool useparams)
: ChildProv(0), Counter(0), Name(name), Path(":")
{
if (useparams) Params = new TStringList(); else Params = 0;
}
} //namespace Security
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -