139 lines
3.2 KiB
C#
139 lines
3.2 KiB
C#
using CodeMeter;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace SanSystem
|
|
{
|
|
class Dongle: IDisposable
|
|
{
|
|
uint FirmCode;
|
|
uint ProductCode;
|
|
|
|
Api cmApi;
|
|
CmCredential cmCred;
|
|
CmAccess2 cmAcc;
|
|
HCMSysEntry hcmse;
|
|
CmBoxInfo cmBoxInfo;
|
|
CmBoxEntry2 BoxContent;
|
|
|
|
public Dongle(uint FirmCode, uint ProductCode)
|
|
{
|
|
#if !DEBUG
|
|
if (FirmCode == 103086)
|
|
this.FirmCode = FirmCode;
|
|
else
|
|
this.FirmCode = 103086;
|
|
#else
|
|
this.FirmCode = 10;
|
|
#endif
|
|
|
|
this.ProductCode = ProductCode;
|
|
cmApi = new Api();
|
|
cmCred = new CmCredential();
|
|
cmAcc = new CmAccess2();
|
|
|
|
cmAcc.Credential = cmCred;
|
|
|
|
cmAcc.Ctrl |= CmAccess.Option.UserLimit;
|
|
cmAcc.FirmCode = this.FirmCode;
|
|
cmAcc.ProductCode = this.ProductCode;
|
|
|
|
|
|
hcmse = cmApi.CmAccess2(CmAccessOption.Local, cmAcc);
|
|
if(hcmse == null)
|
|
{
|
|
ErrorCodes2 code = cmApi.CmGetLastErrorCode2();
|
|
string output = string.Format("{0}", code);
|
|
|
|
}
|
|
|
|
if (!CheckDongleVorhanden())
|
|
Trace.WriteLine("Dongle nicht vorhanden");
|
|
|
|
cmBoxInfo = new CmBoxInfo();
|
|
|
|
CmGetBoxContentsOption boxOptions = new CmGetBoxContentsOption();
|
|
boxOptions = CmGetBoxContentsOption.FirmItem;
|
|
|
|
CmBoxEntry2[] tmpBoxContent;
|
|
|
|
tmpBoxContent = cmApi.CmGetBoxContents2(hcmse, boxOptions, this.FirmCode, cmBoxInfo);
|
|
|
|
foreach (CmBoxEntry2 boxes in tmpBoxContent)
|
|
{
|
|
if (boxes.ProductCode == this.ProductCode)
|
|
{
|
|
this.BoxContent = boxes;
|
|
}
|
|
}
|
|
}
|
|
~Dongle()
|
|
{
|
|
CleanDongle();
|
|
}
|
|
|
|
public void CleanDongle()
|
|
{
|
|
cmApi.CmRelease(hcmse);
|
|
}
|
|
|
|
public bool CheckDongleVorhanden()
|
|
{
|
|
|
|
if (hcmse == null)
|
|
return false;
|
|
else
|
|
return true;
|
|
}
|
|
|
|
public string GetDongleSerial()
|
|
{
|
|
|
|
CmBoxInfo res = (CmBoxInfo)cmApi.CmGetInfo(hcmse, CmGetInfoOption.BoxInfo);
|
|
if (null != res)
|
|
{
|
|
return res.SerialNumber.ToString();
|
|
}
|
|
else
|
|
{
|
|
throw new Exception("Fehler beim aufrufen der Seriennummer");
|
|
}
|
|
}
|
|
|
|
public uint GetFeatureMap()
|
|
{
|
|
return BoxContent.FeatureMap;
|
|
}
|
|
|
|
public string GetName()
|
|
{
|
|
return "";
|
|
}
|
|
|
|
public bool IsLicensed(byte neededMask)
|
|
{
|
|
|
|
uint DongleFeature = GetFeatureMap();
|
|
|
|
Trace.WriteLine("DongleFeature: " + DongleFeature);
|
|
|
|
byte DongleFeatureB = (byte)DongleFeature;
|
|
|
|
if ((DongleFeatureB & neededMask) == neededMask)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
CleanDongle();
|
|
}
|
|
}
|
|
|
|
|
|
}
|