📄 onguard.pas
字号:
FRegString := DoOnGetRegString; {!!.02}
DoOnGetKey(Key);
Code := DoOnGetCode;
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
if not IsRegCodeValid(Key, Code) then
Result := ogInvalidCode
else if GetExpirationDate(Key, Code) < Date then
Result := ogCodeExpired;
if Report then
DoOnChecked(Result);
end;
constructor TOgRegistrationCode.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FRegString := '';
FStoreRegString := DefStoreRegString;
{$IFDEF TRIALRUN}
_CC_;
_VC_;
{$ENDIF}
end;
function TOgRegistrationCode.DoOnGetRegString : string;
begin
Result := '';
if FStoreRegString then
Result := FRegString
else if Assigned(FOnGetRegString) then
FOnGetRegString(Self, Result)
end;
{*** TOgSerialNumberCode ***}
function TOgSerialNumberCode.CheckCode(Report : Boolean) : TCodeStatus;
var
Code : TCode;
Key : TKey;
Modifier : LongInt;
begin
Result := ogValidCode;
DoOnGetKey(Key);
Code := DoOnGetCode;
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
if not IsSerialNumberCodeValid(Key, Code) then
Result := ogInvalidCode
else if GetExpirationDate(Key, Code) < Date then
Result := ogCodeExpired;
if Report then
DoOnChecked(Result);
end;
function TOgSerialNumberCode.GetValue : LongInt;
var
Code : TCode;
Key : TKey;
Modifier : LongInt;
begin
DoOnGetKey(Key);
Code := DoOnGetCode;
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
Result := GetSerialNumberCodeValue(Key, Code);
end;
{*** TOgSpecialCode ***}
function TOgSpecialCode.CheckCode(Report : Boolean) : TCodeStatus;
var
Code : TCode;
Key : TKey;
Modifier : LongInt;
begin
Result := ogValidCode;
DoOnGetKey(Key);
Code := DoOnGetCode;
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
if not IsSpecialCodeValid(Key, Code) then
Result := ogInvalidCode
else if GetExpirationDate(Key, Code) < Date then
Result := ogCodeExpired;
if Report then
DoOnChecked(Result);
end;
function TOgSpecialCode.GetValue : LongInt;
var
Code : TCode;
Key : TKey;
Modifier : LongInt;
begin
DoOnGetKey(Key);
Code := DoOnGetCode;
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
Result := GetSpecialCodeValue(Key, Code);
end;
{*** TOgUsageCode ***}
function TOgUsageCode.CheckCode(Report : Boolean) : TCodeStatus;
var
Code : TCode;
Key : TKey;
Modifier : LongInt;
begin
Result := ogValidCode;
DoOnGetKey(Key);
Code := DoOnGetCode;
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
if IsUsageCodeValid(Key, Code) then begin
if IsUsageCodeExpired(Key, Code) then begin
Result := ogRunCountUsed;
if GetExpirationDate(Key, Code) < Date then
Result := ogCodeExpired;
end;
end else
Result := ogInvalidCode;
if Report then
DoOnChecked(Result);
end;
constructor TOgUsageCode.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
FAutoDecrease := DefAutoDecrease;
{$IFDEF TRIALRUN}
_CC_;
_VC_;
{$ENDIF}
end;
procedure TOgUsageCode.Decrease;
var
Code : TCode;
Work : TCode;
Key : TKey;
Modifier : LongInt;
begin
DoOnGetKey(Key);
Code := DoOnGetCode;
Work := Code;
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
{code is decreased each time this routine is called}
DecUsageCode(Key, Work);
{save the changed code}
DoOnChangeCode(Work);
end;
procedure TOgUsageCode.DoOnChangeCode(Value : TCode);
begin
if Assigned(FOnChangeCode) then
FOnChangeCode(Self, Value)
else
raise EOnGuardException.CreateFmt(StrRes[SCNoOnChangeCode], [Self.ClassName]);
end;
function TOgUsageCode.GetValue : LongInt;
var
Code : TCode;
Key : TKey;
Modifier : LongInt;
begin
DoOnGetKey(Key);
Code := DoOnGetCode;
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
Result := GetUsageCodeValue(Key, Code);
end;
procedure TOgUsageCode.Loaded;
begin
inherited Loaded;
if FAutoDecrease and not (csDesigning in ComponentState) then
Decrease;
end;
{*** general routines ***}
function GetCodeType(const Key : TKey; const Code : TCode) : TCodeType;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
case Work.CheckValue of
DateCheckCode : Result := ctDate;
DaysCheckCode : Result := ctDays;
RegCheckCode : Result := ctRegistration;
SerialCheckCode : Result := ctSerialNumber;
UsageCheckCode : Result := ctUsage;
NetCheckCode : Result := ctNetwork;
SpecialCheckCode : Result := ctSpecial;
else
Result := ctUnknown;
end;
end;
function ExpandDate(D : Word) : TDateTime;
begin
if D > 0 then
Result := LongInt(D) + BaseDate
else
Result := EncodeDate(9999, 1, 1);
end;
function ShrinkDate(D : TDateTime) : Word;
begin
if (Trunc(D) = 0) or (Trunc(D) - BaseDate > High(Word)) then
Result := 0
else
Result := Trunc(D) - BaseDate;
end;
function GetExpirationDate(const Key : TKey; const Code : TCode) : TDateTime;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
case Work.CheckValue of
DateCheckCode : Result := ExpandDate(Work.EndDate);
DaysCheckCode : Result := ExpandDate(Work.Expiration);
RegCheckCode : Result := ExpandDate(Work.Expiration);
SerialCheckCode : Result := ExpandDate(Work.Expiration);
UsageCheckCode : Result := ExpandDate(Work.Expiration);
SpecialCheckCode : Result := ExpandDate(Work.Expiration);
else
Result := ExpandDate(0)
end;
end;
{*** date code ***}
procedure InitDateCode(const Key : TKey;
StartDate, EndDate : TDateTime; var Code : TCode);
begin
Code.CheckValue := DateCheckCode;
Code.Expiration := 0; {not used for date codes}
Code.FirstDate := ShrinkDate(StartDate);
Code.EndDate := ShrinkDate(EndDate);
MixBlock(T128bit(Key), Code, True);
end;
function IsDateCodeValid(const Key : TKey; const Code : TCode) : Boolean;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
Result := (Work.CheckValue = DateCheckCode) and
(ExpandDate(Work.FirstDate) <= Date);
end;
function GetDateCodeValue(const Key : TKey; const Code : TCode) : TDateTime;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
{return the end date}
if (Work.CheckValue = DateCheckCode) and
(ExpandDate(Work.FirstDate) <= Date) then
Result := ExpandDate(Work.EndDate)
else
Result := 0;
end;
function IsDateCodeExpired(const Key : TKey; const Code : TCode) : Boolean;
begin
Result := (GetDateCodeValue(Key, Code) < Date);
end;
{*** days code ***}
procedure InitDaysCode(const Key : TKey; Days : Word; Expires : TDateTime;
var Code : TCode);
begin
Code.CheckValue := DaysCheckCode;
Code.Expiration := ShrinkDate(Expires);
Code.Days := Days;
Code.LastAccess := ShrinkDate(Date);
MixBlock(T128bit(Key), Code, True);
end;
function IsDaysCodeValid(const Key : TKey; const Code : TCode) : Boolean;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
Result := (Work.CheckValue = DaysCheckCode) and
(ExpandDate(Work.LastAccess) <= Date);
end;
procedure DecDaysCode(const Key : TKey; var Code : TCode);
var
X : LongInt;
begin
MixBlock(T128bit(Key), Code, False);
X := ShrinkDate(Date);
if (Code.LastAccess <> X) then begin
if Code.Days > 0 then {!!.02}
Code.Days := Max(0, Code.Days - 1); {!!.02}
Code.LastAccess := X;
end;
MixBlock(T128bit(Key), Code, True);
end;
function GetDaysCodeValue(const Key : TKey; const Code : TCode) : LongInt;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
if (Work.CheckValue = DaysCheckCode) and
(ExpandDate(Work.LastAccess) <= Date) then
Result := Work.Days
else
Result := 0;
end;
function IsDaysCodeExpired(const Key : TKey; const Code : TCode) : Boolean;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
Result := (Work.Days = 0) or (ExpandDate(Work.Expiration) < Date);
end;
{*** registration code ***}
procedure InitRegCode(const Key : TKey; const RegStr : string; Expires : TDateTime; var Code : TCode);
var
S : string; {!!.06}
I : Integer; {!!.06}
begin
Code.CheckValue := RegCheckCode;
Code.Expiration := ShrinkDate(Expires);
{strip accented characters from the registration string} {!!.06}
S := RegStr; {!!.06}
for I := Length(S) downto 1 do {!!.06}
if Ord(S[I]) > 127 then {!!.06}
Delete(S, I, 1); {!!.06}
Code.RegString := StringHashElf(AnsiUpperCase(S)); {!!.06}
MixBlock(T128bit(Key), Code, True);
end;
function IsRegCodeValid(const Key : TKey; const Code : TCode) : Boolean;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
Result := (Work.CheckValue = RegCheckCode);
end;
function IsRegCodeExpired(const Key : TKey; const Code : TCode) : Boolean;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
Result := ExpandDate(Work.Expiration) < Date;
end;
{*** serial number code ***}
procedure InitSerialNumberCode(const Key : TKey; Serial : LongInt; Expires : TDateTime; var Code : TCode);
begin
Code.CheckValue := SerialCheckCode;
Code.Expiration := ShrinkDate(Expires);
Code.SerialNumber := Serial;
MixBlock(T128bit(Key), Code, True);
end;
function IsSerialNumberCodeValid(const Key : TKey; const Code : TCode) : Boolean;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
Result := (Work.CheckValue = SerialCheckCode);
end;
function GetSerialNumberCodeValue(const Key : TKey; const Code : TCode) : LongInt;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
if Work.CheckValue = SerialCheckCode then
Result := Work.SerialNumber
else
Result := 0;
end;
function IsSerialNumberCodeExpired(const Key : TKey; const Code : TCode) : Boolean;
var
Work : TCode;
begin
Work := Code;
MixBlock(T128bit(Key), Work, False);
Result := ExpandDate(Work.Expiration) < Date;
end;
{*** special code ***}
procedure InitSpecialCode(const Key : TKey; Value : LongInt; Expire
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -