?? ognetwrk.pas
字號:
{*********************************************************}
{* OGNETWRK.PAS 1.13 *}
{* Copyright (c) 1996-02 TurboPower Software Co *}
{* All rights reserved. *}
{*********************************************************}
{$I ONGUARD.INC}
{$B-} {Complete Boolean Evaluation}
{$I+} {Input/Output-Checking}
{$P+} {Open Parameters}
{$T-} {Typed @ Operator}
{$W-} {Windows Stack Frame}
{$X+} {Extended Syntax}
{$IFNDEF Win32}
{$G+} {286 Instructions}
{$N+} {Numeric Coprocessor}
{$C MOVEABLE,DEMANDLOAD,DISCARDABLE}
{$ENDIF}
unit OgNetWrk;
{-network file routines}
interface
uses
{$IFDEF Win32} Windows, {$ELSE} WinTypes, WinProcs, {$ENDIF}
Classes, SysUtils,
OgConst,
OgUtil,
OnGuard;
type
TNetAccess = packed record
Fh : Integer;
Key : TKey;
CheckValue : Word;
Index : Word;
end;
TNetAccessInfo = packed record
Total : Cardinal;
Locked : Cardinal;
Invalid : Cardinal;
end;
type
TGetFileNameEvent = {!!.02}
procedure(Sender : TObject; var Value : string) {!!.02}
of object; {!!.02}
TOgNetCode = class(TOgCodeBase)
protected {private}
{property variables}
FFileName : string;
{event variables} {!!.02}
FOnGetFileName : TGetFileNameEvent; {!!.02}
{internal variables}
nacNetAccess : TNetAccess;
nacNetAccessInfo : TNetAccessInfo;
{property methods}
function GetActiveUsers : LongInt;
function GetInvalidUsers : LongInt;
function GetMaxUsers : LongInt;
protected
procedure Loaded;
override;
function DoOnGetFileName : string; {!!.02}
dynamic; {!!.02}
public
constructor Create(AOwner : TComponent); {!!.01}
override;
destructor Destroy;
override;
function CheckCode(Report : Boolean) : TCodeStatus;
override;
function CreateAccessFile : Boolean;
{-creates the net access file}
function IsRemoteDrive(const ExePath : string) : Boolean;
{-returns True if the application is running on a remote drive}
function ResetAccessFile : Boolean;
{-rewrites the net access file, returning True if successful}
property ActiveUsers : LongInt
read GetActiveUsers;
property InvalidUsers : LongInt
read GetInvalidUsers;
property MaxUsers : LongInt
read GetMaxUsers;
published
{properties}
property Code
stored FStoreCode;
property FileName : string
read FFileName
write FFileName;
property StoreCode
default DefStoreCode;
{events}
property OnGetFileName : TGetFileNameEvent {!!.02}
read FOnGetFileName {!!.02}
write FOnGetFileName; {!!.02}
end;
{network user access/count routines}
function CheckNetAccessFile(const NetAccess : TNetAccess) : Boolean;
{-verifies that the NetAccess record provides authorized use}
function CreateNetAccessFile(const FileName : string; const Key : TKey; Count : Word) : Boolean;
{-creates the net access file as FileName using Key for encryption}
function CreateNetAccessFileEx(const FileName : string; const Key : TKey;
const Code : TCode) : Boolean;
{-creates the net access file getting the user count from a previously encoded Code block}
function DecodeNAFCountCode(const Key : TKey; const Code : TCode) : LongInt;
{-returns the user count from a previously encoded Code block}
procedure EncodeNAFCountCode(const Key : TKey; Count : Cardinal; var Code : TCode);
{-creates an encoded Code block for Count users}
function GetNetAccessFileInfo(const FileName : string; const Key : TKey;
var NetAccessInfo : TNetAccessInfo) : Boolean;
{-fills a TNetAccessInfo structure. returns Fasle on error}
function IsAppOnNetwork(const ExePath : string) : Boolean;
{-returns True if the application is running on a netword drive}
function LockNetAccessFile(const FileName : string; const Key : TKey; var NetAccess : TNetAccess) : Boolean;
{-locks a record in FileName and fills NetAccess. returns False on error}
function ResetNetAccessFile(const FileName : string; const Key : TKey) : Boolean;
{-rewrites the net access file contents}
function UnlockNetAccessFile(var NetAccess : TNetAccess) : Boolean;
{-unlocks the net access record defined by NetAccess. returns False on error}
implementation
{$IFDEF TRIALRUN} uses OgTrial; {$ENDIF}
{*** TOgNetCode ***}
function TOgNetCode.CheckCode(Report : Boolean) : TCodeStatus;
var
Key : TKey;
begin
Result := ogValidCode;
DoOnGetKey(Key);
ApplyModifierToKeyPrim(DoOnGetModifier, Key, SizeOf(Key)); {!!.09}
if DecodeNAFCountCode(Key, DoOnGetCode) > 0 then begin {!!.09}
if (nacNetAccess.Fh = -1) then begin {!!.09}
if (FFileName = '') then {!!.09}
FFileName := DoOnGetFileName; {!!.09}
LockNetAccessFile(FFileName, Key, nacNetAccess); {!!.09}
end; {!!.09}
if not CheckNetAccessFile(nacNetAccess) then
Result := ogNetCountUsed;
end else
Result := ogInvalidCode;
if Report then
DoOnChecked(Result);
end;
{!!.01}
constructor TOgNetCode.Create(AOwner : TComponent);
begin
inherited Create(AOwner);
nacNetAccess.Fh := -1;
{$IFDEF TRIALRUN}
_CC_;
_VC_;
{$ENDIF}
end;
function TOgNetCode.CreateAccessFile : Boolean;
var
Code : TCode;
Key : TKey;
Modifier : LongInt;
begin
DoOnGetKey(Key);
Code := DoOnGetCode;
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
Result := CreateNetAccessFileEx(FFileName, Key, Code);
end;
destructor TOgNetCode.Destroy;
begin
UnlockNetAccessFile(nacNetAccess);
inherited Destroy;
end;
{!!.02}
function TOgNetCode.DoOnGetFileName : string;
begin
if not Assigned(FOnGetFileName) then
raise EOnGuardException.Create(StrRes[SCNoOnGetFileName]);
FOnGetFileName(Self, Result);
end;
function TOgNetCode.GetActiveUsers : LongInt;
var
Key : TKey;
Modifier : LongInt;
NetAccessInfo : TNetAccessInfo;
begin
DoOnGetKey(Key);
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
if GetNetAccessFileInfo(FileName, Key, NetAccessInfo) then
Result := NetAccessInfo.Locked
else
Result := -1;
end;
function TOgNetCode.GetInvalidUsers : LongInt;
var
Key : TKey;
Modifier : LongInt;
{NetAccessInfo : TNetAccessInfo;} {!!.08}
begin
DoOnGetKey(Key);
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
if GetNetAccessFileInfo(FFileName, Key, nacNetAccessInfo) then
Result := nacNetAccessInfo.Invalid {!!.08}
else
Result := -1;
end;
function TOgNetCode.GetMaxUsers : LongInt;
var
Key : TKey;
Modifier : LongInt;
DoOnGetKey(Key);
Modifier := DoOnGetModifier;
ApplyModifierToKeyPrim(Modifier, Key, SizeOf(Key));
if GetNetAccessFileInfo(FFileName, Key, nacNetAccessInfo) then
Result := nacNetAccessInfo.Total
else
Result := -1;
end;
function TOgNetCode.IsRemoteDrive(const ExePath : string) : Boolean;
begin
Result := IsAppOnNetwork(ExePath);
end;
procedure TOgNetCode.Loaded;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -