Subversion Repositories userdetect2

Compare Revisions

No changes between revisions

Regard whitespace Rev 72 → Rev 75

/tags/UserDetect2_Release_2.0/UserDetect2.ini
0,0 → 1,15
[BackupWithoutShutdown]
Description=[Example] Backup without shutdown
; Home computer of John and Bob
AccountSID:S-1-5-21-3669290038-3293053376-393244323-1000=backup/john/run_without_shutdown.bat
AccountSID:S-1-5-21-3669290038-3293053376-393244323-1001=backup/bob/run_without_shutdown.bat
; Laptop of Alice
AccountSID:S-1-5-21-2340904833-1289345987-323409311-1000=backup/alice/run_without_shutdown.bat
 
[BackupWithShutdown]
Description=[Example] Backup with shutdown
; Home computer of John and Bob
AccountSID:S-1-5-21-3669290038-3293053376-393244323-1000=backup/john/run_with_shutdown.bat
AccountSID:S-1-5-21-3669290038-3293053376-393244323-1001=backup/bob/run_with_shutdown.bat
; Laptop of Alice
AccountSID:S-1-5-21-2340904833-1289345987-323409311-1000=backup/alice/run_with_shutdown.bat
/tags/UserDetect2_Release_2.0/UD2_TaskProperties.pas
0,0 → 1,124
unit UD2_TaskProperties;
 
interface
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, UD2_Obj, StdCtrls, ExtCtrls, Grids, ValEdit;
 
type
TUD2TaskPropertiesForm = class(TForm)
ValueListEditor1: TValueListEditor;
LabeledEdit1: TLabeledEdit;
Image1: TImage;
ListBox1: TListBox;
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FUD2: TUD2;
FShortTaskName: string;
procedure LoadExecutableFilesList;
procedure LoadIcon;
public
constructor Create(AOwner: TComponent; AUD2: TUD2; AShortTaskName: string); reintroduce;
end;
 
(*
var
UD2TaskPropertiesForm: TTaskPropertiesForm;
*)
 
implementation
 
{$R *.dfm}
 
uses
UD2_Utils, UD2_Main, ShellAPI;
 
procedure TUD2TaskPropertiesForm.LoadExecutableFilesList;
resourcestring
LNG_RIOD = '%s [Run in own directory]';
var
sl: TStringList;
i: integer;
s: string;
begin
//fud2.GetCommandList(AShortTaskName, ListBox1.Items);
ListBox1.Clear;
sl := TStringList.Create;
try
fud2.GetCommandList(FShortTaskName, sl);
for i := 0 to sl.Count-1 do
begin
s := sl.Strings[i];
if Copy(s, 1, Length(UD2_RUN_IN_OWN_DIRECTORY_PREFIX)) = UD2_RUN_IN_OWN_DIRECTORY_PREFIX then
begin
s := Copy(s, 1+Length(UD2_RUN_IN_OWN_DIRECTORY_PREFIX), Length(s)-Length(UD2_RUN_IN_OWN_DIRECTORY_PREFIX));
s := Format(LNG_RIOD, [s]);
end;
ListBox1.Items.Add(s);
end;
finally
sl.Free;
end;
end;
 
procedure TUD2TaskPropertiesForm.LoadIcon;
var
ico: TIcon;
icoSplit: TIconFileIdx;
iconString: string;
begin
iconString := fud2.ReadMetatagString(FShortTaskName, UD2_Main.TagIcon, '');
if iconString <> '' then
begin
icoSplit := SplitIconString(iconString);
ico := TIcon.Create;
try
ico.Handle := ExtractIcon(Application.Handle, PChar(icoSplit.FileName), icoSplit.IconIndex);
Image1.Picture.Icon.Assign(ico);
finally
ico.Free;
end;
end
else
begin
UD2MainForm.TasksImageList.GetIcon(0, Image1.Picture.Icon);
end;
end;
 
constructor TUD2TaskPropertiesForm.Create(AOwner: TComponent; AUD2: TUD2; AShortTaskName: string);
resourcestring
LNG_TASK_PROPS = 'Task properties of "%s"';
var
Description: string;
begin
inherited Create(AOwner);
FUD2 := AUD2;
FShortTaskName := AShortTaskName;
 
FUD2.IniFile.ReadSectionValues(AShortTaskName, ValueListEditor1.Strings);
 
Description := FUD2.GetTaskName(AShortTaskName);
Caption := Format(LNG_TASK_PROPS, [Description]);
LabeledEdit1.Text := AShortTaskName;
LoadExecutableFilesList;
LoadIcon;
end;
 
procedure TUD2TaskPropertiesForm.Button2Click(Sender: TObject);
begin
Close;
end;
 
procedure TUD2TaskPropertiesForm.Button1Click(Sender: TObject);
begin
UD2_RunCMD(fud2.IniFileName, SW_NORMAL);
end;
 
end.
/tags/UserDetect2_Release_2.0/UD2_Main.pas
0,0 → 1,520
unit UD2_Main;
 
interface
 
{$IF CompilerVersion >= 25.0}
{$LEGACYIFEND ON}
{$IFEND}
 
{$INCLUDE 'UserDetect2.inc'}
 
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ValEdit, UD2_Obj, ComCtrls, ImgList, ExtCtrls,
CommCtrl, Menus, VTSListView, VTSCompat;
 
const
DefaultIniFile = 'UserDetect2.ini';
DefaultWarnIfNothingMatches = 'false';
TagWarnIfNothingMatches = 'WarnIfNothingMatches';
DefaultCloseAfterLaunching = 'false';
TagCloseAfterLaunching = 'CloseAfterLaunching';
TagIcon = 'Icon';
 
type
TUD2MainForm = class(TForm)
OpenDialog1: TOpenDialog;
PageControl1: TPageControl;
TasksTabSheet: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
IniTemplateMemo: TMemo;
TabSheet4: TTabSheet;
TasksListView: TVTSListView;
TasksImageList: TImageList;
SaveDialog1: TSaveDialog;
TabSheet5: TTabSheet;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
LoadedPluginsListView: TVTSListView;
IdentificationsListView: TVTSListView;
ErrorsTabSheet: TTabSheet;
ErrorsMemo: TMemo;
Memo1: TMemo;
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
TasksPopupMenu: TPopupMenu;
Run1: TMenuItem;
Properties1: TMenuItem;
IdentificationsPopupMenu: TPopupMenu;
CopyTaskDefinitionExample1: TMenuItem;
Button3: TButton;
VersionLabel: TLabel;
LoadedPluginsPopupMenu: TPopupMenu;
MenuItem1: TMenuItem;
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure TasksListViewDblClick(Sender: TObject);
procedure TasksListViewKeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure URLLabelClick(Sender: TObject);
procedure TasksPopupMenuPopup(Sender: TObject);
procedure Run1Click(Sender: TObject);
procedure Properties1Click(Sender: TObject);
procedure IdentificationsPopupMenuPopup(Sender: TObject);
procedure CopyTaskDefinitionExample1Click(Sender: TObject);
procedure ListViewCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
procedure Button3Click(Sender: TObject);
procedure LoadedPluginsPopupMenuPopup(Sender: TObject);
procedure MenuItem1Click(Sender: TObject);
protected
ud2: TUD2;
procedure LoadTaskList;
procedure LoadDetectedIDs;
procedure LoadINITemplate;
procedure LoadLoadedPluginList;
function GetIniFileName: string;
procedure DoRun(ShortTaskName: string);
procedure CheckForErrors;
end;
 
var
UD2MainForm: TUD2MainForm;
 
implementation
 
{$R *.dfm}
 
uses
ShellAPI, Clipbrd, Math, AlphaNumSort, UD2_Utils, UD2_TaskProperties;
 
type
TUD2ListViewEntry = class(TObject)
ShortTaskName: string;
CloseAfterLaunching: boolean;
TaskPropertiesForm: TForm;
end;
 
function AddIconRecToImageList(rec: TIconFileIdx; ImageList: TImageList): integer;
var
icon: TIcon;
begin
icon := TIcon.Create;
try
icon.Handle := ExtractIcon(Application.Handle, PChar(rec.FileName), rec.IconIndex);
 
// result := ImageList.AddIcon(ico);
result := AddTransparentIconToImageList(ImageList, icon);
finally
icon.Free;
end;
end;
 
{ TUD2MainForm }
 
function TUD2MainForm.GetIniFileName: string;
resourcestring
LNG_FILE_NOT_FOUND = 'File "%s" not found.';
begin
if ParamCount >= 1 then
begin
if FileExists(ParamStr(1)) then
begin
result := ParamStr(1);
end
else
begin
ExitCode := EXITCODE_INI_NOT_FOUND;
MessageDlg(Format(LNG_FILE_NOT_FOUND, [ParamStr(1)]), mtError, [mbOK], 0);
result := '';
end;
Exit;
end
else
begin
if FileExists(DefaultIniFile) then
begin
result := DefaultIniFile;
Exit;
end;
 
if FileExists(GetOwnCmdName + '.ini') then
begin
result := GetOwnCmdName + '.ini';
Exit;
end;
 
if CompatOpenDialogExecute(OpenDialog1) then
begin
result := OpenDialog1.FileName;
Exit;
end;
 
result := '';
Exit;
end;
end;
 
procedure TUD2MainForm.LoadTaskList;
var
sl: TStringList;
i: integer;
ShortTaskName, iconString: string;
iconIndex: integer;
obj: TUD2ListViewEntry;
begin
TasksListView.Clear;
sl := TStringList.Create;
try
ud2.GetTaskListing(sl);
for i := 0 to sl.Count-1 do
begin
ShortTaskName := sl.Names[i];
 
Obj := TUD2ListViewEntry.Create;
Obj.ShortTaskName := ShortTaskName;
Obj.CloseAfterLaunching := ud2.ReadMetatagBool(ShortTaskName, TagCloseAfterLaunching, DefaultCloseAfterLaunching);
 
TasksListView.AddItem(sl.Values[ShortTaskName], TObject(Obj));
 
iconString := ud2.ReadMetatagString(ShortTaskName, TagIcon, '');
if iconString <> '' then
begin
iconIndex := AddIconRecToImageList(SplitIconString(iconString), TasksImageList);
if iconIndex <> -1 then
begin
TasksListView.Items.Item[TasksListView.Items.Count-1].ImageIndex := iconIndex;
end;
end;
end;
finally
sl.Free;
end;
end;
 
procedure TUD2MainForm.DoRun(ShortTaskName: string);
resourcestring
LNG_TASK_NOT_EXISTS = 'The task "%s" does not exist in the INI file.';
LNG_NOTHING_MATCHES = 'No identification string matches to your environment. No application was launched. Please check the Task Definition File.';
var
slCmds: TStringList;
i: integer;
cmd: string;
begin
if not ud2.TaskExists(ShortTaskName) then
begin
// This can happen if the task name is taken from command line
MessageDlg(Format(LNG_TASK_NOT_EXISTS, [ShortTaskName]), mtError, [mbOK], 0);
ExitCode := EXITCODE_TASK_NOT_EXISTS;
Exit;
end;
 
slCmds := TStringList.Create;
try
ud2.GetCommandList(ShortTaskName, slCmds);
 
if (slCmds.Count = 0) and
ud2.ReadMetatagBool(ShortTaskName,
TagWarnIfNothingMatches, DefaultWarnIfNothingMatches) then
begin
MessageDlg(LNG_NOTHING_MATCHES, mtWarning, [mbOK], 0);
ExitCode := EXITCODE_TASK_NOTHING_MATCHES;
end;
 
for i := 0 to slCmds.Count-1 do
begin
cmd := slCmds.Strings[i];
if cmd = '' then continue;
UD2_RunCMD(cmd, SW_NORMAL); // IDEA: let SW_NORMAL be configurable?
end;
finally
slCmds.Free;
end;
end;
 
procedure TUD2MainForm.FormDestroy(Sender: TObject);
var
i: integer;
begin
if Assigned(ud2) then ud2.Free;
for i := 0 to TasksListView.Items.Count-1 do
begin
TUD2ListViewEntry(TasksListView.Items.Item[i].Data).Free;
end;
end;
 
procedure TUD2MainForm.CheckForErrors;
begin
ErrorsTabSheet.TabVisible := ud2.Errors.Count > 0;
if ErrorsTabSheet.TabVisible then
begin
ErrorsMemo.Lines.Assign(ud2.Errors);
PageControl1.ActivePage := ErrorsTabSheet;
end;
end;
 
procedure TUD2MainForm.LoadDetectedIDs;
var
i, j: integer;
pl: TUD2Plugin;
ude: TUD2IdentificationEntry;
begin
IdentificationsListView.Clear;
for i := 0 to ud2.LoadedPlugins.Count-1 do
begin
pl := ud2.LoadedPlugins.Items[i] as TUD2Plugin;
for j := 0 to pl.DetectedIdentifications.Count-1 do
begin
ude := pl.DetectedIdentifications.Items[j] as TUD2IdentificationEntry;
with IdentificationsListView.Items.Add do
begin
Caption := pl.PluginName;
SubItems.Add(pl.IdentificationMethodName);
SubItems.Add(ude.IdentificationString);
SubItems.Add(GUIDToString(pl.PluginGUID));
end;
end;
end;
 
for i := 0 to IdentificationsListView.Columns.Count-1 do
begin
IdentificationsListView.Columns.Items[i].Width := LVSCW_AUTOSIZE_USEHEADER;
end;
end;
 
procedure TUD2MainForm.LoadINITemplate;
var
i, j: integer;
pl: TUD2Plugin;
ude: TUD2IdentificationEntry;
begin
IniTemplateMemo.Clear;
IniTemplateMemo.Lines.Add('[ExampleTask1]');
IniTemplateMemo.Lines.Add('; Description: Optional but recommended');
IniTemplateMemo.Lines.Add('Description=Run Task #1');
IniTemplateMemo.Lines.Add('; WarnIfNothingMatches: Warns when no application was launched. Default: false.');
IniTemplateMemo.Lines.Add('WarnIfNothingMatches=false');
IniTemplateMemo.Lines.Add('; Optional: IconDLL + IconIndex');
IniTemplateMemo.Lines.Add('Icon=%SystemRoot%\system32\Shell32.dll,3');
IniTemplateMemo.Lines.Add('; Optional: Can be true or false');
IniTemplateMemo.Lines.Add(TagCloseAfterLaunching+'=true');
 
for i := 0 to ud2.LoadedPlugins.Count-1 do
begin
pl := ud2.LoadedPlugins.Items[i] as TUD2Plugin;
for j := 0 to pl.DetectedIdentifications.Count-1 do
begin
ude := pl.DetectedIdentifications.Items[j] as TUD2IdentificationEntry;
IniTemplateMemo.Lines.Add(Format('; %s', [ude.Plugin.PluginName]));
IniTemplateMemo.Lines.Add(ude.GetPrimaryIdName+'=calc.exe');
end;
end;
end;
 
procedure TUD2MainForm.LoadLoadedPluginList;
resourcestring
LNG_MS = '%dms';
var
i: integer;
pl: TUD2Plugin;
begin
LoadedPluginsListView.Clear;
for i := 0 to ud2.LoadedPlugins.Count-1 do
begin
pl := ud2.LoadedPlugins.Items[i] as TUD2Plugin;
with LoadedPluginsListView.Items.Add do
begin
Caption := pl.PluginDLL;
SubItems.Add(pl.PluginVendor);
SubItems.Add(pl.PluginName);
SubItems.Add(pl.PluginVersion);
SubItems.Add(pl.IdentificationMethodName);
SubItems.Add(IntToStr(pl.DetectedIdentifications.Count));
SubItems.Add(Format(LNG_MS, [Max(1,pl.time)])); // at least show 1ms, otherwise it would be unloggical
SubItems.Add(pl.IdentificationProcedureStatusCodeDescribed);
SubItems.Add(pl.PluginGUIDString);
end;
end;
 
for i := 0 to LoadedPluginsListView.Columns.Count-1 do
begin
LoadedPluginsListView.Columns.Items[i].Width := LVSCW_AUTOSIZE_USEHEADER;
end;
end;
 
procedure TUD2MainForm.FormShow(Sender: TObject);
resourcestring
LNG_SYNTAX = 'Syntax: %s [TaskDefinitionFile [TaskName]]';
var
LoadedIniFile: string;
begin
ExitCode := EXITCODE_OK;
 
// To avoid accidental changes from the GUI designer
PageControl1.ActivePage := TasksTabSheet;
 
if ((ParamCount = 1) and (ParamStr(1) = '/?')) or (ParamCount >= 3) then
begin
ExitCode := EXTICODE_SYNTAX_ERROR;
MessageDlg(Format(LNG_SYNTAX, [GetOwnCmdName]), mtInformation, [mbOK], 0);
Close;
Exit;
end;
 
LoadedIniFile := GetIniFileName;
if LoadedIniFile = '' then
begin
Close;
Exit;
end;
ud2 := TUD2.Create(LoadedIniFile);
 
ud2.HandlePluginDir('Plugins\');
 
if ParamCount >= 2 then
begin
DoRun(ParamStr(2));
Close;
Exit;
end
else
begin
LoadTaskList;
LoadDetectedIDs;
LoadINITemplate;
LoadLoadedPluginList;
CheckForErrors;
end;
end;
 
procedure TUD2MainForm.TasksListViewDblClick(Sender: TObject);
var
obj: TUD2ListViewEntry;
begin
if TasksListView.ItemIndex = -1 then exit;
obj := TUD2ListViewEntry(TasksListView.Selected.Data);
DoRun(obj.ShortTaskName);
if obj.CloseAfterLaunching then Close;
end;
 
procedure TUD2MainForm.TasksListViewKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
TasksListViewDblClick(Sender);
end;
end;
 
procedure TUD2MainForm.Button1Click(Sender: TObject);
begin
UD2_RunCMD(ud2.IniFileName, SW_NORMAL);
end;
 
procedure TUD2MainForm.Button2Click(Sender: TObject);
begin
if CompatSaveDialogExecute(SaveDialog1) then
begin
IniTemplateMemo.Lines.SaveToFile(SaveDialog1.FileName);
end;
end;
 
procedure TUD2MainForm.URLLabelClick(Sender: TObject);
var
s: string;
begin
s := TLabel(Sender).Caption;
if Pos('@', s) > 0 then
s := 'mailto:' + s
else
s := 'http://' + s;
UD2_RunCMD(s, SW_NORMAL);
end;
 
procedure TUD2MainForm.TasksPopupMenuPopup(Sender: TObject);
begin
Run1.Enabled := TasksListView.ItemIndex <> -1;
Properties1.Enabled := TasksListView.ItemIndex <> -1;
end;
 
procedure TUD2MainForm.Run1Click(Sender: TObject);
begin
TasksListViewDblClick(Sender);
end;
 
procedure TUD2MainForm.Properties1Click(Sender: TObject);
var
obj: TUD2ListViewEntry;
begin
if TasksListView.ItemIndex = -1 then exit;
obj := TUD2ListViewEntry(TasksListView.Selected.Data);
if obj.TaskPropertiesForm = nil then
begin
obj.TaskPropertiesForm := TUD2TaskPropertiesForm.Create(Self, ud2, obj.ShortTaskName);
end;
obj.TaskPropertiesForm.Show;
end;
 
procedure TUD2MainForm.IdentificationsPopupMenuPopup(Sender: TObject);
begin
CopyTaskDefinitionExample1.Enabled := IdentificationsListView.ItemIndex <> -1;
end;
 
procedure TUD2MainForm.CopyTaskDefinitionExample1Click(Sender: TObject);
var
s: string;
begin
s := '; '+IdentificationsListView.Selected.Caption+#13#10+
IdentificationsListView.Selected.SubItems[0] + ':' + IdentificationsListView.Selected.SubItems[1] + '=calc.exe'+#13#10+
#13#10+
'; Alternatively:'+#13#10+
IdentificationsListView.Selected.SubItems[2] + ':' + IdentificationsListView.Selected.SubItems[1] + '=calc.exe'+#13#10;
Clipboard.AsText := s;
end;
 
procedure TUD2MainForm.ListViewCompare(Sender: TObject; Item1,
Item2: TListItem; Data: Integer; var Compare: Integer);
var
ListView: TVTSListView;
begin
ListView := Sender as TVTSListView;
if ListView.CurSortedColumn = 0 then
begin
Compare := AlphaNumCompare(Item1.Caption, Item2.Caption);
end
else
begin
Compare := AlphaNumCompare(Item1.SubItems[ListView.CurSortedColumn-1],
Item2.SubItems[ListView.CurSortedColumn-1]);
end;
if ListView.CurSortedDesc then Compare := -Compare;
end;
 
procedure TUD2MainForm.Button3Click(Sender: TObject);
begin
VTS_CheckUpdates('userdetect2', VersionLabel.Caption);
end;
 
procedure TUD2MainForm.LoadedPluginsPopupMenuPopup(Sender: TObject);
begin
MenuItem1.Enabled := LoadedPluginsListView.ItemIndex <> -1;
end;
 
procedure TUD2MainForm.MenuItem1Click(Sender: TObject);
var
s: string;
begin
s := '; '+LoadedPluginsListView.Selected.SubItems.Strings[6];
Clipboard.AsText := s;
end;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/DomainName.dpr
0,0 → 1,88
library DomainName;
 
uses
Windows,
SysUtils,
Classes,
Registry,
networkutils in 'networkutils.pas',
UD2_PluginIntf in '..\UD2_PluginIntf.pas',
UD2_PluginUtils in '..\UD2_PluginUtils.pas',
UD2_PluginStatus in '..\UD2_PluginStatus.pas';
 
{$R *.res}
 
const
PLUGIN_GUID: TGUID = '{6D7AABD7-C4A8-43ED-99E3-3AF4723DD7B2}';
 
function PluginIdentifier: TGUID; cdecl;
begin
result := PLUGIN_GUID;
end;
 
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentifier: WideString;
begin
if not GetDomainName(stIdentifier) then
begin
result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
Exit;
end;
result := UD2_WritePascalStringToPointerW(lpIdentifier, cchSize, stIdentifier);
end;
 
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
var
stPluginName: WideString;
primaryLangID: Byte;
begin
primaryLangID := wLangID and $00FF;
if primaryLangID = LANG_GERMAN then
stPluginName := 'Domänen-Name'
else
stPluginName := 'Domain name';
result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
end;
 
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
end;
 
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
end;
 
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentificationMethodName: WideString;
begin
stIdentificationMethodName := 'DomainName';
result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
end;
 
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
begin
result := UD2_STATUS_OK_LICENSED;
end;
 
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
begin
// This function does not use non-generic status codes
result := FALSE;
end;
 
exports
PluginInterfaceID name mnPluginInterfaceID,
PluginIdentifier name mnPluginIdentifier,
PluginNameW name mnPluginNameW,
PluginVendorW name mnPluginVendorW,
PluginVersionW name mnPluginVersionW,
IdentificationMethodNameW name mnIdentificationMethodNameW,
IdentificationStringW name mnIdentificationStringW,
CheckLicense name mnCheckLicense,
DescribeOwnStatusCodeW name mnDescribeOwnStatusCodeW;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/AccountSID.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=0
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=AccountSID plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-AccountSID
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=AccountSID.dll
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/Plugins/ComputerName.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=0
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=ComputerName plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-ComputerName
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=CompuerName.dll
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/Plugins/DomainName.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=0
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=DomainName plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-DomainName
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=CompuerName.dll
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/Plugins/AccountSID.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/ComputerName.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/NetworkUtils.pas
0,0 → 1,276
unit NetworkUtils;
 
interface
 
uses
Windows, SysUtils, Classes;
 
function GetLocalIPAddressList(outsl: TStrings): DWORD;
function GetLocalMACAddressList(outSL: TStrings): DWORD;
function GetDHCPIPAddressList(outsl: TStrings): DWORD;
function GetGatewayIPAddressList(outsl: TStrings): DWORD;
function GetMACAddress(const IPAddress: string; var outAddress: string): DWORD;
function FormatMAC(s: string): string;
function GetDomainName(var outDomainName: WideString): boolean;
 
implementation
 
uses
iphlp, WinSock, Registry;
 
// TODO: Replace GetAdaptersInfo()? A comment at MSDN states that there might be problems with IPv6
// "GetAdaptersInfo returns ERROR_NO_DATA if there are only IPv6 interfaces
// configured on system. In that case GetAdapterAddresses has to be used!"
 
function GetLocalIPAddressList(outsl: TStrings): DWORD;
var
pAdapterInfo: PIP_ADAPTER_INFO;
addr: string;
addrStr: IP_ADDR_STRING;
BufLen: Cardinal;
begin
BufLen := SizeOf(IP_ADAPTER_INFO);
Result := GetAdaptersInfo(nil, @BufLen);
if Result <> ERROR_BUFFER_OVERFLOW then Exit;
pAdapterInfo := AllocMem(BufLen);
try
Result := GetAdaptersInfo(pAdapterInfo, @BufLen);
if Result <> ERROR_SUCCESS then Exit;
while pAdapterInfo <> nil do
begin
addrStr := pAdapterInfo^.IpAddressList;
repeat
addr := addrStr.IpAddress.S;
if (addr <> '') and (outsl.IndexOf(addr) = -1) then
outsl.Add(addr);
if addrStr.Next = nil then break;
AddrStr := addrStr.Next^;
until false;
pAdapterInfo := pAdapterInfo^.next;
end;
finally
Freemem(pAdapterInfo);
end;
end;
 
function GetDHCPIPAddressList(outsl: TStrings): DWORD;
var
pAdapterInfo: PIP_ADAPTER_INFO;
addr: string;
addrStr: IP_ADDR_STRING;
BufLen: Cardinal;
begin
BufLen := SizeOf(IP_ADAPTER_INFO);
Result := GetAdaptersInfo(nil, @BufLen);
if Result <> ERROR_BUFFER_OVERFLOW then Exit;
pAdapterInfo := AllocMem(BufLen);
try
Result := GetAdaptersInfo(pAdapterInfo, @BufLen);
if Result <> ERROR_SUCCESS then Exit;
while pAdapterInfo <> nil do
begin
addrStr := pAdapterInfo^.DhcpServer;
repeat
addr := addrStr.IpAddress.S;
if (addr <> '') and (outsl.IndexOf(addr) = -1) then
outsl.Add(addr);
if addrStr.Next = nil then break;
AddrStr := addrStr.Next^;
until false;
pAdapterInfo := pAdapterInfo^.next;
end;
finally
Freemem(pAdapterInfo);
end;
end;
 
function GetGatewayIPAddressList(outsl: TStrings): DWORD;
var
pAdapterInfo: PIP_ADAPTER_INFO;
addr: string;
addrStr: IP_ADDR_STRING;
BufLen: Cardinal;
begin
BufLen := SizeOf(IP_ADAPTER_INFO);
Result := GetAdaptersInfo(nil, @BufLen);
if Result <> ERROR_BUFFER_OVERFLOW then Exit;
pAdapterInfo := AllocMem(BufLen);
try
Result := GetAdaptersInfo(pAdapterInfo, @BufLen);
if Result <> ERROR_SUCCESS then Exit;
while pAdapterInfo <> nil do
begin
addrStr := pAdapterInfo^.GatewayList;
repeat
addr := addrStr.IpAddress.S;
if (addr <> '') and (outsl.IndexOf(addr) = -1) then
outsl.Add(addr);
if addrStr.Next = nil then break;
AddrStr := addrStr.Next^;
until false;
pAdapterInfo := pAdapterInfo^.next;
end;
finally
Freemem(pAdapterInfo);
end;
end;
 
function GetMACAddress(const IPAddress: string; var outAddress: string): DWORD;
// http://stackoverflow.com/questions/4550672/delphi-get-mac-of-router
var
MacAddr : Array[0..5] of Byte;
DestIP : ULONG;
PhyAddrLen : ULONG;
WSAData : TWSAData;
j: integer;
begin
outAddress := '';
WSAStartup($0101, WSAData);
try
ZeroMemory(@MacAddr, SizeOf(MacAddr));
DestIP := inet_addr(PAnsiChar(IPAddress));
PhyAddrLen := SizeOf(MacAddr); // TODO: more ?
Result := SendArp(DestIP, 0, @MacAddr, @PhyAddrLen);
if Result = S_OK then
begin
outAddress := '';
for j := 0 to PhyAddrLen-1 do
begin
outAddress := outAddress + format('%.2x', [MacAddr[j]]);
end;
outAddress := FormatMAC(outAddress);
end;
finally
WSACleanup;
end;
end;
 
function GetLocalMACAddressList(outSL: TStrings): DWORD;
const
_MAX_ROWS_ = 100;
type
_IfTable = Record
nRows: LongInt;
ifRow: Array[1.._MAX_ROWS_] of MIB_IFROW;
end;
var
pIfTable: ^_IfTable;
TableSize: LongInt;
tmp: String;
i, j: Integer;
begin
pIfTable := nil;
try
// First: just get the buffer size.
// TableSize returns the size needed.
TableSize := 0; // Set to zero so the GetIfTabel function
// won't try to fill the buffer yet,
// but only return the actual size it needs.
GetIfTable(pIfTable, TableSize, 1);
if (TableSize < SizeOf(MIB_IFROW)+SizeOf(LongInt)) then
begin
Result := ERROR_NO_DATA;
Exit; // less than 1 table entry?!
end;
 
// Second:
// allocate memory for the buffer and retrieve the
// entire table.
GetMem(pIfTable, TableSize);
Result := GetIfTable(pIfTable, TableSize, 1);
if Result <> NO_ERROR then Exit;
 
// Read the ETHERNET addresses.
for i := 1 to pIfTable^.nRows do
begin
//if pIfTable^.ifRow[i].dwType=MIB_IF_TYPE_ETHERNET then
begin
tmp := '';
for j := 0 to pIfTable^.ifRow[i].dwPhysAddrLen-1 do
begin
tmp := tmp + format('%.2x', [pIfTable^.ifRow[i].bPhysAddr[j]]);
end;
tmp := FormatMAC(tmp);
if (tmp <> '') and (outSL.IndexOf(tmp) = -1) then
outSL.Add(tmp);
end;
end;
finally
if Assigned(pIfTable) then FreeMem(pIfTable, TableSize);
end;
end;
 
function FormatMAC(s: string): string;
var
m: integer;
begin
result := '';
m := 1;
s := UpperCase(s);
repeat
if m > 1 then result := result + '-';
result := result + Copy(s, m, 2);
inc(m, 2);
until m > Length(s);
end;
 
(*
type
WKSTA_INFO_100 = Record
wki100_platform_id : DWORD;
wki100_computername : LPWSTR;
wki100_langroup : LPWSTR;
wki100_ver_major : DWORD;
wki100_ver_minor : DWORD;
End;
 
LPWKSTA_INFO_100 = ^WKSTA_INFO_100;
 
function GetNetParam(AParam: integer): string;
Var
PBuf : LPWKSTA_INFO_100;
Res : LongInt;
begin
result := '';
Res := NetWkstaGetInfo(nil, 100, @PBuf);
If Res = NERR_Success Then
begin
case AParam of
0: Result := string(PBuf^.wki100_computername);
1: Result := string(PBuf^.wki100_langroup);
end;
end;
end;
 
function GetTheComputerName: string;
begin
Result := GetNetParam(0);
end;
 
function GetTheDomainName: string;
begin
Result := GetNetParam(1);
end;
 
*)
 
function GetDomainName(var outDomainName: WideString): boolean;
var
reg: TRegistry;
begin
outDomainName := '';
reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
result := reg.OpenKeyReadOnly('\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters');
if result then
begin
outDomainName := reg.ReadString('Domain');
reg.CloseKey;
end;
finally
reg.Free;
end;
end;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/DomainName.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/AccountSID.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/ComputerName.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/AccountSID.dpr
0,0 → 1,83
library AccountSID;
 
uses
Windows,
SysUtils,
Classes,
SPgetsid,
UD2_PluginIntf in '..\UD2_PluginIntf.pas',
UD2_PluginUtils in '..\UD2_PluginUtils.pas',
UD2_PluginStatus in '..\UD2_PluginStatus.pas';
 
{$R *.res}
 
const
PLUGIN_GUID: TGUID = '{96374FFC-0A55-46B4-826B-CFD702FB24A2}';
 
function PluginIdentifier: TGUID; cdecl;
begin
result := PLUGIN_GUID;
end;
 
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentifier: WideString;
begin
stIdentifier := GetCurrentUserSid;
result := UD2_WritePascalStringToPointerW(lpIdentifier, cchSize, stIdentifier);
end;
 
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
var
stPluginName: WideString;
primaryLangID: Byte;
begin
primaryLangID := wLangID and $00FF;
if primaryLangID = LANG_GERMAN then
stPluginName := 'SID des Benutzerkontos'
else
stPluginName := 'Account Security Identifier';
result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
end;
 
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
end;
 
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
end;
 
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentificationMethodName: WideString;
begin
stIdentificationMethodName := 'AccountSID';
result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
end;
 
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
begin
result := UD2_STATUS_OK_LICENSED;
end;
 
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
begin
// This function does not use non-generic status codes
result := FALSE;
end;
 
exports
PluginInterfaceID name mnPluginInterfaceID,
PluginIdentifier name mnPluginIdentifier,
PluginNameW name mnPluginNameW,
PluginVendorW name mnPluginVendorW,
PluginVersionW name mnPluginVersionW,
IdentificationMethodNameW name mnIdentificationMethodNameW,
IdentificationStringW name mnIdentificationStringW,
CheckLicense name mnCheckLicense,
DescribeOwnStatusCodeW name mnDescribeOwnStatusCodeW;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/DomainName.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/LAN_IP.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/LAN_MAC.dpr
0,0 → 1,122
library LAN_MAC;
 
uses
Windows,
SysUtils,
Classes,
UD2_PluginIntf in '..\UD2_PluginIntf.pas',
UD2_PluginUtils in '..\UD2_PluginUtils.pas',
UD2_PluginStatus in '..\UD2_PluginStatus.pas',
NetworkUtils in 'NetworkUtils.pas';
 
{$R *.res}
 
const
PLUGIN_GUID: TGUID = '{8E1AA598-67A6-4128-BB9F-7E624647F584}';
 
function PluginIdentifier: TGUID; cdecl;
begin
result := PLUGIN_GUID;
end;
 
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
sl, sl2: TStringList;
i: integer;
ip, mac: string;
ec: DWORD;
begin
sl := TStringList.Create;
sl2 := TStringList.Create;
try
ec := GetLocalMACAddressList(sl2);
if ec = ERROR_NOT_SUPPORTED then
begin
result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
Exit;
end
else if ec <> ERROR_SUCCESS then
begin
result := UD2_STATUS_OSError(ec);
Exit;
end;
 
// This procedure should not find any more MAC addresses...
GetLocalIPAddressList(sl);
for i := 0 to sl.Count-1 do
begin
ip := sl.Strings[i];
ec := GetMACAddress(ip, mac);
if ec = ERROR_NOT_SUPPORTED then
begin
result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
Exit;
end
else if (ec = S_OK) and
(mac <> '') and
(sl2.IndexOf(mac) = -1) then
begin
sl2.add(mac);
end;
end;
result := UD2_WriteStringListToPointerW(lpIdentifier, cchSize, sl2);
finally
sl.Free;
sl2.Free;
end;
end;
 
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
var
stPluginName: WideString;
primaryLangID: Byte;
begin
primaryLangID := wLangID and $00FF;
if primaryLangID = LANG_GERMAN then
stPluginName := 'MAC-Adressen'
else
stPluginName := 'MAC addresses';
result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
end;
 
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
end;
 
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
end;
 
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentificationMethodName: WideString;
begin
stIdentificationMethodName := 'LAN_MAC';
result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
end;
 
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
begin
result := UD2_STATUS_OK_LICENSED;
end;
 
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
begin
// This function does not use non-generic status codes
result := FALSE;
end;
 
exports
PluginInterfaceID name mnPluginInterfaceID,
PluginIdentifier name mnPluginIdentifier,
PluginNameW name mnPluginNameW,
PluginVendorW name mnPluginVendorW,
PluginVersionW name mnPluginVersionW,
IdentificationMethodNameW name mnIdentificationMethodNameW,
IdentificationStringW name mnIdentificationStringW,
CheckLicense name mnCheckLicense,
DescribeOwnStatusCodeW name mnDescribeOwnStatusCodeW;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/GatewayIP.dpr
0,0 → 1,99
library GatewayIP;
 
uses
Windows,
SysUtils,
Classes,
UD2_PluginIntf in '..\UD2_PluginIntf.pas',
UD2_PluginUtils in '..\UD2_PluginUtils.pas',
UD2_PluginStatus in '..\UD2_PluginStatus.pas',
NetworkUtils in 'NetworkUtils.pas';
 
{$R *.res}
 
const
PLUGIN_GUID: TGUID = '{F45C87FF-3A82-4AC8-AA19-C9DC0C6AAF7B}';
 
function PluginIdentifier: TGUID; cdecl;
begin
result := PLUGIN_GUID;
end;
 
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
sl: TStringList;
ec: DWORD;
begin
sl := TStringList.Create;
try
ec := GetGatewayIPAddressList(sl);
if ec = ERROR_NOT_SUPPORTED then
begin
result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
Exit;
end
else if ec <> ERROR_SUCCESS then
begin
result := UD2_STATUS_OSError(ec);
Exit;
end;
result := UD2_WriteStringListToPointerW(lpIdentifier, cchSize, sl);
finally
sl.Free;
end;
end;
 
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
var
stPluginName: WideString;
primaryLangID: Byte;
begin
primaryLangID := wLangID and $00FF;
if primaryLangID = LANG_GERMAN then
stPluginName := 'IP-Adressen der Gateways'
else
stPluginName := 'Gateway IP addresses';
result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
end;
 
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
end;
 
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
end;
 
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentificationMethodName: WideString;
begin
stIdentificationMethodName := 'GatewayIP';
result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
end;
 
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
begin
result := UD2_STATUS_OK_LICENSED;
end;
 
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
begin
// This function does not use non-generic status codes
result := FALSE;
end;
 
exports
PluginInterfaceID name mnPluginInterfaceID,
PluginIdentifier name mnPluginIdentifier,
PluginNameW name mnPluginNameW,
PluginVendorW name mnPluginVendorW,
PluginVersionW name mnPluginVersionW,
IdentificationMethodNameW name mnIdentificationMethodNameW,
IdentificationStringW name mnIdentificationStringW,
CheckLicense name mnCheckLicense,
DescribeOwnStatusCodeW name mnDescribeOwnStatusCodeW;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/DHCP_IP.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/DHCP_MAC.dpr
0,0 → 1,120
library DHCP_MAC;
 
uses
Windows,
SysUtils,
Classes,
UD2_PluginIntf in '..\UD2_PluginIntf.pas',
UD2_PluginUtils in '..\UD2_PluginUtils.pas',
UD2_PluginStatus in '..\UD2_PluginStatus.pas',
NetworkUtils in 'NetworkUtils.pas';
 
{$R *.res}
 
const
PLUGIN_GUID: TGUID = '{574F8C7F-318E-4FA9-96CE-5A6F1FAE67FD}';
 
function PluginIdentifier: TGUID; cdecl;
begin
result := PLUGIN_GUID;
end;
 
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
sl, sl2: TStringList;
i: integer;
ip, mac: string;
ec: DWORD;
begin
sl := TStringList.Create;
sl2 := TStringList.Create;
try
ec := GetDHCPIPAddressList(sl);
if ec = ERROR_NOT_SUPPORTED then
begin
result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
Exit;
end
else if ec <> ERROR_SUCCESS then
begin
result := UD2_STATUS_OSError(ec);
Exit;
end;
 
for i := 0 to sl.Count-1 do
begin
ip := sl.Strings[i];
ec := GetMACAddress(ip, mac);
if ec = ERROR_NOT_SUPPORTED then
begin
result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
Exit;
end
else if (ec = S_OK) and
(mac <> '') and
(sl2.IndexOf(mac) = -1) then
begin
sl2.add(mac);
end;
end;
result := UD2_WriteStringListToPointerW(lpIdentifier, cchSize, sl2);
finally
sl.Free;
sl2.Free;
end;
end;
 
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
var
stPluginName: WideString;
primaryLangID: Byte;
begin
primaryLangID := wLangID and $00FF;
if primaryLangID = LANG_GERMAN then
stPluginName := 'MAC-Adressen der DHCP-Server'
else
stPluginName := 'DHCP MAC addresses';
result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
end;
 
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
end;
 
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
end;
 
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentificationMethodName: WideString;
begin
stIdentificationMethodName := 'DHCP_MAC';
result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
end;
 
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
begin
result := UD2_STATUS_OK_LICENSED;
end;
 
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
begin
// This function does not use non-generic status codes
result := FALSE;
end;
 
exports
PluginInterfaceID name mnPluginInterfaceID,
PluginIdentifier name mnPluginIdentifier,
PluginNameW name mnPluginNameW,
PluginVendorW name mnPluginVendorW,
PluginVersionW name mnPluginVersionW,
IdentificationMethodNameW name mnIdentificationMethodNameW,
IdentificationStringW name mnIdentificationStringW,
CheckLicense name mnCheckLicense,
DescribeOwnStatusCodeW name mnDescribeOwnStatusCodeW;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/ComputerName.dpr
0,0 → 1,95
library ComputerName;
 
uses
Windows,
SysUtils,
Classes,
UD2_PluginIntf in '..\UD2_PluginIntf.pas',
UD2_PluginUtils in '..\UD2_PluginUtils.pas',
UD2_PluginStatus in '..\UD2_PluginStatus.pas';
 
{$R *.res}
 
const
PLUGIN_GUID: TGUID = '{2AD004FF-6BFD-4038-B75B-9527DEABA28F}';
 
function PluginIdentifier: TGUID; cdecl;
begin
result := PLUGIN_GUID;
end;
 
function GetComputerName: string;
// http://www.delphi-treff.de/tipps-tricks/netzwerkinternet/netzwerkeigenschaften/computernamen-des-eigenen-rechners-ermitteln/
var
Len: DWORD;
begin
Len := MAX_COMPUTERNAME_LENGTH+1;
SetLength(Result,Len);
if Windows.GetComputerName(PChar(Result), Len) then
SetLength(Result,Len)
else
RaiseLastOSError;
end;
 
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentifier: WideString;
begin
stIdentifier := GetComputerName;
result := UD2_WritePascalStringToPointerW(lpIdentifier, cchSize, stIdentifier);
end;
 
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
var
stPluginName: WideString;
primaryLangID: Byte;
begin
primaryLangID := wLangID and $00FF;
if primaryLangID = LANG_GERMAN then
stPluginName := 'Computer-Name'
else
stPluginName := 'Computer name';
result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
end;
 
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
end;
 
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
end;
 
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentificationMethodName: WideString;
begin
stIdentificationMethodName := 'ComputerName';
result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
end;
 
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
begin
result := UD2_STATUS_OK_LICENSED;
end;
 
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
begin
// This function does not use non-generic status codes
result := FALSE;
end;
 
exports
PluginInterfaceID name mnPluginInterfaceID,
PluginIdentifier name mnPluginIdentifier,
PluginNameW name mnPluginNameW,
PluginVendorW name mnPluginVendorW,
PluginVersionW name mnPluginVersionW,
IdentificationMethodNameW name mnIdentificationMethodNameW,
IdentificationStringW name mnIdentificationStringW,
CheckLicense name mnCheckLicense,
DescribeOwnStatusCodeW name mnDescribeOwnStatusCodeW;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/LAN_IP.dpr
0,0 → 1,99
library LAN_IP;
 
uses
Windows,
SysUtils,
Classes,
UD2_PluginIntf in '..\UD2_PluginIntf.pas',
UD2_PluginUtils in '..\UD2_PluginUtils.pas',
UD2_PluginStatus in '..\UD2_PluginStatus.pas',
NetworkUtils in 'NetworkUtils.pas';
 
{$R *.res}
 
const
PLUGIN_GUID: TGUID = '{3C7D83F7-742C-4B3C-9F63-D12DEB442D27}';
 
function PluginIdentifier: TGUID; cdecl;
begin
result := PLUGIN_GUID;
end;
 
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
sl: TStringList;
ec: DWORD;
begin
sl := TStringList.Create;
try
ec := GetLocalIPAddressList(sl);
if ec = ERROR_NOT_SUPPORTED then
begin
result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
Exit;
end
else if ec <> ERROR_SUCCESS then
begin
result := UD2_STATUS_OSError(ec);
Exit;
end;
result := UD2_WriteStringListToPointerW(lpIdentifier, cchSize, sl);
finally
sl.Free;
end;
end;
 
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
var
stPluginName: WideString;
primaryLangID: Byte;
begin
primaryLangID := wLangID and $00FF;
if primaryLangID = LANG_GERMAN then
stPluginName := 'IP-Adressen'
else
stPluginName := 'IP addresses';
result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
end;
 
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
end;
 
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
end;
 
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentificationMethodName: WideString;
begin
stIdentificationMethodName := 'LAN_IP';
result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
end;
 
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
begin
result := UD2_STATUS_OK_LICENSED;
end;
 
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
begin
// This function does not use non-generic status codes
result := FALSE;
end;
 
exports
PluginInterfaceID name mnPluginInterfaceID,
PluginIdentifier name mnPluginIdentifier,
PluginNameW name mnPluginNameW,
PluginVendorW name mnPluginVendorW,
PluginVersionW name mnPluginVersionW,
IdentificationMethodNameW name mnIdentificationMethodNameW,
IdentificationStringW name mnIdentificationStringW,
CheckLicense name mnCheckLicense,
DescribeOwnStatusCodeW name mnDescribeOwnStatusCodeW;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/DHCP_IP.dpr
0,0 → 1,99
library DHCP_IP;
 
uses
Windows,
SysUtils,
Classes,
UD2_PluginIntf in '..\UD2_PluginIntf.pas',
UD2_PluginUtils in '..\UD2_PluginUtils.pas',
UD2_PluginStatus in '..\UD2_PluginStatus.pas',
NetworkUtils in 'NetworkUtils.pas';
 
{$R *.res}
 
const
PLUGIN_GUID: TGUID = '{3E0B99F7-E062-4FF1-B656-7D512BE90C47}';
 
function PluginIdentifier: TGUID; cdecl;
begin
result := PLUGIN_GUID;
end;
 
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
sl: TStringList;
ec: DWORD;
begin
sl := TStringList.Create;
try
ec := GetDHCPIPAddressList(sl);
if ec = ERROR_NOT_SUPPORTED then
begin
result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
Exit;
end
else if ec <> ERROR_SUCCESS then
begin
result := UD2_STATUS_OSError(ec);
Exit;
end;
result := UD2_WriteStringListToPointerW(lpIdentifier, cchSize, sl);
finally
sl.Free;
end;
end;
 
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
var
stPluginName: WideString;
primaryLangID: Byte;
begin
primaryLangID := wLangID and $00FF;
if primaryLangID = LANG_GERMAN then
stPluginName := 'IP-Adresse der DHCP-Server'
else
stPluginName := 'DHCP IP addresses';
result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
end;
 
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
end;
 
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
end;
 
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentificationMethodName: WideString;
begin
stIdentificationMethodName := 'DHCP_IP';
result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
end;
 
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
begin
result := UD2_STATUS_OK_LICENSED;
end;
 
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
begin
// This function does not use non-generic status codes
result := FALSE;
end;
 
exports
PluginInterfaceID name mnPluginInterfaceID,
PluginIdentifier name mnPluginIdentifier,
PluginNameW name mnPluginNameW,
PluginVendorW name mnPluginVendorW,
PluginVersionW name mnPluginVersionW,
IdentificationMethodNameW name mnIdentificationMethodNameW,
IdentificationStringW name mnIdentificationStringW,
CheckLicense name mnCheckLicense,
DescribeOwnStatusCodeW name mnDescribeOwnStatusCodeW;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/ExecuteAlways.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/ExecuteAlways.dpr
0,0 → 1,82
library ExecuteAlways;
 
uses
Windows,
SysUtils,
Classes,
UD2_PluginIntf in '..\UD2_PluginIntf.pas',
UD2_PluginUtils in '..\UD2_PluginUtils.pas',
UD2_PluginStatus in '..\UD2_PluginStatus.pas';
 
{$R *.res}
 
const
PLUGIN_GUID: TGUID = '{7A1189CD-8F68-4068-9477-C50B9DCCCECC}';
 
function PluginIdentifier: TGUID; cdecl;
begin
result := PLUGIN_GUID;
end;
 
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentifier: WideString;
begin
stIdentifier := 'Always';
result := UD2_WritePascalStringToPointerW(lpIdentifier, cchSize, stIdentifier);
end;
 
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
var
stPluginName: WideString;
primaryLangID: Byte;
begin
primaryLangID := wLangID and $00FF;
if primaryLangID = LANG_GERMAN then
stPluginName := 'Immer ausführen'
else
stPluginName := 'Execute always';
result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
end;
 
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
end;
 
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
end;
 
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentificationMethodName: WideString;
begin
stIdentificationMethodName := 'Execute';
result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
end;
 
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
begin
result := UD2_STATUS_OK_LICENSED;
end;
 
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
begin
// This function does not use non-generic status codes
result := FALSE;
end;
 
exports
PluginInterfaceID name mnPluginInterfaceID,
PluginIdentifier name mnPluginIdentifier,
PluginNameW name mnPluginNameW,
PluginVendorW name mnPluginVendorW,
PluginVersionW name mnPluginVersionW,
IdentificationMethodNameW name mnIdentificationMethodNameW,
IdentificationStringW name mnIdentificationStringW,
CheckLicense name mnCheckLicense,
DescribeOwnStatusCodeW name mnDescribeOwnStatusCodeW;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/GatewayMAC.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/LAN_MAC.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/GatewayIP.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/GatewayMAC.dpr
0,0 → 1,120
library GatewayMAC;
 
uses
Windows,
SysUtils,
Classes,
UD2_PluginIntf in '..\UD2_PluginIntf.pas',
UD2_PluginUtils in '..\UD2_PluginUtils.pas',
UD2_PluginStatus in '..\UD2_PluginStatus.pas',
NetworkUtils in 'NetworkUtils.pas';
 
{$R *.res}
 
const
PLUGIN_GUID: TGUID = '{C24258AE-2092-41CA-9DB5-313B38954D01}';
 
function PluginIdentifier: TGUID; cdecl;
begin
result := PLUGIN_GUID;
end;
 
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
sl, sl2: TStringList;
i: integer;
ip, mac: string;
ec: DWORD;
begin
sl := TStringList.Create;
sl2 := TStringList.Create;
try
ec := GetGatewayIPAddressList(sl);
if ec = ERROR_NOT_SUPPORTED then
begin
result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
Exit;
end
else if ec <> ERROR_SUCCESS then
begin
result := UD2_STATUS_OSError(ec);
Exit;
end;
 
for i := 0 to sl.Count-1 do
begin
ip := sl.Strings[i];
ec := GetMACAddress(ip, mac);
if ec = ERROR_NOT_SUPPORTED then
begin
result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
Exit;
end
else if (ec = S_OK) and
(mac <> '') and
(sl2.IndexOf(mac) = -1) then
begin
sl2.add(mac);
end;
end;
result := UD2_WriteStringListToPointerW(lpIdentifier, cchSize, sl2);
finally
sl.Free;
sl2.Free;
end;
end;
 
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
var
stPluginName: WideString;
primaryLangID: Byte;
begin
primaryLangID := wLangID and $00FF;
if primaryLangID = LANG_GERMAN then
stPluginName := 'MAC-Adressen der Gateways'
else
stPluginName := 'Gateway MAC addresses';
result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
end;
 
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
end;
 
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
begin
result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
end;
 
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
var
stIdentificationMethodName: WideString;
begin
stIdentificationMethodName := 'GatewayMAC';
result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
end;
 
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
begin
result := UD2_STATUS_OK_LICENSED;
end;
 
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
begin
// This function does not use non-generic status codes
result := FALSE;
end;
 
exports
PluginInterfaceID name mnPluginInterfaceID,
PluginIdentifier name mnPluginIdentifier,
PluginNameW name mnPluginNameW,
PluginVendorW name mnPluginVendorW,
PluginVersionW name mnPluginVersionW,
IdentificationMethodNameW name mnIdentificationMethodNameW,
IdentificationStringW name mnIdentificationStringW,
CheckLicense name mnCheckLicense,
DescribeOwnStatusCodeW name mnDescribeOwnStatusCodeW;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/DHCP_MAC.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/ExecuteAlways.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/GatewayIP.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/LAN_MAC.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/GatewayMAC.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=0
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=GatewayMAC plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-GatewayMAC
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=GatewayMAC.dll
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/Plugins/ExecuteAlways.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=0
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=ExecuteAlways plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-ExecuteAlways
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=ExecuteAlways.dll
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/Plugins/DHCP_IP.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/DHCP_MAC.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=0
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=DHCP_MAC plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-DHCP_MAC
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=DHCP_MAC.dll
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/Plugins/LAN_IP.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=0
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=LAN_IP plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-LAN_IP
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=LAN_IP.dll
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/Plugins/GatewayMAC.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/DHCP_MAC.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/LAN_IP.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/Plugins/iphlp.pas
0,0 → 1,148
unit iphlp;
 
interface
 
uses
Windows;
 
const
MAX_INTERFACE_NAME_LEN = $100;
ERROR_SUCCESS = 0;
MAXLEN_IFDESCR = $100;
MAXLEN_PHYSADDR = 8;
 
MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0 ;
MIB_IF_OPER_STATUS_UNREACHABLE = 1;
MIB_IF_OPER_STATUS_DISCONNECTED = 2;
MIB_IF_OPER_STATUS_CONNECTING = 3;
MIB_IF_OPER_STATUS_CONNECTED = 4;
MIB_IF_OPER_STATUS_OPERATIONAL = 5;
 
MIB_IF_TYPE_OTHER = 1;
MIB_IF_TYPE_ETHERNET = 6;
MIB_IF_TYPE_TOKENRING = 9;
MIB_IF_TYPE_FDDI = 15;
MIB_IF_TYPE_PPP = 23;
MIB_IF_TYPE_LOOPBACK = 24;
MIB_IF_TYPE_SLIP = 28;
 
MIB_IF_ADMIN_STATUS_UP = 1;
MIB_IF_ADMIN_STATUS_DOWN = 2;
MIB_IF_ADMIN_STATUS_TESTING = 3;
 
type
MIB_IFROW = Record
wszName: Array[0 .. (MAX_INTERFACE_NAME_LEN*2-1)] of char;
dwIndex: LongInt;
dwType: LongInt;
dwMtu: LongInt;
dwSpeed: LongInt;
dwPhysAddrLen: LongInt;
bPhysAddr: Array[0 .. (MAXLEN_PHYSADDR-1)] of Byte;
dwAdminStatus: LongInt;
dwOperStatus: LongInt;
dwLastChange: LongInt;
dwInOctets: LongInt;
dwInUcastPkts: LongInt;
dwInNUcastPkts: LongInt;
dwInDiscards: LongInt;
dwInErrors: LongInt;
dwInUnknownProtos: LongInt;
dwOutOctets: LongInt;
dwOutUcastPkts: LongInt;
dwOutNUcastPkts: LongInt;
dwOutDiscards: LongInt;
dwOutErrors: LongInt;
dwOutQLen: LongInt;
dwDescrLen: LongInt;
bDescr: Array[0 .. (MAXLEN_IFDESCR - 1)] of Char;
end;
 
const
MAX_HOSTNAME_LEN = 128;
MAX_DOMAIN_NAME_LEN = 128;
MAX_SCOPE_ID_LEN = 256;
 
MAX_ADAPTER_NAME_LENGTH = 256;
MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
MAX_ADAPTER_ADDRESS_LENGTH = 8;
 
IPHelper = 'iphlpapi.dll';
 
type
PIPAddressString = ^TIPAddressString;
PIPMaskString = ^TIPAddressString;
TIPAddressString = record
_String: array[0..(4 * 4) - 1] of Char;
end;
TIPMaskString = TIPAddressString;
PIPAddrString = ^TIPAddrString;
TIPAddrString = packed record
Next: PIPAddrString;
IpAddress: TIPAddressString;
IpMask: TIPMaskString;
Context: DWORD;
end;
PFixedInfo = ^TFixedInfo;
TFixedInfo = packed record
HostName: array[0..MAX_HOSTNAME_LEN + 4 - 1] of Char;
DomainName: array[0..MAX_DOMAIN_NAME_LEN + 4 - 1] of Char;
CurrentDnsServer: PIPAddrString;
DnsServerList: TIPAddrString;
NodeType: UINT;
ScopeId: array[0..MAX_SCOPE_ID_LEN + 4 - 1] of Char;
EnableRouting,
EnableProxy,
EnableDns: UINT;
end;
 
IP_ADDRESS_STRING = record
S: array [0..15] of Char;
end;
IP_MASK_STRING = IP_ADDRESS_STRING;
PIP_MASK_STRING = ^IP_MASK_STRING;
 
PIP_ADDR_STRING = ^IP_ADDR_STRING;
IP_ADDR_STRING = record
Next: PIP_ADDR_STRING;
IpAddress: IP_ADDRESS_STRING;
IpMask: IP_MASK_STRING;
Context: DWORD;
end;
 
PIP_ADAPTER_INFO = ^IP_ADAPTER_INFO;
IP_ADAPTER_INFO = record
Next: PIP_ADAPTER_INFO;
ComboIndex: DWORD;
AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;
Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char;
AddressLength: UINT;
Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE;
Index: DWORD;
Type_: UINT;
DhcpEnabled: UINT;
CurrentIpAddress: PIP_ADDR_STRING;
IpAddressList: IP_ADDR_STRING;
GatewayList: IP_ADDR_STRING;
DhcpServer: IP_ADDR_STRING;
HaveWins: BOOL;
PrimaryWinsServer: IP_ADDR_STRING;
SecondaryWinsServer: IP_ADDR_STRING;
LeaseObtained: Cardinal;
LeaseExpires: Cardinal;
end;
 
function GetAdaptersInfo(pAdapterInfo: PIP_ADAPTER_INFO; pOutBufLen: PULONG): DWORD; stdcall;
function GetNetworkParams(pFixedInfo: PFixedInfo; pOutBufLen: PULONG): DWORD; stdcall;
function SendArp(DestIP, SrcIP: ULONG; pMacAddr: PULONG; PhyAddrLen: PULONG) : DWORD; stdcall;
function GetIfTable(pIfTable: Pointer; var pdwSize: LongInt; bOrder: LongInt): LongInt; stdcall;
 
implementation
 
function GetAdaptersInfo; external IPHelper Name 'GetAdaptersInfo';
function GetNetworkParams; external IPHelper Name 'GetNetworkParams';
function SendArp; external IPHelper name 'SendARP';
function GetIfTable; external IPHelper Name 'GetIfTable';
 
end.
 
/tags/UserDetect2_Release_2.0/Plugins/LAN_MAC.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=0
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=LAN_MAC plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-LAN_MAC
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=LAN_MAC.dll
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/Plugins/GatewayIP.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=0
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=GatewayIP plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-GatewayIP
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=GatewayIP.dll
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/Plugins/SPGetSid.pas
0,0 → 1,159
(******************************************************************************)
(* SPGetSid - Retrieve the current user's SID in text format *)
(* *)
(* Copyright (c) 2004 Shorter Path Software *)
(* http://www.shorterpath.com *)
(******************************************************************************)
 
 
{
SID is a data structure of variable length that identifies user, group,
and computer accounts.
Every account on a network is issued a unique SID when the account is first created.
Internal processes in Windows refer to an account's SID
rather than the account's user or group name.
}
 
 
unit SPGetSid;
 
interface
 
uses
Windows, SysUtils;
 
function GetCurrentUserSid: string;
 
implementation
 
const
HEAP_ZERO_MEMORY = $00000008;
SID_REVISION = 1; // Current revision level
 
type
PTokenUser = ^TTokenUser;
TTokenUser = packed record
User: TSidAndAttributes;
end;
 
function ConvertSid(Sid: PSID; pszSidText: PChar; var dwBufferLen: DWORD): BOOL;
var
psia: PSIDIdentifierAuthority;
dwSubAuthorities: DWORD;
dwSidRev: DWORD;
dwCounter: DWORD;
dwSidSize: DWORD;
begin
Result := False;
 
dwSidRev := SID_REVISION;
 
if not IsValidSid(Sid) then Exit;
 
psia := GetSidIdentifierAuthority(Sid);
 
dwSubAuthorities := GetSidSubAuthorityCount(Sid)^;
 
dwSidSize := (15 + 12 + (12 * dwSubAuthorities) + 1) * SizeOf(Char);
 
if (dwBufferLen < dwSidSize) then
begin
dwBufferLen := dwSidSize;
SetLastError(ERROR_INSUFFICIENT_BUFFER);
Exit;
end;
 
StrFmt(pszSidText, 'S-%u-', [dwSidRev]);
 
if (psia.Value[0] <> 0) or (psia.Value[1] <> 0) then
StrFmt(pszSidText + StrLen(pszSidText),
'0x%.2x%.2x%.2x%.2x%.2x%.2x',
[psia.Value[0], psia.Value[1], psia.Value[2],
psia.Value[3], psia.Value[4], psia.Value[5]])
else
StrFmt(pszSidText + StrLen(pszSidText),
'%u',
[DWORD(psia.Value[5]) +
DWORD(psia.Value[4] shl 8) +
DWORD(psia.Value[3] shl 16) +
DWORD(psia.Value[2] shl 24)]);
 
dwSidSize := StrLen(pszSidText);
 
for dwCounter := 0 to dwSubAuthorities - 1 do
begin
StrFmt(pszSidText + dwSidSize, '-%u',
[GetSidSubAuthority(Sid, dwCounter)^]);
dwSidSize := StrLen(pszSidText);
end;
 
Result := True;
end;
 
function ObtainTextSid(hToken: THandle; pszSid: PChar;
var dwBufferLen: DWORD): BOOL;
var
dwReturnLength: DWORD;
dwTokenUserLength: DWORD;
tic: TTokenInformationClass;
ptu: Pointer;
begin
Result := False;
dwReturnLength := 0;
dwTokenUserLength := 0;
tic := TokenUser;
ptu := nil;
 
if not GetTokenInformation(hToken, tic, ptu, dwTokenUserLength,
dwReturnLength) then
begin
if GetLastError = ERROR_INSUFFICIENT_BUFFER then
begin
ptu := HeapAlloc(GetProcessHeap, HEAP_ZERO_MEMORY, dwReturnLength);
if ptu = nil then Exit;
dwTokenUserLength := dwReturnLength;
dwReturnLength := 0;
 
if not GetTokenInformation(hToken, tic, ptu, dwTokenUserLength,
dwReturnLength) then Exit;
end
else
Exit;
end;
 
if not ConvertSid((PTokenUser(ptu).User).Sid, pszSid, dwBufferLen) then Exit;
 
if not HeapFree(GetProcessHeap, 0, ptu) then Exit;
 
Result := True;
end;
 
function GetCurrentUserSid: string;
var
hAccessToken: THandle;
bSuccess: BOOL;
dwBufferLen: DWORD;
szSid: array[0..260] of Char;
begin
Result := '';
 
bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True,
hAccessToken);
if not bSuccess then
begin
if GetLastError = ERROR_NO_TOKEN then
bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
hAccessToken);
end;
if bSuccess then
begin
ZeroMemory(@szSid, SizeOf(szSid));
dwBufferLen := SizeOf(szSid);
 
if ObtainTextSid(hAccessToken, szSid, dwBufferLen) then
Result := szSid;
CloseHandle(hAccessToken);
end;
end;
 
end.
/tags/UserDetect2_Release_2.0/Plugins/DHCP_IP.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=0
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=DHCP_IP plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-DHCP_IP
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=DHCP_IP.dll
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/devcpp_plugins/ExamplePlugin.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/devcpp_plugins/ExamplePlugin.layout
0,0 → 1,28
[Editor_0]
CursorCol=23
CursorRow=15
TopLine=1
LeftChar=1
[Editor_1]
CursorCol=36
CursorRow=21
TopLine=1
LeftChar=1
[Editors]
Order=3,1,0
Focused=0
[Editor_2]
CursorCol=21
CursorRow=6
TopLine=1
LeftChar=1
[Editor_3]
CursorCol=11
CursorRow=6
TopLine=1
LeftChar=1
[Editor_4]
CursorCol=1
CursorRow=5
TopLine=1
LeftChar=1
/tags/UserDetect2_Release_2.0/devcpp_plugins/ExamplePlugin.dev
0,0 → 1,102
[Project]
FileName=ExamplePlugin.dev
Name=ExamplePlugin
Type=3
Ver=2
ObjFiles=
Includes=
Libs=
PrivateResource=
ResourceIncludes=
MakeIncludes=
Compiler=
CppCompiler=
Linker=
IsCpp=1
Icon=
ExeOutput=
ObjectOutput=
LogOutput=
LogOutputEnabled=0
OverrideOutput=0
OverrideOutputName=ExamplePlugin.dll
HostApplication=
UseCustomMakefile=0
CustomMakefile=
CommandLine=
Folders=
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=3
CompilerSettings=0000000100000000000000000
UnitCount=5
 
[VersionInfo]
Major=1
Minor=0
Release=0
Build=0
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=1.0.0.0
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=1.0.0.0
AutoIncBuildNr=0
SyncProduct=1
 
[Unit2]
FileName=../ud2_api.h
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
 
[Unit1]
FileName=ExamplePlugin.cpp
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
 
[Unit3]
FileName=../ud2_utils.h
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
 
[Unit4]
FileName=../ud2_status.h
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
 
[Unit5]
FileName=../ud2_guid.h
CompileCpp=1
Folder=
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
 
/tags/UserDetect2_Release_2.0/devcpp_plugins/ExamplePlugin.cpp
0,0 → 1,39
#define BUILDING_DLL
 
#include "../ud2_api.h"
 
UD2_API GUID PluginIdentifier() {
return __GUID("{7576BD8F-A0C4-436F-B953-B137CBFD9FC7}");
}
 
UD2_API UD2_STATUS PluginNameW(LPWSTR lpPluginName, DWORD cchSize, LANGID wLangID) {
LPCWSTR str = L"Test-Plugin in C++";
return UD2_WriteStrW(lpPluginName, cchSize, str);
}
 
UD2_API UD2_STATUS PluginVersionW(LPWSTR lpPluginVersion, DWORD cchSize, LANGID wLangID) {
LPCWSTR str = L"1.0";
return UD2_WriteStrW(lpPluginVersion, cchSize, str);
}
 
UD2_API UD2_STATUS PluginVendorW(LPWSTR lpPluginVendor, DWORD cchSize, LANGID wLangID) {
LPCWSTR str = L"ViaThinkSoft";
return UD2_WriteStrW(lpPluginVendor, cchSize, str);
}
 
UD2_API UD2_STATUS CheckLicense(LPVOID lpReserved) {
return UD2_STATUS_OK_LICENSED;
}
 
UD2_API UD2_STATUS IdentificationMethodNameW(LPWSTR lpIdentificationMethodName, DWORD cchSize) {
return UD2_WriteStrW(lpIdentificationMethodName, cchSize, L"TEST");
}
 
UD2_API UD2_STATUS IdentificationStringW(LPWSTR lpIdentifier, DWORD cchSize) {
return UD2_WriteStrW(lpIdentifier, cchSize, L"Example");
}
 
UD2_API BOOL DescribeOwnStatusCodeW(LPWSTR lpErrorDescription, DWORD cchSize, UD2_STATUS statusCode, LANGID wLangID) {
// This function does not use non-generic status codes
return FALSE;
}
/tags/UserDetect2_Release_2.0/devcpp_plugins/libExamplePlugin.def
0,0 → 1,10
EXPORTS
CheckLicense @1
DescribeOwnStatusCodeW @2
IdentificationMethodNameW @3
IdentificationStringW @4
PluginIdentifier @5
PluginInterfaceID @6
PluginNameW @7
PluginVendorW @8
PluginVersionW @9
/tags/UserDetect2_Release_2.0/ud2_status.h
0,0 → 1,81
#ifndef _UD2_STATUS_H_
#define _UD2_STATUS_H_
 
#include <stdio.h>
 
#include "ud2_api.h"
 
typedef WORD UD2_STATUSCAT;
typedef GUID UD2_STATUSAUTH;
typedef DWORD UD2_STATUSMSG;
typedef DWORD UD2_STATUSEXTRAINFO;
 
#pragma pack(push, 1) // no alignment
typedef struct _UD2_STATUS {
BYTE cbSize;
BYTE bReserved;
UD2_STATUSCAT wCategory;
UD2_STATUSAUTH grAuthority;
UD2_STATUSMSG dwMessage;
UD2_STATUSEXTRAINFO dwExtraInfo;
} UD2_STATUS;
#pragma pack(pop) // restore previous pack value
 
const UD2_STATUSCAT UD2_STATUSCAT_SUCCESS = 0;
const UD2_STATUSCAT UD2_STATUSCAT_NOT_AVAIL = 1;
const UD2_STATUSCAT UD2_STATUSCAT_FAILED = 2;
 
const UD2_STATUSAUTH UD2_STATUSAUTH_GENERIC = __GUID("{90F53368-1EFB-4350-A6BC-725C69938B9C}");
 
const UD2_STATUS UD2_STATUS_OK_UNSPECIFIED = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_SUCCESS, UD2_STATUSAUTH_GENERIC, 0, 0 };
const UD2_STATUS UD2_STATUS_OK_SINGLELINE = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_SUCCESS, UD2_STATUSAUTH_GENERIC, 1, 0 };
const UD2_STATUS UD2_STATUS_OK_MULTILINE = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_SUCCESS, UD2_STATUSAUTH_GENERIC, 2, 0 };
const UD2_STATUS UD2_STATUS_OK_LICENSED = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_SUCCESS, UD2_STATUSAUTH_GENERIC, 3, 0 };
 
const UD2_STATUS UD2_STATUS_NOTAVAIL_UNSPECIFIED = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_NOT_AVAIL, UD2_STATUSAUTH_GENERIC, 0, 0 };
const UD2_STATUS UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_NOT_AVAIL, UD2_STATUSAUTH_GENERIC, 1, 0 };
const UD2_STATUS UD2_STATUS_NOTAVAIL_HW_NOT_SUPPORTED = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_NOT_AVAIL, UD2_STATUSAUTH_GENERIC, 2, 0 };
const UD2_STATUS UD2_STATUS_NOTAVAIL_NO_ENTITIES = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_NOT_AVAIL, UD2_STATUSAUTH_GENERIC, 3, 0 };
const UD2_STATUS UD2_STATUS_NOTAVAIL_WINAPI_CALL_FAILURE = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_NOT_AVAIL, UD2_STATUSAUTH_GENERIC, 4, 0 };
 
const UD2_STATUS UD2_STATUS_FAILURE_UNSPECIFIED = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_FAILED, UD2_STATUSAUTH_GENERIC, 0, 0 };
const UD2_STATUS UD2_STATUS_FAILURE_BUFFER_TOO_SMALL = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_FAILED, UD2_STATUSAUTH_GENERIC, 1, 0 };
const UD2_STATUS UD2_STATUS_FAILURE_INVALID_ARGS = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_FAILED, UD2_STATUSAUTH_GENERIC, 2, 0 };
const UD2_STATUS UD2_STATUS_FAILURE_PLUGIN_NOT_LICENSED = { sizeof(UD2_STATUS), 0, UD2_STATUSCAT_FAILED, UD2_STATUSAUTH_GENERIC, 3, 0 };
 
int UD2_STATUS_FormatStatusCode(char* szStr, size_t cchLen, UD2_STATUS grStatus) {
// 00 0000 {44332211-1234-ABCD-EFEF-001122334455} 00000000 00000000
if (cchLen < 73) szStr = NULL; // incl. null-terminator
return sprintf(szStr, "%02x %04x {%08lX-%04hX-%04hX-%02hhX%02hhX-%02hhX%02hhX%02hhX%02hhX%02hhX%02hhX} %08x %08x",
grStatus.bReserved,
grStatus.wCategory,
grStatus.grAuthority,
grStatus.grAuthority.Data1, grStatus.grAuthority.Data2, grStatus.grAuthority.Data3,
grStatus.grAuthority.Data4[0], grStatus.grAuthority.Data4[1], grStatus.grAuthority.Data4[2], grStatus.grAuthority.Data4[3],
grStatus.grAuthority.Data4[4], grStatus.grAuthority.Data4[5], grStatus.grAuthority.Data4[6], grStatus.grAuthority.Data4[7],
grStatus.dwMessage,
grStatus.dwExtraInfo);
}
 
bool UD2_STATUS_Equal(UD2_STATUS grStatus1, UD2_STATUS grStatus2, bool compareExtraInfo) {
return (grStatus1.bReserved == grStatus2.bReserved) &&
(grStatus1.wCategory == grStatus2.wCategory) &&
IsEqualGUID(grStatus1.grAuthority, grStatus2.grAuthority) &&
(grStatus1.dwMessage == grStatus2.dwMessage);
if (compareExtraInfo && (grStatus1.dwExtraInfo != grStatus2.dwExtraInfo)) return false;
}
 
#ifdef __cplusplus
bool operator==(const UD2_STATUS& lhs, const UD2_STATUS& rhs) {
return UD2_STATUS_Equal(lhs, rhs, true);
}
#endif
 
UD2_STATUS UD2_STATUS_OSError(DWORD dwOSError) {
UD2_STATUS ret = UD2_STATUS_NOTAVAIL_WINAPI_CALL_FAILURE;
ret.dwExtraInfo = dwOSError;
return ret;
}
 
#endif
/tags/UserDetect2_Release_2.0/ud2_guid.h
0,0 → 1,57
#ifndef _UD2_GUID_H_
#define _UD2_GUID_H_
 
#include <assert.h>
 
// #define USE_OLE32
 
#ifdef USE_OLE32
#pragma comment(linker, "-lOle32")
#define __GUID(x) _StringToGUID(L ## x)
const GUID _StringToGUID(LPCWSTR lpcstrGUID) {
GUID guid;
assert(SUCCEEDED(CLSIDFromString(lpcstrGUID, &guid)));
return guid;
}
#else
#define __GUID(x) _StringToGUID(x)
const bool StringToGUID(const char* szGUID, GUID* g) {
// Check if string is a valid GUID
if (strlen(szGUID) != 38) return false;
for (int i=0; i<strlen(szGUID); ++i) {
char g = szGUID[i];
if (i == 0) {
if (g != '{') return false;
} else if (i == 37) {
if (g != '}') return false;
} else if ((i == 9) || (i == 14) || (i == 19) || (i == 24)) {
if (g != '-') return false;
} else {
if (!((g >= '0') && (g <= '9')) && !((g >= 'A') && (g <= 'F')) && !((g >= 'a') && (g <= 'f'))) {
return false;
}
}
}
char* pEnd;
g->Data1 = strtoul(szGUID+1,&pEnd,16);
g->Data2 = strtoul(szGUID+10,&pEnd,16);
g->Data3 = strtoul(szGUID+15,&pEnd,16);
char b[3]; b[2] = 0;
memcpy(&b[0], szGUID+20, 2*sizeof(b[0])); g->Data4[0] = strtoul(&b[0], &pEnd, 16);
memcpy(&b[0], szGUID+22, 2*sizeof(b[0])); g->Data4[1] = strtoul(&b[0], &pEnd, 16);
for (int i=0; i<6; ++i) {
memcpy(&b[0], szGUID+25+i*2, 2*sizeof(b[0])); g->Data4[2+i] = strtoul(&b[0], &pEnd, 16);
}
return true;
}
const GUID _StringToGUID(const char* szGUID) {
GUID g;
assert(StringToGUID(szGUID, &g));
return g;
}
#endif
 
#endif
 
/tags/UserDetect2_Release_2.0/UD2_Utils.pas
0,0 → 1,399
unit UD2_Utils;
 
interface
 
{$IF CompilerVersion >= 25.0}
{$LEGACYIFEND ON}
{$IFEND}
 
{$INCLUDE 'UserDetect2.inc'}
 
uses
Windows, SysUtils, Dialogs, ShellAPI;
 
const
EXITCODE_OK = 0;
EXITCODE_TASK_NOTHING_MATCHES = 1;
EXITCODE_RUN_FAILURE = 2;
EXITCODE_TASK_NOT_EXISTS = 10;
EXITCODE_INI_NOT_FOUND = 11;
EXITCODE_RUNCMD_SYNTAX_ERROR = 12;
EXTICODE_SYNTAX_ERROR = 13;
 
type
TArrayOfString = array of String;
 
TIconFileIdx = record
FileName: string;
IconIndex: integer;
end;
 
const
// Prefixes for UD2_RunCmd()
UD2_RUN_IN_OWN_DIRECTORY_PREFIX = '$RIOD$';
 
function SplitString(const aSeparator, aString: String; aMax: Integer = 0): TArrayOfString;
function BetterInterpreteBool(str: String): boolean;
function GetOwnCmdName: string;
function ExpandEnvStr(const szInput: string): string;
procedure UD2_RunCMD(cmdLine: string; WindowMode: integer);
function SplitIconString(IconString: string): TIconFileIdx;
// function GetHTML(AUrl: string): string;
procedure VTS_CheckUpdates(VTSID, CurVer: string);
function FormatOSError(ec: DWORD): string;
 
implementation
 
uses
WinInet, Forms;
 
function SplitString(const aSeparator, aString: String; aMax: Integer = 0): TArrayOfString;
// http://stackoverflow.com/a/2626991/3544341
var
i, strt, cnt: Integer;
sepLen: Integer;
 
procedure AddString(aEnd: Integer = -1);
var
endPos: Integer;
begin
if (aEnd = -1) then
endPos := i
else
endPos := aEnd + 1;
 
if (strt < endPos) then
result[cnt] := Copy(aString, strt, endPos - strt)
else
result[cnt] := '';
 
Inc(cnt);
end;
 
begin
if (aString = '') or (aMax < 0) then
begin
SetLength(result, 0);
EXIT;
end;
 
if (aSeparator = '') then
begin
SetLength(result, 1);
result[0] := aString;
EXIT;
end;
 
sepLen := Length(aSeparator);
SetLength(result, (Length(aString) div sepLen) + 1);
 
i := 1;
strt := i;
cnt := 0;
while (i <= (Length(aString)- sepLen + 1)) do
begin
if (aString[i] = aSeparator[1]) then
if (Copy(aString, i, sepLen) = aSeparator) then
begin
AddString;
 
if (cnt = aMax) then
begin
SetLength(result, cnt);
EXIT;
end;
 
Inc(i, sepLen - 1);
strt := i + 1;
end;
 
Inc(i);
end;
 
AddString(Length(aString));
 
SetLength(result, cnt);
end;
 
function BetterInterpreteBool(str: String): boolean;
resourcestring
LNG_CANNOT_INTERPRETE_BOOL = 'Cannot determinate the boolean value of "%s"';
begin
str := LowerCase(str);
if (str = 'yes') or (str = 'true') or (str = '1') then
result := true
else if (str = 'no') or (str = 'false') or (str = '0') then
result := false
else
raise EConvertError.CreateFmt(LNG_CANNOT_INTERPRETE_BOOL, [str]);
end;
 
function GetOwnCmdName: string;
begin
result := ParamStr(0);
result := ExtractFileName(result);
result := ChangeFileExt(result, '');
result := UpperCase(result);
end;
 
function ExpandEnvStr(const szInput: string): string;
// http://stackoverflow.com/a/2833147/3544341
const
MAXSIZE = 32768;
begin
SetLength(Result, MAXSIZE);
SetLength(Result, ExpandEnvironmentStrings(pchar(szInput),
@Result[1],length(Result)));
end;
 
function FormatOSError(ec: DWORD): string;
resourcestring
LNG_UNKNOWN_ERROR = 'Operating system error %d';
begin
result := SysErrorMessage(ec);
 
// Some errors have no error message, e.g. error 193 (BAD_EXE_FORMAT) in the German version of Windows 10
if result = '' then result := Format(LNG_UNKNOWN_ERROR, [ec]);
end;
 
function CheckLastOSCall(AThrowException: boolean): boolean;
var
LastError: Cardinal;
begin
LastError := GetLastError;
result := LastError = 0;
if not result then
begin
if AThrowException then
begin
RaiseLastOSError;
end
else
begin
MessageDlg(FormatOSError(LastError), mtError, [mbOK], 0);
end;
end;
end;
 
function SplitIconString(IconString: string): TIconFileIdx;
var
p: integer;
begin
p := Pos(',', IconString);
 
if p = 0 then
begin
result.FileName := IconString;
result.IconIndex := 0;
end
else
begin
result.FileName := ExpandEnvStr(copy(IconString, 0, p-1));
result.IconIndex := StrToInt(Copy(IconString, p+1, Length(IconString)-p));
end;
end;
 
procedure UD2_RunCMD(cmdLine: string; WindowMode: integer);
// Discussion: http://stackoverflow.com/questions/32802679/acceptable-replacement-for-winexec/32804669#32804669
// Version 1: http://pastebin.com/xQjDmyVe
// --> CreateProcess + ShellExecuteEx
// --> Problem: Run-In-Same-Directory functionality is not possible
// (requires manual command and argument separation)
// Version 2: http://pastebin.com/YpUmF5rd
// --> Splits command and arguments manually, and uses ShellExecute
// --> Problem: error handling wrong
// --> Problem: Run-In-Same-Directory functionality is not implemented
// Current version:
// --> Splits command and arguments manually, and uses ShellExecute
// --> Run-In-Same-Directory functionality is implemented
resourcestring
LNG_INVALID_SYNTAX = 'The command line has an invalid syntax';
var
cmdFile, cmdArgs, cmdDir: string;
p: integer;
sei: TShellExecuteInfo;
begin
// We need a function which does following:
// 1. Replace the Environment strings, e.g. %SystemRoot%
// 2. Runs EXE files with parameters (e.g. "cmd.exe /?")
// 3. Runs EXE files without path (e.g. "calc.exe")
// 4. Runs EXE files without extension (e.g. "calc")
// 5. Runs non-EXE files (e.g. "Letter.doc")
// 6. Commands with white spaces (e.g. "C:\Program Files\xyz.exe") must be enclosed in quotes.
cmdLine := ExpandEnvStr(cmdLine);
 
// Split command line from argument list
if Copy(cmdLine, 1, 1) = '"' then
begin
cmdLine := Copy(cmdLine, 2, Length(cmdLine)-1);
p := Pos('"', cmdLine);
if p = 0 then
begin
// No matching quotes
// CreateProcess() handles the whole command line as single file name ("abc -> "abc")
// ShellExecuteEx() does not accept the command line
ExitCode := EXITCODE_RUNCMD_SYNTAX_ERROR;
MessageDlg(LNG_INVALID_SYNTAX, mtError, [mbOK], 0);
Exit;
end;
cmdFile := Copy(cmdLine, 1, p-1);
cmdArgs := Copy(cmdLine, p+2, Length(cmdLine)-p-1);
end
else
begin
p := Pos(' ', cmdLine);
if p = 0 then
begin
cmdFile := cmdLine;
cmdArgs := '';
end
else
begin
cmdFile := Copy(cmdLine, 1, p-1);
cmdArgs := Copy(cmdLine, p+1, Length(cmdLine)-p);
end;
end;
 
if Copy(cmdLine, 1, Length(UD2_RUN_IN_OWN_DIRECTORY_PREFIX)) = UD2_RUN_IN_OWN_DIRECTORY_PREFIX then
begin
cmdLine := Copy(cmdLine, 1+Length(UD2_RUN_IN_OWN_DIRECTORY_PREFIX), Length(cmdLine)-Length(UD2_RUN_IN_OWN_DIRECTORY_PREFIX));
 
cmdFile := ExtractFileName(cmdLine);
cmdDir := ExtractFilePath(cmdLine);
end
else
begin
cmdFile := cmdLine;
cmdDir := '';
end;
 
ZeroMemory(@sei, SizeOf(sei));
sei.cbSize := SizeOf(sei);
sei.lpFile := PChar(cmdFile);
{$IFNDEF PREFER_SHELLEXECUTEEX_MESSAGES}
sei.fMask := SEE_MASK_FLAG_NO_UI;
{$ENDIF}
if cmdArgs <> '' then sei.lpParameters := PChar(cmdArgs);
if cmdDir <> '' then sei.lpDirectory := PChar(cmdDir);
sei.nShow := WindowMode;
if ShellExecuteEx(@sei) then Exit;
{$IFNDEF PREFER_SHELLEXECUTEEX_MESSAGES}
if not CheckLastOSCall(false) then ExitCode := EXITCODE_RUN_FAILURE;
{$ENDIF}
end;
 
function GetHTML(AUrl: string): string;
// http://www.delphipraxis.net/post43515.html
var
databuffer : array[0..4095] of char;
ResStr : string;
hSession, hfile: hInternet;
dwindex,dwcodelen,dwread,dwNumber: cardinal;
dwcode : array[1..20] of char;
res : pchar;
Str : pchar;
begin
ResStr:='';
if system.pos('http://',lowercase(AUrl))=0 then
AUrl:='http://'+AUrl;
 
// Hinzugefügt
Application.ProcessMessages;
 
hSession:=InternetOpen('InetURL:/1.0',
INTERNET_OPEN_TYPE_PRECONFIG,
nil,
nil,
0);
if assigned(hsession) then
begin
// Hinzugefügt
application.ProcessMessages;
 
hfile:=InternetOpenUrl(
hsession,
pchar(AUrl),
nil,
0,
INTERNET_FLAG_RELOAD,
0);
dwIndex := 0;
dwCodeLen := 10;
 
// Hinzugefügt
application.ProcessMessages;
 
HttpQueryInfo(hfile,
HTTP_QUERY_STATUS_CODE,
@dwcode,
dwcodeLen,
dwIndex);
res := pchar(@dwcode);
dwNumber := sizeof(databuffer)-1;
if (res ='200') or (res ='302') then
begin
while (InternetReadfile(hfile,
@databuffer,
dwNumber,
DwRead)) do
begin
 
// Hinzugefügt
application.ProcessMessages;
 
if dwRead =0 then
break;
databuffer[dwread]:=#0;
Str := pchar(@databuffer);
resStr := resStr + Str;
end;
end
else
ResStr := 'Status:'+res;
if assigned(hfile) then
InternetCloseHandle(hfile);
end;
 
// Hinzugefügt
Application.ProcessMessages;
 
InternetCloseHandle(hsession);
Result := resStr;
end;
 
procedure VTS_CheckUpdates(VTSID, CurVer: string);
resourcestring
(*
LNG_DOWNLOAD_ERR = 'Ein Fehler ist aufgetreten. Wahrscheinlich ist keine Internetverbindung aufgebaut, oder der der ViaThinkSoft-Server temporär offline.';
LNG_NEW_VERSION = 'Eine neue Programmversion ist vorhanden. Möchten Sie diese jetzt herunterladen?';
LNG_NO_UPDATE = 'Es ist keine neue Programmversion vorhanden.';
*)
LNG_DOWNLOAD_ERR = 'An error occurred while searching for updates. Please check your internet connection and firewall.';
LNG_NEW_VERSION = 'A new version is available. Do you want to download it now?';
LNG_NO_UPDATE = 'You already have the newest program version.';
var
temp: string;
begin
temp := GetHTML('http://www.viathinksoft.de/update/?id='+VTSID);
if Copy(temp, 0, 7) = 'Status:' then
begin
MessageDlg(LNG_DOWNLOAD_ERR, mtError, [mbOK], 0);
end
else
begin
if GetHTML('http://www.viathinksoft.de/update/?id='+VTSID) <> CurVer then
begin
if MessageDlg(LNG_NEW_VERSION, mtConfirmation, mbYesNoCancel, 0) = ID_YES then
begin
shellexecute(application.handle, 'open', pchar('http://www.viathinksoft.de/update/?id=@spacemission'), '', '', sw_normal);
end;
end
else
begin
MessageDlg(LNG_NO_UPDATE, mtInformation, [mbOk], 0);
end;
end;
end;
 
end.
/tags/UserDetect2_Release_2.0/ud2_utils.h
0,0 → 1,21
#ifndef _UD2_UTILS_H_
#define _UD2_UTILS_H_
 
#include <windows.h>
 
#include "ud2_api.h"
 
BOOL UD2_IsMultilineW(LPCWSTR lpSrc) {
return wcschr(lpSrc, UD2_MULTIPLE_ITEMS_DELIMITER) != NULL;
// return wcspbrk(lpSrc, L"\r\n") != NULL;
}
 
UD2_STATUS UD2_WriteStrW(LPWSTR lpDest, DWORD cchDestSize, LPCWSTR lpSrc) {
if (wcslen(lpSrc) > cchDestSize-1) return UD2_STATUS_FAILURE_BUFFER_TOO_SMALL;
wcscpy(lpDest, lpSrc);
if (wcslen(lpSrc) == 0) return UD2_STATUS_NOTAVAIL_UNSPECIFIED;
if (UD2_IsMultilineW(lpSrc)) return UD2_STATUS_OK_MULTILINE;
return UD2_STATUS_OK_SINGLELINE;
}
 
#endif
/tags/UserDetect2_Release_2.0/Documentation.rtf
0,0 → 1,1203
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1031\deflangfe1031\themelang1031\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}
{\f36\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;}
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f59\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f60\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}
{\f62\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f63\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f64\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f65\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}
{\f66\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f67\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f379\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f380\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
{\f382\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f383\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f386\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f387\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}
{\f399\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\f400\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}{\f402\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}{\f403\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}
{\f406\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\f407\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}{\f409\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f410\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
{\f412\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f413\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f416\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f417\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}
{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}
{\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}
{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\chyperlink\ctint255\cshade255\red5\green99\blue193;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap
\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1
\af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 \snext0 \sqformat \spriority0 Normal;}{\s1\ql \li0\ri0\sb240\sa60\sl259\slmult1
\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1031\langfe1031\kerning32\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031
\sbasedon0 \snext0 \slink15 \sqformat \spriority9 \styrsid4871690 heading 1;}{\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025
\ltrch\fcs0 \b\i\fs28\lang1031\langfe1031\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext0 \slink16 \sunhideused \sqformat \spriority9 \styrsid16262044 heading 2;}{\*\cs10 \additive \sunhideused \spriority1
Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031
\snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\fs32\kerning32\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink1 \slocked \spriority9 \styrsid4871690 \'dcberschrift 1 Zchn;}{\*\cs16
\additive \rtlch\fcs1 \ab\ai\af0\afs28 \ltrch\fcs0 \b\i\fs28\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink2 \slocked \spriority9 \styrsid16262044 \'dcberschrift 2 Zchn;}{\*\cs17 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17
\sbasedon10 \sunhideused \styrsid9307250 Hyperlink;}{\s18\qc \li0\ri0\sb240\sa60\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0
\b\fs32\lang1031\langfe1031\kerning28\loch\f31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext0 \slink19 \sqformat \spriority10 \styrsid5325168 Title;}{\*\cs19 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0
\b\fs32\kerning28\loch\f31502\hich\af31502\dbch\af31501 \sbasedon10 \slink18 \slocked \spriority10 \styrsid5325168 Titel Zchn;}{\s20\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025
\ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 \snext20 \sqformat \spriority1 \styrsid9132286 No Spacing;}}{\*\listtable{\list\listtemplateid-1858021260\listhybrid{\listlevel\levelnfc0\levelnfcn0
\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67567631\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0
\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67567641\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1
\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567643\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
\levelspace0\levelindent0{\leveltext\leveltemplateid67567631\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0
\levelindent0{\leveltext\leveltemplateid67567641\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0
{\leveltext\leveltemplateid67567643\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\leveltemplateid67567631\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\leveltemplateid67567641\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\leveltemplateid67567643\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li6480\lin6480 }{\listname ;}\listid601692740}{\list\listtemplateid1211160680\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360
\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0
\fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\lin4320 }
{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23
\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 }{\listname ;}\listid846022938}{\list\listtemplateid-306535956\listhybrid{\listlevel\levelnfc0
\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67567631\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0
\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567641\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2
\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567643\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0
\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567631\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1
\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567641\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative
\levelspace0\levelindent0{\leveltext\leveltemplateid67567643\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0
\levelindent0{\leveltext\leveltemplateid67567631\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0
{\leveltext\leveltemplateid67567641\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\leveltemplateid67567643\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li6480\lin6480 }{\listname ;}\listid1281301155}{\list\listtemplateid-145336956\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360
\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0
\fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\lin4320 }
{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23
\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 }{\listname ;}\listid1330524869}{\list\listtemplateid132298292\listhybrid{\listlevel\levelnfc23
\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360
\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619
\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}
\f10\fbias0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0
\fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\lin5760 }{\listlevel
\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 }{\listname ;}\listid1377975272}
{\list\listtemplateid816618932\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\lin720 }
{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0
\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1
\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360
\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0
\fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 }
{\listname ;}\listid1468545555}{\list\listtemplateid-1254869828\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67567631\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1
\af0 \ltrch\fcs0 \fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567641\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0
\ltrch\fcs0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567643\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0
\fi-180\li2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567631\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0
\fi-360\li2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567641\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0
\fi-360\li3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567643\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0
\fi-180\li4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567631\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0
\fi-360\li5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567641\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0
\fi-360\li5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67567643\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0
\fi-180\li6480\lin6480 }{\listname ;}\listid1652171673}{\list\listtemplateid-630935730\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567617
\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0
\fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\lin2160 }
{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23
\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0
\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
\levelspace360\levelindent0{\leveltext\leveltemplateid67567617\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567619\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext\leveltemplateid67567621
\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\lin6480 }{\listname ;}\listid1730224345}{\list\listtemplateid607951628\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\leveltext
\leveltemplateid67567631\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567641\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567643\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567631\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567641\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567643\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567631\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567641\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567643\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li6480\lin6480 }{\listname ;}\listid1772311604}{\list\listtemplateid1436039568\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0
\levelstartat1\levelspace360\levelindent0{\leveltext\leveltemplateid67567631\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
\levelspace360\levelindent0{\leveltext\leveltemplateid67567641\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360
\levelindent0{\leveltext\leveltemplateid67567643\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0
{\leveltext\leveltemplateid67567631\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567641\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567643\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567631\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567641\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace360\levelindent0{\leveltext
\leveltemplateid67567643\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li6480\lin6480 }{\listname ;}\listid2091078015}{\list\listtemplateid819635246\listhybrid{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0
\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67567631\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fbias0 \fi-360\li720\lin720 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative
\levelspace0\levelindent0{\leveltext\leveltemplateid67567641\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0
\levelindent0{\leveltext\leveltemplateid67567643\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li2160\lin2160 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0
{\leveltext\leveltemplateid67567631\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\leveltemplateid67567641\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li3600\lin3600 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\leveltemplateid67567643\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li4320\lin4320 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\leveltemplateid67567631\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5040\lin5040 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\leveltemplateid67567641\'02\'07.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-360\li5760\lin5760 }{\listlevel\levelnfc2\levelnfcn2\leveljc2\leveljcn2\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext
\leveltemplateid67567643\'02\'08.;}{\levelnumbers\'01;}\rtlch\fcs1 \af0 \ltrch\fcs0 \fi-180\li6480\lin6480 }{\listname ;}\listid2130318317}}{\*\listoverridetable{\listoverride\listid2130318317\listoverridecount0\ls1}{\listoverride\listid601692740
\listoverridecount0\ls2}{\listoverride\listid1468545555\listoverridecount0\ls3}{\listoverride\listid1377975272\listoverridecount0\ls4}{\listoverride\listid846022938\listoverridecount0\ls5}{\listoverride\listid1730224345\listoverridecount0\ls6}
{\listoverride\listid2091078015\listoverridecount0\ls7}{\listoverride\listid1281301155\listoverridecount0\ls8}{\listoverride\listid1772311604\listoverridecount0\ls9}{\listoverride\listid1652171673\listoverridecount0\ls10}{\listoverride\listid1330524869
\listoverridecount0\ls11}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid150970\rsid156011\rsid203795\rsid206584\rsid288678\rsid460155\rsid538759\rsid668536\rsid674965
\rsid938415\rsid1340899\rsid1599487\rsid1647630\rsid1657439\rsid1730088\rsid1929326\rsid1966307\rsid1981563\rsid2388964\rsid2576803\rsid2753010\rsid2884605\rsid3022222\rsid3025658\rsid3028086\rsid3163531\rsid3285525\rsid3569955\rsid3622538\rsid3635325
\rsid3895034\rsid3943969\rsid3998625\rsid4476179\rsid4656946\rsid4871690\rsid5064448\rsid5114084\rsid5178738\rsid5325168\rsid5733712\rsid5793177\rsid5907818\rsid6372815\rsid6442210\rsid6511812\rsid6707673\rsid6709676\rsid6776079\rsid6896162\rsid6964071
\rsid7105396\rsid7146872\rsid7495966\rsid7544628\rsid7814608\rsid8086032\rsid8269150\rsid8799422\rsid9121458\rsid9132286\rsid9180311\rsid9257259\rsid9258736\rsid9307250\rsid9318354\rsid9373535\rsid9388365\rsid9596859\rsid9704937\rsid9711883\rsid9838644
\rsid10516537\rsid10644118\rsid10766123\rsid10829644\rsid10842502\rsid11096861\rsid11404612\rsid11426136\rsid11541424\rsid11754596\rsid11882324\rsid11930278\rsid11931191\rsid12134973\rsid12146773\rsid12258161\rsid12390765\rsid12666715\rsid12719322
\rsid12853255\rsid12933746\rsid13119319\rsid13328561\rsid13381599\rsid13506709\rsid13852431\rsid13961185\rsid13966640\rsid13978329\rsid14159743\rsid14251116\rsid14488370\rsid14512558\rsid14576865\rsid14754795\rsid15078789\rsid15082545\rsid15082913
\rsid15095912\rsid15153839\rsid15484970\rsid15536699\rsid15888011\rsid15940546\rsid16212651\rsid16262044\rsid16282930\rsid16384757\rsid16387594\rsid16410202\rsid16413704}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0
\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Daniel Marschall}{\creatim\yr2015\mo9\dy22\hr19\min3}{\revtim\yr2015\mo10\dy3\hr22\min9}{\version106}{\edmins0}{\nofpages13}{\nofwords2815}{\nofchars17735}{\nofcharsws20509}{\vern57439}}
{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1417\margr1417\margt1417\margb1134\gutter0\ltrsect
\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120
\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot9121458 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}
{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}
{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9
\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\s18\qc \li0\ri0\sb240\sa60\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid5325168 \rtlch\fcs1
\ab\af0\afs32\alang1025 \ltrch\fcs0 \b\fs32\lang1031\langfe1031\kerning28\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \fs40\lang1033\langfe1031\langnp1033\insrsid5325168\charrsid15082913
\hich\af31502\dbch\af31501\loch\f31502 ViaThinkSoft UserDetect2}{\rtlch\fcs1 \af0 \ltrch\fcs0 \fs40\lang1033\langfe1031\langnp1033\insrsid5325168
\par }\pard\plain \ltrpar\qr \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12134973 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973 \hich\af31506\dbch\af31505\loch\f31506 Daniel Marschall
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9132286 \hich\af31506\dbch\af31505\loch\f31506 3 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13506709 \hich\af31506\dbch\af31505\loch\f31506 October }{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973 \hich\af31506\dbch\af31505\loch\f31506 2015}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\par }\pard\plain \ltrpar\s1\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid4871690 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0
\b\fs32\lang1031\langfe1031\kerning32\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9307250 \hich\af31502\dbch\af31501\loch\f31502 What is UserDetect2?
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9307250 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9307250 \hich\af31506\dbch\af31505\loch\f31506 UserDetect2 is a program }{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 that allows the user to execute different programs in \hich\af31506\dbch\af31505\loch\f31506 dependency of their current environment (MAC}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 addresses, }{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 u}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 ser}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 name, }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 c}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 omputer}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506
name), so that a single executable file, e.g. shared over a network drive, a flash drive or external hard disk, can perform tasks for different work stations.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13328561
\hich\af31506\dbch\af31505\loch\f31506 The environment ident\hich\af31506\dbch\af31505\loch\f31506 ifications can be extended by plugins.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13328561\charrsid9307250
\par }\pard\plain \ltrpar\s1\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid12666715 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0
\b\fs32\lang1031\langfe1031\kerning32\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid4871690 \hich\af31502\dbch\af31501\loch\f31502 Usage}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13119319 \hich\af31502\dbch\af31501\loch\f31502 example}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid4871690
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506
You have an external harddisk which you use for a daily backup with }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15082913 \hich\af31506\dbch\af31505\loch\f31506 Microsoft }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 RoboCopy or any other backup tool.
\par \hich\af31506\dbch\af31505\loch\f31506 You use this external drive to perform backups for different computers.
\par \hich\af31506\dbch\af31505\loch\f31506 Additionally, you \hich\af31506\dbch\af31505\loch\f31506
want to decide if the computer should be shutdown after the backup, or not. (Can be useful if you leave the computer alone when you go to bed, while the backup is performing)
\par \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 If you have 2 computers with the names \'93\loch\f31506 \hich\f31506 JohnPC\'94\loch\f31506 \hich\f31506 and \'93\loch\f31506 \hich\f31506 JohnLaptop\'94\loch\f31506 , then you would
\hich\af31506\dbch\af31505\loch\f31506 probably need 4 batch files:
\par }\pard \ltrpar\ql \li720\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\pararsid12666715 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715
\hich\af31506\dbch\af31505\loch\f31506 E:\\JohnPC\\backup_no_shutdown.bat
\par \hich\af31506\dbch\af31505\loch\f31506 E:\\JohnPC\\backup_shutdown.bat
\par \hich\af31506\dbch\af31505\loch\f31506 E:\\JohnLaptop\\backup_no_shutdown.bat
\par \hich\af31506\dbch\af31505\loch\f31506 E:\\JohnLaptop\\backup_shutdown.bat
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506
If you accidently start the wrong batch file, the backups will be inconsistent, and there may\hich\af31506\dbch\af31505\loch\f31506 be data loss.
\par \hich\af31506\dbch\af31505\loch\f31506 But if you use UserDetect2, you could create following Task}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973 \hich\af31506\dbch\af31505\loch\f31506 Definition }{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 File:
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\hich\af2\dbch\af31505\loch\f2 [}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 NoShutdown}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\hich\af2\dbch\af31505\loch\f2 ]
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 Description=Run backup without shutdown}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
 
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 ComputerName:JohnPC}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\hich\af2\dbch\af31505\loch\f2 =}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 JohnPC\\backup_no_shutdown.bat}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 ComputerName:JohnLaptop}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\hich\af2\dbch\af31505\loch\f2 =}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 JohnLaptop\\backup_no_shutdown.bat}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912 \hich\af2\dbch\af31505\loch\f2 [}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 Shutdown}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912 \hich\af2\dbch\af31505\loch\f2 ]
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 Description=Run backup and shutdown}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 ComputerName:JohnPC}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\hich\af2\dbch\af31505\loch\f2 =}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 JohnPC\\backup_shutdown.bat}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 ComputerName:JohnLaptop}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\hich\af2\dbch\af31505\loch\f2 =}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 JohnLaptop\\backup_shutdown.bat}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715
\par \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 In this case, you would only need to run \'93\loch\f31506 E:\\\hich\f31506 UserDetect2.exe\'94\loch\f31506 (maybe even use it}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid8799422 \hich\af31506\dbch\af31505\loch\f31506 as AutoRun}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 application}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid8799422 \hich\af31506\dbch\af31505\loch\f31506 , if you are working with Windows Vista or previous versions of Windows}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715
\hich\af31506\dbch\af31505\loch\f31506 ) and then select if you want to perform a backup with or without shutdown. UserDetect2 will select the correct batch file for you.
\par }\pard\plain \ltrpar\s1\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid12666715 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0
\b\fs32\lang1031\langfe1031\kerning32\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912 \hich\af31502\dbch\af31501\loch\f31502 Command Line}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31502\dbch\af31501\loch\f31502 usage}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15484970 \hich\af31506\dbch\af31505\loch\f31506 Syntax:\tab \tab }{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 \hich\af2\dbch\af31505\loch\f2 UD2.exe [}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973 \hich\af2\dbch\af31505\loch\f2 TaskDefinitionFi
\hich\af2\dbch\af31505\loch\f2 le}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 \hich\af2\dbch\af31505\loch\f2 [TaskName]]}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15484970
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid16387594 {\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid16387594\charrsid9388365
\hich\af31506\dbch\af31505\loch\f31506 Examples:
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155
\hich\af2\dbch\af31505\loch\f2 UD2.exe}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 without parameters
\par }\pard \ltrpar\ql \li720\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\pararsid16387594 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715
\hich\af31506\dbch\af31505\loch\f31506 The GUI of UserDetect2 will be used.
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155
\hich\af2\dbch\af31505\loch\f2 UD2.exe Foo.ini
\par }\pard \ltrpar\ql \li720\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\pararsid16387594 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715
\hich\af31506\dbch\af31505\loch\f31506 The GUI of UserDet}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973 \hich\af31506\dbch\af31505\loch\f31506 ect2 will be used, and the Task Definition }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 File Foo.ini will be used (the default }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973 \hich\af31506\dbch\af31505\loch\f31506
Task Definition File}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155
\hich\af2\dbch\af31505\loch\f2 UD2.exe Foo.ini ExampleTask1
\par }\pard \ltrpar\ql \li720\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\pararsid16387594 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715
\hich\af31506\dbch\af31505\loch\f31506 T\hich\af31506\dbch\af31505\loch\f31506 he GUI will not be used. Instead, the task ExampleTask1 of the Task}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973
\hich\af31506\dbch\af31505\loch\f31506 Definition }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 File Foo.ini will be called immediately.
\par }\pard\plain \ltrpar\s1\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid12666715 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0
\b\fs32\lang1031\langfe1031\kerning32\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11882324 \hich\af31502\dbch\af31501\loch\f31502 Return codes (ErrorLevel)
 
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11882324 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324 \hich\af2\dbch\af31505\loch\f2 EXITCODE_OK = 0
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11882324 \tab \hich\af31506\dbch\af31505\loch\f31506 No error was reported.
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324 \hich\af2\dbch\af31505\loch\f2 EXITCODE_TASK_NOTHING_MATCHES = 1
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11882324 \tab \hich\af31506\dbch\af31505\loch\f31506 The task was found, but no definition matched the current environment.}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324 \hich\af2\dbch\af31505\loch\f2 EXITCODE_RUN_FAILURE = 2
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11882324 \tab \hich\af31506\dbch\af31505\loch\f31506 The task was found, but at least one executable was not found resp. couldn\hich\f31506 \rquote \loch\f31506 t be launched.}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324 \hich\af2\dbch\af31505\loch\f2 EXITCODE_TASK_NOT_EXISTS = 10
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11882324 \tab \hich\af31506\dbch\af31505\loch\f31506 The specified task does not exist.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324
 
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324 \hich\af2\dbch\af31505\loch\f2 EXI\hich\af2\dbch\af31505\loch\f2 TCODE_INI_NOT_FOUND = 11
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11882324 \tab \hich\af31506\dbch\af31505\loch\f31506 The specified Task Definition file does not exist.
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324 \hich\af2\dbch\af31505\loch\f2 EXITCODE_RUNCMD_SYNTAX_ERROR = 12
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11882324 \tab \hich\af31506\dbch\af31505\loch\f31506 The syntax of the command defined in the Task Definition File is wrong.
\par \tab \hich\af31506\dbch\af31505\loch\f31506 In special, the opening quote sign does not have a matching a closing q\hich\af31506\dbch\af31505\loch\f31506 uote sign.}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324 \hich\af2\dbch\af31505\loch\f2 EXTICODE_SYNTAX_ERROR = 13
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11882324 \tab \hich\af31506\dbch\af31505\loch\f31506 The syntax of the arguments passed to UserDetect2.exe is wrong.}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid11882324\charrsid11882324
\par }\pard\plain \ltrpar\s1\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid12666715 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0
\b\fs32\lang1031\langfe1031\kerning32\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14159743 \hich\af31502\dbch\af31501\loch\f31502 Task Definition File (}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid938415 \hich\af31502\dbch\af31501\loch\f31502 U}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14159743 \hich\af31502\dbch\af31501\loch\f31502 ser}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid938415 \hich\af31502\dbch\af31501\loch\f31502 D}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14159743 \hich\af31502\dbch\af31501\loch\f31502 etect}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid938415 \hich\af31502\dbch\af31501\loch\f31502 2}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14159743 \hich\af31502\dbch\af31501\loch\f31502 .ini)}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid4871690
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 The default }{\rtlch\fcs1 \af0 \ltrch\fcs0
\b\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid938415 \hich\af31506\dbch\af31505\loch\f31506 Task Definition File}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 is called }{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid938415 \hich\af31506\dbch\af31505\loch\f31506 U}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 ser}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid938415 \hich\af31506\dbch\af31505\loch\f31506 D}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 etect}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid938415 \hich\af31506\dbch\af31505\loch\f31506 2}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506
.ini . A different INI file can be used using a Command Line argument. If }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3163531 \hich\af31506\dbch\af31505\loch\f31506 no file with the name}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid938415 \hich\af31506\dbch\af31505\loch\f31506 U}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 ser}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid938415 \hich\af31506\dbch\af31505\loch\f31506 D}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 etect}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid938415 \hich\af31506\dbch\af31505\loch\f31506 2}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 .ini}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3163531 \hich\af31506\dbch\af31505\loch\f31506 or <ApplicationName>.ini file is }{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 existing, and no command line argument is used, the GUI will ask the user for the path of the }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12134973 \hich\af31506\dbch\af31505\loch\f31506 Task Definition F\hich\af31506\dbch\af31505\loch\f31506 ile}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 .
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid11426136 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506
Her}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11426136 \hich\af31506\dbch\af31505\loch\f31506 e is an example of a }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973
\hich\af31506\dbch\af31505\loch\f31506 Task Definition File}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11426136 \hich\af31506\dbch\af31505\loch\f31506 :}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid11426136
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\hich\af2\dbch\af31505\loch\f2 [ExampleTask1]
\par \hich\af2\dbch\af31505\loch\f2 Description=Run Task #1
\par \hich\af2\dbch\af31505\loch\f2 Icon=%SystemRoot%\\system32\\Shell32.dll,3
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3163531\charrsid3163531 \hich\af2\dbch\af31505\loch\f2 CloseAfterLaunching}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\hich\af2\dbch\af31505\loch\f2 =true
\par \hich\af2\dbch\af31505\loch\f2 ComputerName:}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7495966 \hich\af2\dbch\af31505\loch\f2 JohnPC}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912 \hich\af2\dbch\af31505\loch\f2 =calc.exe
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1340899 \hich\af2\dbch\af31505\loch\f2 LAN_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 MAC:}{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7495966 \hich\af2\dbch\af31505\loch\f2 66-55-44-33-22-11}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 =notepad}{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912 \hich\af2\dbch\af31505\loch\f2 .exe
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid11931191 \hich\af2\dbch\af31505\loch\f2 Account}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912 \hich\af2\dbch\af31505\loch\f2
SID:S-1-5-21-3669290038-3293053376-393244323-1000=calc.exe}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715
\par
\par \hich\af2\dbch\af31505\loch\f2 [ExampleTask2}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912 \hich\af2\dbch\af31505\loch\f2 ]
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 Description=Run Task #2}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 ComputerName:}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7495966 \hich\af2\dbch\af31505\loch\f2 JohnLaptop}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912 \hich\af2\dbch\af31505\loch\f2 =calc.exe
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1340899 \hich\af2\dbch\af31505\loch\f2 LAN_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 MAC:11-22-33-44-55-}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7495966 \hich\af2\dbch\af31505\loch\f2 66}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 =notepad}{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912 \hich\af2\dbch\af31505\loch\f2 .exe
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12146773 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid11931191 \hich\af2\dbch\af31505\loch\f2 Account}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid15095912 \hich\af2\dbch\af31505\loch\f2 SID:S-1-5-21-3669290038-3293053376-393244323-100}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af2\dbch\af31505\loch\f2 1}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12146773 \hich\af2\dbch\af31505\loch\f2 =calc.exe}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid12146773
\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid15940546 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0
\b\i\fs28\lang1031\langfe1031\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14159743 \hich\af31502\dbch\af31501\loch\f31502 Comments
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14159743 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14159743 \hich\af31506\dbch\af31505\loch\f31506 The Task Definitio
\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 n File allows comments. These comment lines must have a \'93\loch\f31506 \hich\f31506 ;\'94\loch\f31506 at the beginning of the line, for example:
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14159743 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid14159743\charrsid14159743
\hich\af2\dbch\af31505\loch\f2 [MyTask1]
\par \hich\af2\dbch\af31505\loch\f2 ; Description will be shown in the GUI
\par \hich\af2\dbch\af31505\loch\f2 Description=Example
\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid15940546 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0
\b\i\fs28\lang1031\langfe1031\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14159743 \hich\af31502\dbch\af31501\loch\f31502 Section fields}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506
Each section starts with a name in square brackets, e.g. }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid14251116 \hich\af2\dbch\af31505\loch\f2 [ExampleTask1]}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 . There can be multiple sections. Each section defines a task.
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3895034 \hich\af31506\dbch\af31505\loch\f31506 Field }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid3895034
\hich\af2\dbch\af31505\loch\f2 Description
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 The description is an optional field, but is highly recommended. In the GUI, it will be shown as name for the task.
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3895034 \hich\af31506\dbch\af31505\loch\f31506 Field }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid3895034
\hich\af2\dbch\af31505\loch\f2 Icon
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 This is an optional field, to replace the icon of the task with a different icon. The syntax is:
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 Icon: <IconDLL>,<IconIndex>
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 For example, }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155
\hich\af2\dbch\af31505\loch\f2 Icon=%SystemRoot%\\system32\\Shell32.dll,3
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 Will use Icon #3 of the file Shell32.dll (environment variables like }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 %SystemR\hich\af2\dbch\af31505\loch\f2 oot%}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155
\hich\af31506\dbch\af31505\loch\f31506 are resolved).
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3895034 \hich\af31506\dbch\af31505\loch\f31506 Field }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid3163531\charrsid3163531
\hich\af2\dbch\af31505\loch\f2 CloseAfterLaunching}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid3895034
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 This is an o}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255
\hich\af31506\dbch\af31505\loch\f31506 ptional field. If the value is }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 true}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 (or }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid12853255 \hich\af2\dbch\af31505\loch\f2 yes}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 , or }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid12853255 \hich\af2\dbch\af31505\loch\f2 1}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 )}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506
, then the GUI will close once the task is started. Otherw}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 ise, you can write }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 false}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 (or }{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid12853255 \hich\af2\dbch\af31505\loch\f2 no}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 , or }{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid12853255 0}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 )}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 , or }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 remove the field}{\rtlch\fcs1
\af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 The default value is }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid12853255 \hich\af2\dbch\af31505\loch\f2 false}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 .}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12666715
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3163531\charrsid3163531 \hich\af31506\dbch\af31505\loch\f31506 F\hich\af31506\dbch\af31505\loch\f31506 ield }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\ul\lang1033\langfe1031\langnp1033\insrsid3163531\charrsid3163531 \hich\af2\dbch\af31505\loch\f2 WarnIfNothingMatches}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3163531\charrsid3163531
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 This is an optional field.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255
\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 If the value is }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 true}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 (or }{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid12853255 \hich\af2\dbch\af31505\loch\f2 yes}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 , or }{\rtlch\fcs1
\af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid12853255 \hich\af2\dbch\af31505\loch\f2 1}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 ), then a}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3163531 \hich\af31506\dbch\af31505\loch\f31506
warning dialog will be shown if a task is called, but no application could be started, because no identification matches the current environment, or i\hich\af31506\dbch\af31505\loch\f31506 f no identification fields are added in the current task.}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 Otherwise, y}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255\charrsid460155
\hich\af31506\dbch\af31505\loch\f31506 ou can write }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 false}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 (or }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid12853255 \hich\af2\dbch\af31505\loch\f2 no}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 , or }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid12853255 0}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 )}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 , or }{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 remove the field}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255\charrsid460155 .}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 The default value is }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid12853255 \hich\af2\dbch\af31505\loch\f2 false}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255\charrsid460155
\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid16413704 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0
\b\i\fs28\lang1031\langfe1031\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3895034 \hich\af31502\dbch\af31501\loch\f31502 Identification fields}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704 \hich\af31506\dbch\af31505\loch\f31506
Identification fields are located in the Task section, too. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 Each identification }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid16413704 \hich\af31506\dbch\af31505\loch\f31506 f\hich\af31506\dbch\af31505\loch\f31506 ield}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506
has following syntax:
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155
\hich\af2\dbch\af31505\loch\f2 <}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid2884605\charrsid2884605 \hich\af2\dbch\af31505\loch\f2 IdentificationMethodName}{\rtlch\fcs1 \af0 \ltrch\fcs0
\b\lang1033\langfe1031\langnp1033\insrsid2884605\charrsid12258161 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid460155 \hich\af2\dbch\af31505\loch\f2
>:<IdentificationString>=<Command> <Optional Parameters>
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid16387594 {\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid1657439\charrsid9388365
\hich\af31506\dbch\af31505\loch\f31506 Example}{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid16387594\charrsid9388365 \hich\af31506\dbch\af31505\loch\f31506 :}{\rtlch\fcs1 \af0 \ltrch\fcs0
\i\lang1033\langfe1031\langnp1033\insrsid12666715\charrsid9388365
\par }\pard \ltrpar\ql \li720\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\pararsid16387594 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid16387594 \hich\af2\dbch\af31505\loch\f2
ComputerName:John=calc.exe
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 If the plugin }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506
with the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid2884605\charrsid2884605 \hich\af31506\dbch\af31505\loch\f31506 i}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid2884605
\hich\af31506\dbch\af31505\loch\f31506 dentification method n}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid2884605\charrsid2884605 \hich\af31506\dbch\af31505\loch\f31506 ame}{\rtlch\fcs1 \af0 \ltrch\fcs0
\b\lang1033\langfe1031\langnp1033\insrsid2884605\charrsid12258161 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \loch\af31506\dbch\af31505\hich\f31506 \'93\loch\f31506 \hich\f31506
ComputerName\'94\loch\f31506 will }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 returns}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715
\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 the identification \'93\loch\f31506 \hich\f31506 John\'94\loch\f31506 , the\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 n the program \'93\loch\f31506 \hich\f31506 calc.exe\'94\loch\f31506
will be started.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16387594\charrsid16387594
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid16387594 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12258161 \hich\af31506\dbch\af31505\loch\f31506
\hich\f31506 The short name of the plugins, as well as the identification strings can be seen in the GUI in the \'93\loch\f31506 \hich\f31506 Identifications\'94\loch\f31506 tab. The GUI can also create a Task Definition File (INI file) template for you.
 
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3163531 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12258161 \hich\af31506\dbch\af31505\loch\f31506
Alternatively to\hich\af31506\dbch\af31505\loch\f31506 the }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9388365 \hich\af2\dbch\af31505\loch\f2 MethodName}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12258161 \hich\af31506\dbch\af31505\loch\f31506 , you can use the GUID of the plugin. The syntax is }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12258161\charrsid16282930 \{
\hich\af2\dbch\af31505\loch\f2 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\}}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12258161 \hich\af31506\dbch\af31505\loch\f31506 .
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid12258161\charrsid12258161 \hich\af31506\dbch\af31505\loch\f31506 Attention:}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid9388365
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \b\f2\fs22\lang1033\langfe1031\langnp1033\insrsid2884605 \hich\af2\dbch\af31505\loch\f2 1.\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin720\itap0\pararsid3028086 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid2884605 \hich\af2\dbch\af31505\loch\f2 IdentificationMethodName}{\rtlch\fcs1 \af0
\ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid12258161\charrsid12258161 \hich\af31506\dbch\af31505\loch\f31506 and }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12258161\charrsid12853255 \hich\af2\dbch\af31505\loch\f2
IdentificationString}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid12258161\charrsid12258161 \hich\af31506\dbch\af31505\loch\f31506 are case sensitive! If you use a GUID instead of }{\rtlch\fcs1 \af2 \ltrch\fcs0
\b\f2\lang1033\langfe1031\langnp1033\insrsid2884605 \hich\af2\dbch\af31505\loch\f2 IdentificationMethodName}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid12258161\charrsid12258161 \hich\af31506\dbch\af31505\loch\f31506 , either al
\hich\af31506\dbch\af31505\loch\f31506 l digits have to be uppercase, or all digits have to be lowercase, but not mixed.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid12258161
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \b\f31506\fs22\lang1033\langfe1031\langnp1033\insrsid9388365 \hich\af31506\dbch\af31505\loch\f31506 2.\tab}}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid9388365
\hich\af31506\dbch\af31505\loch\f31506 Although it is recommended }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid9388365\charrsid3028086 \hich\af31506\dbch\af31505\loch\f31506 to name the DLL file equally to the }{\rtlch\fcs1
\af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid3028086\charrsid3028086 \hich\af31506\dbch\af31505\loch\f31506 identification method name}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid9388365\charrsid3028086
\hich\af31506\dbch\af31505\loch\f31506 , there is no guarantee that they match. Only the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid3028086\charrsid3028086 \hich\af31506\dbch\af31505\loch\f31506 identification method name }{
\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid9388365\charrsid3028086 \hich\af31506\dbch\af31505\loch\f31506 will be used, not the name of the DLL file!
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3163531 {\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid14512558\charrsid9388365
\hich\af31506\dbch\af31505\loch\f31506 Notes about the command}{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid12258161\charrsid9388365 \hich\af31506\dbch\af31505\loch\f31506 launching}{\rtlch\fcs1 \af0 \ltrch\fcs0
\i\lang1033\langfe1031\langnp1033\insrsid14512558\charrsid9388365 \hich\af31506\dbch\af31505\loch\f31506 :
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid12258161 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\itap0\pararsid12258161 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12258161 \hich\af31506\dbch\af31505\loch\f31506
If multiple identifications are matching (even if the program is the same), the programs will be called anyway.
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid3163531 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls6\adjustright\rin0\lin720\itap0\pararsid14512558 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3163531 \hich\af31506\dbch\af31505\loch\f31506 E}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid3163531\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 nvironment variables like }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3163531\charrsid6372815 \hich\af2\dbch\af31505\loch\f2
%SystemRoot%}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3163531\charrsid460155 \hich\af31506\dbch\af31505\loch\f31506 are resolved}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3163531 .
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid14512558 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14512558
\hich\af31506\dbch\af31505\loch\f31506 Relat\hich\af31506\dbch\af31505\loch\f31506 ive paths are allowed.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14512558\charrsid14512558
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid14512558 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14512558
\hich\af31506\dbch\af31505\loch\f31506 A path }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3163531\charrsid3163531 \hich\af31506\dbch\af31505\loch\f31506 with white spaces (e.g. "C:\\Program Files\\
xyz.exe") must be enclosed in quotes.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3163531
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid14754795 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14754795
\hich\af31506\dbch\af31505\loch\f31506 Also non-executable files, like Word-Documents}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14512558 ,}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14754795
\hich\af31506\dbch\af31505\loch\f31506 can be executed.
\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid16413704 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0
\b\i\fs28\lang1031\langfe1031\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704 \loch\af31502\dbch\af31501\hich\f31502 \'93\loch\f31502 Run in }{\rtlch\fcs1
\af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1340899 \hich\af31502\dbch\af31501\loch\f31502 own}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704 \hich\af31502\dbch\af31501\loch\f31502 \hich\f31502 directory\'94
\loch\f31502 compatibility prefix
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid16413704 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14512558 \hich\af31506\dbch\af31505\loch\f31506
Some applications or batch files require that they are called in their own directory}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704 \hich\af31506\dbch\af31505\loch\f31506
(this is technically a bug), and will fail if the working directory is different. In this case, you can use following special syntax:}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid14512558
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1340899 \hich\af2\dbch\af31505\loch\f2 LAN_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid16413704\charrsid16413704 \hich\af2\dbch\af31505\loch\f2
MAC:11-22-33-44-55-66=}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid1340899 \hich\af2\dbch\af31505\loch\f2 $RIO}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid16413704\charrsid16413704
\hich\af2\dbch\af31505\loch\f2 D$}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid16413704\charrsid16413704 \hich\af2\dbch\af31505\loch\f2 test\\\hich\af2\dbch\af31505\loch\f2 example.bat
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704 \hich\af31506\dbch\af31505\loch\f31506 The prefix }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1340899 \hich\af2\dbch\af31505\loch\f2 $RIO}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid16413704\charrsid16413704 \hich\af2\dbch\af31505\loch\f2 D$}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1340899 \hich\af31506\dbch\af31505\loch\f31506
\hich\f31506 stands for \'93\loch\f31506 Run-i}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704 \hich\af31506\dbch\af31505\loch\f31506 n-}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1340899
\hich\af31506\dbch\af31505\loch\f31506 own-d}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 irectory\'94\loch\f31506
. In this case, the working directory of example.bat will be test\\ , instead of the directory where UserDetect2.exe was started from.
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid12853255\charrsid9388365 \hich\af31506\dbch\af31505\loch\f31506 Note:
\par }\pard \ltrpar\ql \li720\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\pararsid12853255 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704
\hich\af31506\dbch\af31505\loch\f31506 If your application or batch file is intolerant to di\hich\af31506\dbch\af31505\loch\f31506 fferent working directories, please consider following}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12853255 \hich\af31506\dbch\af31505\loch\f31506 to solve this bug \hich\f31506 \endash \loch\f31506 i}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15484970
\hich\af31506\dbch\af31505\loch\f31506 t would be in your interest}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704 \hich\af31506\dbch\af31505\loch\f31506 :
\par \hich\af31506\dbch\af31505\loch\f31506 In Batch files (*.bat), use }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid16413704\charrsid16413704 \hich\af2\dbch\af31505\loch\f2 %~dp0}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid16413704 \hich\af31506\dbch\af31505\loch\f31506 to receive the directory name where the script is located in (including trailing path delimiter).
\par \hich\af31506\dbch\af31505\loch\f31506 In Delphi projects,\hich\af31506\dbch\af31505\loch\f31506 use }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid16413704\charrsid16413704 \hich\af2\dbch\af31505\loch\f2
IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)))}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704 \hich\af31506\dbch\af31505\loch\f31506 to receive this path. You may want to pass this path into }{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid16413704\charrsid16413704 \hich\af2\dbch\af31505\loch\f2 SetCurrentDir()}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16413704 .
\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid15940546 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0
\b\i\fs28\lang1031\langfe1031\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15940546 \hich\af31502\dbch\af31501\loch\f31502 Concatenations
\par }\pard\plain \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12666715 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15940546 \hich\af31506\dbch\af31505\loch\f31506 Multiple identification }{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11096861 \hich\af31506\dbch\af31505\loch\f31506 criteria}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15940546 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506
can be merged with an \'93\loch\f31506 \hich\f31506 AND\'94\loch\f31506 condition. This is done with the expressi\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 on \'93\loch\f31506 \hich\f31506 &&\'94}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid6896162 .
\par
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid7146872\charrsid9388365 \hich\af31506\dbch\af31505\loch\f31506 Example:}{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid15940546\charrsid9388365
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15940546 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15940546
\par }\pard \ltrpar\ql \li720\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin720\itap0\pararsid6896162 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15940546\charrsid460155
\hich\af2\dbch\af31505\loch\f2 ComputerName:}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15940546 \hich\af2\dbch\af31505\loch\f2 ComputerB&&UserName:John}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid15940546\charrsid460155 \hich\af2\dbch\af31505\loch\f2 =calc.exe
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15940546
\par \hich\af31506\dbch\af31505\loch\f31506 Calc.exe will be called at ComputerB, but only when User John is logged in.
\par }\pard\plain \ltrpar\s1\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid4871690 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0
\b\fs32\lang1031\langfe1031\kerning32\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535 \hich\af31502\dbch\af31501\loch\f31502 Troubleshooting
\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid3028086 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0
\b\i\fs28\lang1031\langfe1031\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535 \hich\af31502\dbch\af31501\loch\f31502
Error message "The plugin "Plugins\\<Plugin1>.dll" and the plugin "Plugins\\\hich\af31502\dbch\af31501\loch\f31502 <Plugin2>.dll" have the same identification GUID. The latter will not be loaded.
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9373535 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535 \hich\af31506\dbch\af31505\loch\f31506
This error message can have 2 reasons:}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3028086\charrsid3028086 \hich\af31506\dbch\af31505\loch\f31506 Reason 1
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535 \hich\af31506\dbch\af31505\loch\f31506 You have the same plugin twice, with different file names. In this case, you s}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid3028086 \hich\af31506\dbch\af31505\loch\f31506 hould delete on of these files.
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid3028086\charrsid7814608 \hich\af31506\dbch\af31505\loch\f31506 Solution}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3028086
\hich\af31506\dbch\af31505\loch\f31506 : }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535 \hich\af31506\dbch\af31505\loch\f31506 You mig\hich\af31506\dbch\af31505\loch\f31506
ht want to keep the file with the highest version number and/or modification date.
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3028086\charrsid3028086 \hich\af31506\dbch\af31505\loch\f31506 Reason 2
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535 \hich\af31506\dbch\af31505\loch\f31506
The plugin developer accidently used a GUID twice, or didn't change the GUID while using a code template. In this case you have to create a workaround.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid3028086\charrsid7814608 \hich\af31506\dbch\af31505\loch\f31506 Solution}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3028086
\hich\af31506\dbch\af31505\loch\f31506 : }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535 \hich\af31506\dbch\af31505\loch\f31506 Cr\hich\af31506\dbch\af31505\loch\f31506
eate a new INI file with the name Plugins\\<Name>.ini where <Name> is the filename of one of the conflicting plugins. For example, if the DLL file is named Plugins\\Example.dll , the INI file would be named Plugins\\Example.ini . This INI file }{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid4656946 \hich\af31506\dbch\af31505\loch\f31506 should have fol\hich\af31506\dbch\af31505\loch\f31506 lowing contents:}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4656946 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9373535\charrsid4656946
\hich\af2\dbch\af31505\loch\f2 [Compatibility]
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid9373535 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9373535\charrsid4656946
\hich\af2\dbch\af31505\loch\f2 OverrideGUID=\{936DA01F-9ABD-4D9D-80C7-02AF85C822A8\}
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535 \hich\af31506\dbch\af31505\loch\f31506 Where }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9373535\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 <GUID>}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535 \hich\af31506\dbch\af31505\loch\f31506 is a GUID in the format }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid9373535\charrsid4476179 \{\hich\af2\dbch\af31505\loch\f2 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\}}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535 .
\par \hich\af31506\dbch\af31505\loch\f31506 You }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid12390765 \hich\af31506\dbch\af31505\loch\f31506 can gener}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid4656946\charrsid9318354 \hich\af31506\dbch\af31505\loch\f31506 ate a new GUID at this website: }{\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9318354
\hich\af31506\dbch\af31505\loch\f31506 HYPERLINK "http://}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9318354\charrsid12390765 \hich\af31506\dbch\af31505\loch\f31506 www.viathinksoft.de/~danie
\hich\af31506\dbch\af31505\loch\f31506 l-marschall/tools/uuid_mac_decoder/interprete_uuid.php?uuid=CREATE}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9318354 \hich\af31506\dbch\af31505\loch\f31506 " }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid16410202 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90be000000068007400740070003a002f002f007700770077002e007600690061007400680069006e006b0073006f00660074002e00640065002f007e00640061006e00690065006c002d006d0061007200730063006800
61006c006c002f0074006f006f006c0073002f0075007500690064005f006d00610063005f006400650063006f006400650072002f0069006e00740065007200700072006500740065005f0075007500690064002e007000680070003f0075007500690064003d004300520045004100540045000000795881f43b1d7f48af
2c825dc485276300000000a5ab000100000000650000ea00}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs17\ul\cf17\lang1033\langfe1031\langnp1033\insrsid9318354\charrsid8086032 \hich\af31506\dbch\af31505\loch\f31506 www.viathinkso
\hich\af31506\dbch\af31505\loch\f31506 ft.de/~daniel-marschall/tools/uuid_mac_decoder/interprete_uuid.php?uuid=CREATE}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0
\fs20\lang1033\langfe1031\langnp1033\insrsid9373535\charrsid4476179
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535\charrsid9373535 \hich\af31506\dbch\af31505\loch\f31506 You have to copy the field "Your UUID" and add curly braces around it.
\par \hich\af31506\dbch\af31505\loch\f31506 Please also contact the plugin authors and inform him about the issue.
\par }\pard\plain \ltrpar\s1\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid4871690 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0
\b\fs32\lang1031\langfe1031\kerning32\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid4871690 \hich\af31502\dbch\af31501\loch\f31502 Plugin-Development
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3028086 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3028086 \hich\af31506\dbch\af31505\loch\f31506 Plugins are D
\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 LL files which are copied in the folder \'93\loch\f31506 \hich\f31506 Plugins\'94\loch\f31506
. They are automatically loaded. Please name your DLL file identically to the identification method name you will use (see }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3028086\charrsid12134973 \hich\af2\dbch\af31505\loch\f2
IdentificationMethodNameW}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3028086\charrsid16410202 \hich\af31506\dbch\af31505\loch\f31506 )}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3028086 .}{\rtlch\fcs1
\af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3028086\charrsid3028086
\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid16262044 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0
\b\i\fs28\lang1031\langfe1031\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16262044 \hich\af31502\dbch\af31501\loch\f31502 SDK Contents}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16262044\charrsid16262044
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4871690 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6372815 \hich\af31506\dbch\af31505\loch\f31506 UserDetect}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid13328561\charrsid13328561 \hich\af31506\dbch\af31505\loch\f31506 2 as well as the default plugins \hich\af31506\dbch\af31505\loch\f31506 are developed in Delphi.}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid13328561 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13328561\charrsid13328561 \hich\af31506\dbch\af31505\loch\f31506
However, plugins can be written in a}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5114084 \hich\af31506\dbch\af31505\loch\f31506 ny programming language like C++}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid13328561\charrsid13328561 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13328561 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid16262044 \hich\af31506\dbch\af31505\loch\f31506 The SDK provides}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5114084 \hich\af31506\dbch\af31505\loch\f31506 header files for Delphi and C}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16262044 .
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid16262044\charrsid15484970 \hich\af31506\dbch\af31505\loch\f31506 Delphi}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid9180311
\hich\af31506\dbch\af31505\loch\f31506 units}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid16262044\charrsid15484970 \hich\af31506\dbch\af31505\loch\f31506 :
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid16262044 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin720\itap0\pararsid16262044 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16262044 \hich\af31506\dbch\af31505\loch\f31506 UD2_PluginUtils.pas
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid1730088 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1730088
\hich\af31506\dbch\af31505\loch\f31506 UD2_PluginIntf.pas}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1730088\charrsid1730088
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid1730088 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls4\adjustright\rin0\lin720\itap0\pararsid1730088 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1730088 \hich\af31506\dbch\af31505\loch\f31506 UD2_PluginStatus.pas
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid16262044 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid5114084
\hich\af31506\dbch\af31505\loch\f31506 C}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid9180311 \hich\af31506\dbch\af31505\loch\f31506 header files}{\rtlch\fcs1 \af0 \ltrch\fcs0
\ul\lang1033\langfe1031\langnp1033\insrsid16262044\charrsid15484970 \hich\af31506\dbch\af31505\loch\f31506 :
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid15078789 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin720\itap0\pararsid16262044 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15078789 \hich\af31506\dbch\af31505\loch\f31506 ud2_api}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid16262044 \hich\af31506\dbch\af31505\loch\f31506 .h
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid1730088 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin720\itap0\pararsid1730088 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1730088 \hich\af31506\dbch\af31505\loch\f31506 ud2_utils.h (included via ud2_api.h)
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid1730088 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}\hich\af31506\dbch\af31505\loch\f31506 ud2_guid.h (included via ud2_api.h)
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid11404612 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls5\adjustright\rin0\lin720\itap0\pararsid16262044 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid11404612 \hich\af31506\dbch\af31505\loch\f31506 ud2_status.h (included via ud2_api.h)
 
\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid3025658 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0
\b\i\fs28\lang1031\langfe1031\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3025658 \hich\af31502\dbch\af31501\loch\f31502 Exported functions}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3025658\charrsid13328561
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid668536 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid668536\charrsid13328561 \hich\af31506\dbch\af31505\loch\f31506
A plugin has to export following }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid668536 \hich\af31506\dbch\af31505\loch\f31506 methods, whose names are NOT decorated.
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13328561 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13328561\charrsid13978329
\hich\af31506\dbch\af31505\loch\f31506 In Delphi notation:
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12134973 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 PluginInterfaceID(): TGUID; }{\rtlch\fcs1 \af2 \ltrch\fcs0
\b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 PluginIdentifier(): TGUID; }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ; }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 cdecl}{\rtlch\fcs1
\af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID)\hich\af2\dbch\af31505\loch\f2 : }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2
UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ; }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ; }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 cdecl}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 CheckLicense(lpReserved: LPVOID): }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ; }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 cdecl}{\rtlch\fcs1
\af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cc\hich\af2\dbch\af31505\loch\f2 hSize: DWORD): }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2
UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ; }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid5793177 \hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ; }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 cdecl}{\rtlch\fcs1
\af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 ;}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13328561
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177 \hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177
\hich\af2\dbch\af31505\loch\f2 DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177
\hich\af2\dbch\af31505\loch\f2 cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177 \hich\af2\dbch\af31505\loch\f2 ;
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13328561 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid9318354
\hich\af31506\dbch\af31505\loch\f31506 In C }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13328561\charrsid13978329 \hich\af31506\dbch\af31505\loch\f31506 notation:
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12134973 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid7814608
\hich\af2\dbch\af31505\loch\f2 __cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 GUID PluginInterfaceID();}{\rtlch\fcs1 \af0 \ltrch\fcs0
\ul\lang1033\langfe1031\langnp1033\insrsid12134973
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid7814608 \hich\af2\dbch\af31505\loch\f2 __cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 GUID PluginIdentifier();
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid7814608 \hich\af2\dbch\af31505\loch\f2 __cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10644118\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 PluginNameW(LPWSTR lpPluginName, DWORD cchSize, LANGID wLangID);
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid7814608 \hich\af2\dbch\af31505\loch\f2 __cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10644118\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 PluginVersionW(LPWSTR lpPluginVersion, DWORD cchSize, LANGID wLangID);
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid7814608 \hich\af2\dbch\af31505\loch\f2 __cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10644118\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 PluginVendorW(LPWSTR lpPluginVendor, DWORD cchSize, LANGID wLangID);
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid7814608 \hich\af2\dbch\af31505\loch\f2 __cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10644118\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 CheckLicense(LPVOID lpReserved);
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid7814608 \hich\af2\dbch\af31505\loch\f2 __cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10644118\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 IdentificationMethodNameW(LPWSTR lpIdentificationMethodName, DWORD cchSize);
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid7814608 \hich\af2\dbch\af31505\loch\f2 __cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10644118\charrsid12134973
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid12134973 \hich\af2\dbch\af31505\loch\f2 I\hich\af2\dbch\af31505\loch\f2 dentificationStringW(LPWSTR lpIdentifier, DWORD cchSize);}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177 \hich\af2\dbch\af31505\loch\f2 __cdecl}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177
\hich\af2\dbch\af31505\loch\f2 BOOL DescribeOwnStatusCodeW(LPWSTR lpErrorDescription, DWORD cchSize, UD2_STAT}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid5793177 \hich\af2\dbch\af31505\loch\f2 US statusCode, LANGID wLangID);}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid12134973
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4871690 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13328561
\hich\af31506\dbch\af31505\loch\f31506 Method }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13328561\charrsid13328561 \hich\af2\dbch\af31505\loch\f2 PluginInterfaceID}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13328561
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13978329 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13328561 \hich\af31506\dbch\af31505\loch\f31506
This method has to return the GUID }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13328561\charrsid6372815 \{\hich\af2\dbch\af31505\loch\f2 6C26245E-F79A-416C-8C73-BEA3EC18BB6E\}}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid13978329 \hich\af31506\dbch\af31505\loch\f31506 which is stored in the constant }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid6372815 \hich\af2\dbch\af31505\loch\f2
USERDETECT2_IDPLUGIN_V1}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13978329 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13328561
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid12134973 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid12134973
\hich\af31506\dbch\af31505\loch\f31506 Method }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973\charrsid13328561 \hich\af2\dbch\af31505\loch\f2 PluginIdentifier}{\rtlch\fcs1 \af0 \ltrch\fcs0
\ul\lang1033\langfe1031\langnp1033\insrsid12134973
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973 \hich\af31506\dbch\af31505\loch\f31506 This method has to return a GUID which is unique for this plugin.
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13978329 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid13978329
\hich\af31506\dbch\af31505\loch\f31506 Method }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid13978329 \hich\af2\dbch\af31505\loch\f2 IdentificationString}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\ul\lang1033\langfe1031\langnp1033\insrsid3569955 \hich\af2\dbch\af31505\loch\f2 W}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid13978329
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid288678 \hich\af31506\dbch\af31505\loch\f31506 The}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13978329 \hich\af31506\dbch\af31505\loch\f31506
function returns the}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid288678 \hich\af31506\dbch\af31505\loch\f31506 identification string}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13978329
\hich\af31506\dbch\af31505\loch\f31506 , which }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid288678 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506
is a null-terminated C-string which contains the value of the identification performed. For example, the UserName-Plugin would output \'93}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid288678\charrsid6372815
\hich\af2\dbch\af31505\loch\f2 John<NUL>}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid288678 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 \hich\f31506 . With this output, the task \'93}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid288678\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 UserName:John=calc.exe}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid288678 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506
would be performed (calc.ex\hich\af31506\dbch\af31505\loch\f31506 e will be called).
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \i\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid11096861 \hich\af31506\dbch\af31505\loch\f31506 Annotations:
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1031\langnp1033\insrsid9121458\charrsid9121458 \hich\af31506\dbch\af31505\loch\f31506 1.\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin720\itap0\pararsid13978329 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9121458\charrsid9121458 \hich\af31506\dbch\af31505\loch\f31506
Empty string = no identification could be performed, e.g. }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9121458 \hich\af31506\dbch\af31505\loch\f31506
the MAC-Plugin cannot work on a computer without network interfaces. In this case, the output of the plugin will be IGNORED. For ex}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6372815 \hich\af31506\dbch\af31505\loch\f31506
ample, for the MAC-plugin, the t}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9121458 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 ask \'93}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1340899
\hich\af2\dbch\af31505\loch\f2 LAN_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9121458\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 MAC:=calc.exe}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9121458
\loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 will }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6372815 \hich\af31506\dbch\af31505\loch\f31506 NOT}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid9121458 \hich\af31506\dbch\af31505\loch\f31506 be executed, because the identifica}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid16212651 \hich\af31506\dbch\af31505\loch\f31506
tion string (after the colon) cannot be}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9121458 \hich\af31506\dbch\af31505\loch\f31506 empty.
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1031\langnp1033\insrsid9121458 \hich\af31506\dbch\af31505\loch\f31506 2.\tab}\hich\af31506\dbch\af31505\loch\f31506
Multiple outputs: Multiple identifications, e.g. multiple MAC addresses are separated with a linefeed (0x10). Each identification will be \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 traded separately. For example, if the MAC-Plugin returns \'93}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9121458\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 11-22-33-44-55-66<LF>66-55-44-33-22-11<NUL>}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6372815
\loch\af31506\dbch\af31505\hich\f31506 \'94}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9121458 \hich\af31506\dbch\af31505\loch\f31506 , the fo}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6372815
\hich\af31506\dbch\af31505\loch\f31506 llowing tasks will be executed:
\par }\pard \ltrpar\ql \li1080\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin1080\itap0\pararsid6372815 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1340899 \hich\af2\dbch\af31505\loch\f2
LAN_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9121458\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 MAC: 11-22-33-44-55-66=calc.exe}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid6372815\charrsid6372815
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1340899 \hich\af2\dbch\af31505\loch\f2 LAN_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9121458\charrsid6372815 \hich\af2\dbch\af31505\loch\f2
MAC:66-55-44-33-22-11=notepad.exe
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13978329 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5733712\charrsid5733712
\hich\af31506\dbch\af31505\loch\f31506 The identification string must be}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3569955 \hich\af31506\dbch\af31505\loch\f31506 a wid\hich\af31506\dbch\af31505\loch\f31506 e string (16}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5733712 \hich\af31506\dbch\af31505\loch\f31506 bit).
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3569955 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3569955 \hich\af31506\dbch\af31505\loch\f31506
\hich\f31506 The string must not contain an equal-sign (=) or \'93\loch\f31506 \hich\f31506 &&\'94.
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3635325 \hich\af31506\dbch\af31505\loch\f31506 The output will be treated case sensitive.
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13978329 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid13978329
\hich\af31506\dbch\af31505\loch\f31506 Method}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid206584 \hich\af31506\dbch\af31505\loch\f31506 s}{\rtlch\fcs1 \af0 \ltrch\fcs0
\ul\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid13978329 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid3569955 \hich\af2\dbch\af31505\loch\f2 Plugin}{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid13978329 \hich\af2\dbch\af31505\loch\f2 Name}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid3569955 \hich\af2\dbch\af31505\loch\f2 W}{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid15153839 \hich\af2\dbch\af31505\loch\f2 , PluginVersionW, PluginVendorW}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid13978329
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13978329 \hich\af31506\dbch\af31505\loch\f31506 Th}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid206584 \hich\af31506\dbch\af31505\loch\f31506 ese methods return}
{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13978329 \hich\af31506\dbch\af31505\loch\f31506 a human re}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15153839 \hich\af31506\dbch\af31505\loch\f31506
adable name, vendor }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid206584 \hich\af31506\dbch\af31505\loch\f31506 or}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15153839
\hich\af31506\dbch\af31505\loch\f31506 version of the plugin. These strings }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13978329 \hich\af31506\dbch\af31505\loch\f31506 will be shown in the GUI.
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid6707673\charrsid6707673 \hich\af2\dbch\af31505\loch\f2 wLangID}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6707673 \hich\af31506\dbch\af31505\loch\f31506
is the 16-bit lang}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid7814608 \hich\af31506\dbch\af31505\loch\f31506 uage ID according to the WinAPI:}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6707673
\par \tab \hich\af31506\dbch\af31505\loch\f31506 Lower 8 bit = Primary Language ID (e.g. }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid6707673\charrsid3285525 \hich\af2\dbch\af31505\loch\f2 LANG_ENGLISH}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid6707673 \hich\af31506\dbch\af31505\loch\f31506 )
\par \tab \hich\af31506\dbch\af31505\loch\f31506 Upper 8 bit = }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6707673\charrsid6707673 \hich\af31506\dbch\af31505\loch\f31506 Sublanguage}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid6707673 \hich\af31506\dbch\af31505\loch\f31506 ID (e.g. }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid6707673\charrsid3285525 \hich\af2\dbch\af31505\loch\f2 SUBLANG_ENGLISH_US}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6707673 \hich\af31506\dbch\af31505\loch\f31506 )
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3569955 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3569955\charrsid5733712
\hich\af31506\dbch\af31505\loch\f31506 The }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3569955 \hich\af31506\dbch\af31505\loch\f31506 plugin name }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid3569955\charrsid5733712 \hich\af31506\dbch\af31505\loch\f31506 must b\hich\af31506\dbch\af31505\loch\f31506 e}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3569955
\hich\af31506\dbch\af31505\loch\f31506 a wide string (16 bit).}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5064448
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5064448 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid5064448\charrsid13978329
\hich\af31506\dbch\af31505\loch\f31506 Method }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid5064448 \hich\af2\dbch\af31505\loch\f2 CheckLicense}{\rtlch\fcs1 \af0 \ltrch\fcs0
\ul\lang1033\langfe1031\langnp1033\insrsid5064448\charrsid13978329
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3569955 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15153839 \hich\af31506\dbch\af31505\loch\f31506
This method will be called before the plugin is loaded. The plugin has the ability to check if it m\hich\af31506\dbch\af31505\loch\f31506
ay be used or not. For example, a plugin with a time-limited license can check the computer clock, or a plugin for Beta-Testers can check if it is running on the intended computer only.}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid5064448
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15153839 \hich\af31506\dbch\af31505\loch\f31506 The return value should be}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9373535
\hich\af31506\dbch\af31505\loch\f31506 either}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15153839 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9373535
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_OK_LICENSED }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15153839 \hich\af31506\dbch\af31505\loch\f31506 or }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid7814608\charrsid7814608 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS\hich\af2\dbch\af31505\loch\f2 _}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7544628 \hich\af2\dbch\af31505\loch\f2
FAILURE}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7814608\charrsid7814608 \hich\af2\dbch\af31505\loch\f2 _PLUGIN_NOT_LICENSED}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15153839
\hich\af31506\dbch\af31505\loch\f31506 , but other error codes can be returned, too.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5064448
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13978329 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid13978329
\hich\af31506\dbch\af31505\loch\f31506 Method }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid16384757\charrsid16384757 \hich\af2\dbch\af31505\loch\f2 Identification}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\ul\lang1033\langfe1031\langnp1033\insrsid16384757 \hich\af2\dbch\af31505\loch\f2 M}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid13978329 \hich\af2\dbch\af31505\loch\f2 ethodName}{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid3569955 \hich\af2\dbch\af31505\loch\f2 W}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid13978329
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13978329 \hich\af31506\dbch\af31505\loch\f31506 This method returns a short string of the identification method. This name will be used in the identifications lines in the }{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973 \hich\af31506\dbch\af31505\loch\f31506 Task Definition File}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13978329 \hich\af31506\dbch\af31505\loch\f31506
. For\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 example, the MAC-Addresses plugin will have the method name \'93}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1340899 \hich\af2\dbch\af31505\loch\f2 LA}{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1340899\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 N_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 MAC}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13978329 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 \hich\f31506 , so that a task \'93}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1340899
\hich\af2\dbch\af31505\loch\f2 LAN_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13978329\charrsid6372815 \hich\af2\dbch\af31505\loch\f2 MAC:11-22-33-44-55-66=calc.exe}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid13978329 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 can be defined in the }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12134973 \hich\af31506\dbch\af31505\loch\f31506
Task Definition File}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13978329 .
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5733712 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5733712\charrsid5733712
\hich\af31506\dbch\af31505\loch\f31506 The identification }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3569955 \hich\af31506\dbch\af31505\loch\f31506 method name}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid5733712\charrsid5733712 \hich\af31506\dbch\af31505\loch\f31506 must be}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3569955 \hich\af31506\dbch\af31505\loch\f31506 a wide string (16}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5733712 \hich\af31506\dbch\af31505\loch\f31506 bit).
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13978329 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5733712 \hich\af31506\dbch\af31505\loch\f31506
The string must not contain an equal-sign (=)}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3569955 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 or \'93\loch\f31506 \hich\f31506 &&\'94}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12719322 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5733712
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3635325 \hich\af31506\dbch\af31505\loch\f31506 The output will be treated case sensitive.
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177 \hich\af31506\dbch\af31505\loch\f31506 Method }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177
\hich\af2\dbch\af31505\loch\f2 DescribeOwnStatusCodeW}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5793177 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177
\hich\af31506\dbch\af31505\loch\f31506 This function should return human readable descriptions of the non-generic status codes which THIS plugin is returning. You do n\hich\af31506\dbch\af31505\loch\f31506
ot need to describe generic status codes (because they are already described of the UserDetect2 API). This function will only be invoked, once a status code could not be resolved. Return TRUE, if you could describe the code, FALSE otherwise, e.g. if the s
\hich\af31506\dbch\af31505\loch\f31506 t\hich\af31506\dbch\af31505\loch\f31506 atus code is unknown}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5793177 \hich\af31506\dbch\af31505\loch\f31506 or if the buffer is too small.}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13978329 {\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid5793177\charrsid5793177
\hich\af31506\dbch\af31505\loch\f31506 Attention: If the requested language is not available, please return TRUE, and return the description in English.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid13961185
\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid13961185 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0
\b\i\fs28\lang1031\langfe1031\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13961185 \page }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid3025658 \hich\af31502\dbch\af31501\loch\f31502 Status codes
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid150970 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid13966640\charrsid13966640 \hich\af31506\dbch\af31505\loch\f31506
Structure of status codes (}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13966640\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af0 \ltrch\fcs0
\b\lang1033\langfe1031\langnp1033\insrsid13966640\charrsid13966640 \hich\af31506\dbch\af31505\loch\f31506 )}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13961185 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af31506\dbch\af31505\loch\f31506 Delphi}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 (UD2_PluginStatus.pas)
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13961185 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 type}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 UD2_STATUSCAT = WORD;
\par \hich\af2\dbch\af31505\loch\f2 UD2_STATUSAUTH = TGUID;
\par \hich\af2\dbch\af31505\loch\f2 UD2_STATUSMSG = DWORD;
\par \hich\af2\dbch\af31505\loch\f2 UD2_STATUSEXTRAINFO = DWORD;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS = }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 packed record}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\par \hich\af2\dbch\af31505\loch\f2 cbSize: }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 BYTE;
\par \hich\af2\dbch\af31505\loch\f2 bReserved: }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 BYTE;
\par \hich\af2\dbch\af31505\loch\f2 wCategory: }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 UD2_STATUSCAT;
\par \hich\af2\dbch\af31505\loch\f2 grAuthority: UD2_STAT\hich\af2\dbch\af31505\loch\f2 USAUTH;
\par \hich\af2\dbch\af31505\loch\f2 dwMessage: }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 UD2_STATUSMSG;
\par \hich\af2\dbch\af31505\loch\f2 dwExtraInfo: UD2_STATUSEXTRAINFO;
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13961185 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 end}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 ;}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 C++}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af31506\dbch\af31505\loch\f31506 (ud2_status.h)
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13961185 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 typedef}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 WORD UD2_STATUSCAT;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 typedef}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 GUID UD2_STATUSAUTH;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 typedef}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 DWORD UD2_STATUSMSG;}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\par \hich\af2\dbch\af31505\loch\f2 typedef}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 DWORD UD2_STATUSEXTRAINFO;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 #pragma}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 pack(push, 1) // no \hich\af2\dbch\af31505\loch\f2 alignment
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 typedef}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 struct}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 _UD2_STATUS \{
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 BYTE }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 cbSize;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 BYTE }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 bReserved;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 UD2_STATUSCAT }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 wCategory;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 UD2_STATUSAUTH }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 grAuthority;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 UD2_STATUSMSG }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 dwMessage;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 UD2_STATUSEXTRAINFO }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 dwExtraInfo;
\par \}\hich\af2\dbch\af31505\loch\f2 UD2_STATUS;
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid150970 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af2\dbch\af31505\loch\f2 #pragma}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 pack(pop) // restore previous pack value
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 cbSize}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid2388964\charrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 Size of struct}{\rtlch\fcs1 \af0 \ltrch\fcs0
\ul\lang1033\langfe1031\langnp1033\insrsid10842502\charrsid13961185
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid10842502 \hich\af31506\dbch\af31505\loch\f31506 The size of the struct, which is currently 16, but you should use }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid10842502\charrsid11754596 \hich\af2\dbch\af31505\loch\f2 sizeof(UD2_STATUS)}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid10842502 .}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid10842502\charrsid10842502
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 bReserved}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid2388964\charrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 Reserved byte
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid10842502 \hich\af31506\dbch\af31505\loch\f31506 Should be always zero.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid10842502
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 wCategory}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid150970\charrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 Category
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5178738 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid150970\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 0x}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10842502 0}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 00}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid3622538 0}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid150970\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 = }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506 Success
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3622538 \hich\af2\dbch\af31505\loch\f2 0x}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10842502 0}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13961185 00}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3622538 \hich\af2\dbch\af31505\loch\f2 1}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid150970\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 = }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506 Not available
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3622538 \hich\af2\dbch\af31505\loch\f2 0x}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10842502 0}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13961185 00}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3622538 \hich\af2\dbch\af31505\loch\f2 2}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid150970\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 = }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506 Error
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid150970 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3622538 \hich\af2\dbch\af31505\loch\f2 0x}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10842502 0}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 00}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3622538
\hich\af2\dbch\af31505\loch\f2 3}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid150970\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 ..0xF}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid10842502
\hich\af2\dbch\af31505\loch\f2 F}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 FF}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid150970\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970 \hich\af31506\dbch\af31505\loch\f31506 are reserved}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
 
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 grAuthority}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid150970\charrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 Authority
\par }\pard\plain \ltrpar\s20\ql \li0\ri0\sa160\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13961185 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \{\hich\af2\dbch\af31505\loch\f2
90F53368-1EFB-4350-A6BC-725C69938B9C\}}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af31506\dbch\af31505\loch\f31506 is the GUID for}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9132286\charrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 generic}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 status codes. Y}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9132286\charrsid9132286 \hich\af31506\dbch\af31505\loch\f31506 ou }{\rtlch\fcs1
\af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 should use them, if applicable. If you want to return individual status codes, please generate a new GUID.}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid150970 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 dwMessage}{\rtlch\fcs1 \af0
\ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid150970\charrsid13961185
\hich\af31506\dbch\af31505\loch\f31506 Message
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4476179 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid150970\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 0x0000}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3622538 0000}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid4476179 \hich\af2\dbch\af31505\loch\f2 }{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3622538 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid4476179\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 }{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid150970\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 = }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid4476179 \hich\af31506\dbch\af31505\loch\f31506 a}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1647630 \hich\af31506\dbch\af31505\loch\f31506 n unspecified status in}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\hich\af31506\dbch\af31505\loch\f31506 category "C", issued by authority "A"
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid150970 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid4476179 \hich\af2\dbch\af31505\loch\f2 0x00}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3622538 0000}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid4476179 \hich\af2\dbch\af31505\loch\f2 01..}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid150970\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 0x}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3622538 \hich\af2\dbch\af31505\loch\f2 FFFF}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid150970\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 FFFF = }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1647630 \hich\af31506\dbch\af31505\loch\f31506 the status in}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506 cate\hich\af31506\dbch\af31505\loch\f31506 gory "C", issued by authority "A".}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid150970
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185 \hich\af2\dbch\af31505\loch\f2 dwExtraInfo}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid13961185\charrsid13961185
\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid9132286\charrsid13961185 \hich\af31506\dbch\af31505\loch\f31506 Extra Information
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9132286 \hich\af31506\dbch\af31505\loch\f31506
This field can be used to pass additional information, for example, a pointer to shared memory, or passing an error code of a failed external API}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6511812
\hich\af31506\dbch\af31505\loch\f31506 (e.g. WinAPI)}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9132286 .
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid150970 \hich\af31506\dbch\af31505\loch\f31506 Currently assigned g\hich\af31506\dbch\af31505\loch\f31506 eneric status codes
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3998625 {\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3998625\charrsid3998625
\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Category \'93\loch\f31506 \hich\f31506 Successful\'94}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3998625
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3998625 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_OK_UNSPECIFIED}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506 = Unspecified success code}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid150970\charrsid3998625
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5178738 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_OK_SINGLELINE}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506 = Success, one identifier returned}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS_OK_MULTILINE}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\hich\af31506\dbch\af31505\loch\f31506 = Success, multiple identifiers returned}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
 
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3998625 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_OK_LICENSED}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506 = The plug\hich\af31506\dbch\af31505\loch\f31506 in is licensed}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3998625
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3998625\charrsid3998625 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Category \'93\loch\f31506 \hich\f31506 Not available\'94}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid3998625
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5178738 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_NOTAVAIL_UNSPECIFIED}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506 = Not available, Unspecified}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid11096861 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506 = Operating system not supported}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS_NOTAVAIL_HW_NOT_SUPPORTED}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506 = Hardware not supported}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS_NOTAVAIL\hich\af2\dbch\af31505\loch\f2 _NO_ENTITIES}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid150970 \hich\af31506\dbch\af31505\loch\f31506 = No entities available, }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506
e.g. no network interfac}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970 \hich\af31506\dbch\af31505\loch\f31506 es for }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid4476179
\hich\af31506\dbch\af31505\loch\f31506 identifying}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12933746 \hich\af31506\dbch\af31505\loch\f31506 MAC addresses}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid3998625 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_NOTAVAIL_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746 \hich\af2\dbch\af31505\loch\f2 WIN}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 API_CALL_FAILURE}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970 \hich\af31506\dbch\af31505\loch\f31506
= An API call has failed, possibly }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12933746 \hich\af31506\dbch\af31505\loch\f31506 operating system not supported}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid12933746 \hich\af31506\dbch\af31505\loch\f31506 . }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid12933746 \hich\af2\dbch\af31505\loch\f2 dwExtraInfo}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12933746\charrsid12933746 \hich\af31506\dbch\af31505\loch\f31506 contains the Windows Status C\hich\af31506\dbch\af31505\loch\f31506 ode (e.g. from }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid12933746 \hich\af2\dbch\af31505\loch\f2 GetLastError}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12933746\charrsid12933746 \hich\af31506\dbch\af31505\loch\f31506 ).}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3998625\charrsid12933746
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \ul\lang1033\langfe1031\langnp1033\insrsid3998625\charrsid3998625 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Category \'93\loch\f31506 \hich\f31506 Failure\'94}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid3998625\charrsid3998625
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5178738 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7544628 \hich\af2\dbch\af31505\loch\f2 FAILURE}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 _UNSPECIFIED}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970 \hich\af31506\dbch\af31505\loch\f31506
= Unspecified error}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7544628 \hich\af2\dbch\af31505\loch\f2
FAILURE}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12933746\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 _BUFFER_TOO_SMALL}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\hich\af31506\dbch\af31505\loch\f31506 = Buffer too small}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid6964071\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7544628 \hich\af2\dbch\af31505\loch\f2
FAILURE}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid6964071\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 _INVALID_ARGS}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\hich\af31506\dbch\af31505\loch\f31506 = Invalid arguments passed to function}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
 
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid5178738 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid6964071\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7544628 \hich\af2\dbch\af31505\loch\f2 FAILURE}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid6964071\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 _PLUGIN_N\hich\af2\dbch\af31505\loch\f2 OT_LICENSED}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\hich\af31506\dbch\af31505\loch\f31506 = The plugin is not licensed}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5178738
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid13978329 {\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid15536699
\hich\af31506\dbch\af31505\loch\f31506 Additional functions in Delphi (PluginStatus}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid15078789\charrsid15078789 \hich\af31506\dbch\af31505\loch\f31506 .pas)}{\rtlch\fcs1 \af0
\ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid3025658
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15536699 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699
\hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS_FormatStatusCode(grStatus: UD2_STATUS): }{\rtlch\fcs1 \af2 \ltrch\fcs0
\b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 string}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 ;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_Equal(grStatus1, grStatus2: UD2_STATUS; compareExtraInfo: boolean): }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 boolean}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 ;
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_OSError(OSError: DWORD): UD2_STATUS;
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid5178738 \hich\af31506\dbch\af31505\loch\f31506 Relevant code part i}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid9258736
\hich\af31506\dbch\af31505\loch\f31506 n C }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid3025658\charrsid15078789 \hich\af31506\dbch\af31505\loch\f31506 notation}{\rtlch\fcs1 \af0 \ltrch\fcs0
\b\lang1033\langfe1031\langnp1033\insrsid15078789\charrsid15078789 \hich\af31506\dbch\af31505\loch\f31506 (ud2_}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid11404612 \hich\af31506\dbch\af31505\loch\f31506 status}{\rtlch\fcs1
\af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid15078789\charrsid15078789 \hich\af31506\dbch\af31505\loch\f31506 .h}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid11404612 \hich\af31506\dbch\af31505\loch\f31506
, included via ud2_api.h}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid15078789\charrsid15078789 \hich\af31506\dbch\af31505\loch\f31506 )}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid5064448
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 int}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_FormatStatusCode(}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 char}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 * szStr, }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 size_t}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699 \hich\af2\dbch\af31505\loch\f2 cchLen, UD2_STATUS grStatus);}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 bool}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_Equal(UD2_STATUS grStatus1, \hich\af2\dbch\af31505\loch\f2 UD2_STATUS grStatus2, bool compareExtraInfo)}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699
\hich\af2\dbch\af31505\loch\f2 ;}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 bool}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699
\hich\af2\dbch\af31505\loch\f2 operator==(}{\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 const}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 UD2_STATU}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699 \hich\af2\dbch\af31505\loch\f2 S& lhs, }{\rtlch\fcs1 \af2
\ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699 \hich\af2\dbch\af31505\loch\f2 const}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS& rhs);}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15536699 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699\charrsid15536699
\hich\af2\dbch\af31505\loch\f2 UD2_STATUS UD2_S}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699 \hich\af2\dbch\af31505\loch\f2 TATUS_OSError(DWORD dwOSError);
\par }\pard\plain \ltrpar\s2\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel1\adjustright\rin0\lin0\itap0\pararsid3025658 \rtlch\fcs1 \ab\ai\af0\afs28\alang1025 \ltrch\fcs0
\b\i\fs28\lang1031\langfe1031\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3025658 \hich\af31502\dbch\af31501\loch\f31502 Helper methods
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1929326 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af31506\dbch\af31505\loch\f31506
The plugin SDK contains methods which help you writing the strings in the buffer, as\hich\af31506\dbch\af31505\loch\f31506 well as checking for the buffer length. These functions also return the correct status codes.
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid15078789\charrsid15078789 \hich\af31506\dbch\af31505\loch\f31506 In C (ud2_utils}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid15078789
\hich\af31506\dbch\af31505\loch\f31506 .h}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid15078789 \hich\af31506\dbch\af31505\loch\f31506 , included via ud2_api}{\rtlch\fcs1 \af0 \ltrch\fcs0
\b\lang1033\langfe1031\langnp1033\insrsid15078789\charrsid15078789 \hich\af31506\dbch\af31505\loch\f31506 .h}{\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid15078789 \hich\af31506\dbch\af31505\loch\f31506 ):
\par }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid203795 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_WriteStrW}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af2\dbch\af31505\loch\f2
(LPWSTR lpDest, DW}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326 \hich\af2\dbch\af31505\loch\f2 ORD cchDestSize, LPCWSTR lpSrc)}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15940546
\hich\af2\dbch\af31505\loch\f2 ;}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid668536 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid668536\charrsid12390765
\hich\af2\dbch\af31505\loch\f2 #define}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid668536\charrsid668536 \hich\af2\dbch\af31505\loch\f2 __}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid668536
\hich\af2\dbch\af31505\loch\f2 GUID(x) GUIDFromLPCWSTR(L ## x)\line }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid668536\charrsid668536 \hich\af2\dbch\af31505\loch\f2 GUID GUIDFromLPCWSTR(LPCWSTR lpcstrGUID)}{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15940546 \hich\af2\dbch\af31505\loch\f2 ;}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid668536\charrsid1929326
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1929326 {\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid15078789
\hich\af31506\dbch\af31505\loch\f31506 In Delphi (UD2_PluginUtils.pas):
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4476179 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid4476179\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 function }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid4476179\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 UD2_WritePascalStringToPointerW(lpDestination: LPWSTR;
\par }\pard \ltrpar\ql \fi720\li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4476179 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid4476179\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 cchSize: DWORD; stSource: WideString): UD2_STATUS;
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4476179 {\rtlch\fcs1 \af2 \ltrch\fcs0 \b\f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid13381599
\hich\af2\dbch\af31505\loch\f2 function}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599
\hich\af2\dbch\af31505\loch\f2 UD2_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af2\dbch\af31505\loch\f2 WriteStringListTo}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid4476179 \hich\af2\dbch\af31505\loch\f2 PointerW(lpDestination: LPWSTR;
\par }\pard \ltrpar\ql \fi720\li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4476179 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326
\hich\af2\dbch\af31505\loch\f2 cchSize: DWORD; slSo}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326 \hich\af2\dbch\af31505\loch\f2 urce: TStrings): }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326 \hich\af2\dbch\af31505\loch\f2 ;}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326
\par }\pard \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1929326 {\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid15078789
\hich\af31506\dbch\af31505\loch\f31506 Explanation:
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin720\itap0\pararsid9596859 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af31506\dbch\af31505\loch\f31506
The return value of these functions is an }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9596859
\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af31506\dbch\af31505\loch\f31506 which is either }{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid13381599
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs22 \ltrch\fcs0 \f2\fs22\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 o\tab}}\pard \ltrpar\ql \fi-360\li1440\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls3\ilvl1\adjustright\rin0\lin1440\itap0\pararsid13381599 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS_}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid7544628 \hich\af2\dbch\af31505\loch\f2 FAILURE}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid4476179 \hich\af2\dbch\af31505\loch\f2
_BUFFER_TOO_SMALL
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs22 \ltrch\fcs0 \f2\fs22\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 o\tab}\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_NOTAVAIL_UNSPECIFIED}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af31506\dbch\af31505\loch\f31506 (when no identifier is provided)
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs22 \ltrch\fcs0 \f2\fs22\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 o\tab}}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 UD2_STATUS_OK_MULTILINE
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs22 \ltrch\fcs0 \f2\fs22\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 o\tab}\hich\af2\dbch\af31505\loch\f2 UD2_STATUS_OK_SINGLELINE
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid13381599 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin720\itap0\pararsid13381599 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_WriteStrW}{\rtlch\fcs1
\af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid15153839 \hich\af2\dbch\af31505\loch\f2 ()}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af31506\dbch\af31505\loch\f31506 and
}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 UD2_}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid3028086\charrsid4476179
\hich\af2\dbch\af31505\loch\f2 WritePascalStringToPointerW}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid15153839 \hich\af2\dbch\af31505\loch\f2 ()}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326 \hich\af31506\dbch\af31505\loch\f31506 provide the same functionality.}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid13381599 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin720\itap0\pararsid9596859 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2 UD2_}{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid15153839 \hich\af2\dbch\af31505\loch\f2 WriteStringListToPointerW()}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326
\hich\af31506\dbch\af31505\loch\f31506 is used for }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid15153839 \hich\af2\dbch\af31505\loch\f2 IdentificationStringW()}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af31506\dbch\af31505\loch\f31506 , to return multiple identifications. The functi\hich\af31506\dbch\af31505\loch\f31506 on will split each }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid1929326\charrsid13381599 \hich\af2\dbch\af31505\loch\f2 TStrings}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af31506\dbch\af31505\loch\f31506 entry with }{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9596859\charrsid15153839 \hich\af2\dbch\af31505\loch\f2 UD2_MULTIPLE_ITEMS_DELIMITER}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9596859\charrsid9596859
\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326\charrsid1929326 \hich\af31506\dbch\af31505\loch\f31506 (0x10).}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid5114084 \hich\af31506\dbch\af31505\loch\f31506 A pendant for C}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12390765 \hich\af31506\dbch\af31505\loch\f31506 is currently not implemented.}{
\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af2\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid15940546\charrsid668536 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin720\itap0\pararsid15940546 {\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15940546\charrsid668536 \hich\af2\dbch\af31505\loch\f2 __}{\rtlch\fcs1 \af2
\ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15940546 \hich\af2\dbch\af31505\loch\f2 GUID()}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15940546\charrsid15940546 \hich\af31506\dbch\af31505\loch\f31506
will convert a string literal to a}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15940546 \hich\af2\dbch\af31505\loch\f2 GUID}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15940546\charrsid538759
\hich\af31506\dbch\af31505\loch\f31506 . }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15940546\charrsid15940546 \hich\af31506\dbch\af31505\loch\f31506 This improves the readability of the source code}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid538759 \hich\af31506\dbch\af31505\loch\f31506 , \hich\af31506\dbch\af31505\loch\f31506 since the GUID does not have to be written in a }{\rtlch\fcs1 \af2 \ltrch\fcs0
\f2\lang1033\langfe1031\langnp1033\insrsid538759\charrsid4476179 \hich\af2\dbch\af31505\loch\f2 const struct}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid538759 \hich\af31506\dbch\af31505\loch\f31506 expression. }{\rtlch\fcs1
\af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15940546 \line \hich\af31506\dbch\af31505\loch\f31506 In Delphi, this helper method is not necessary, since the compiler is able to convert a GUID-string to a GUID structure (record) at compile time.
}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326\charrsid15940546
\par }\pard\plain \ltrpar\s1\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid9307250 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0
\b\fs32\lang1031\langfe1031\kerning32\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1981563 \hich\af31502\dbch\af31501\loch\f31502 Known Compatibility Issues
 
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid1981563 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \b\lang1033\langfe1031\langnp1033\insrsid1981563\charrsid1981563 \hich\af31506\dbch\af31505\loch\f31506 Windows N
\hich\af31506\dbch\af31505\loch\f31506 T4 SP6
\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f3\fs22\lang1033\langfe1031\langnp1033\insrsid1981563 \loch\af3\dbch\af31505\hich\f3 \'b7\tab}}\pard \ltrpar\ql \fi-360\li720\ri0\sa160\sl259\slmult1
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\ls11\adjustright\rin0\lin720\itap0\pararsid1981563 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1981563 \hich\af31506\dbch\af31505\loch\f31506 The p}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid1981563\charrsid1981563 \hich\af31506\dbch\af31505\loch\f31506 lugins DHCP_}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1981563 \hich\af31506\dbch\af31505\loch\f31506
IP, DHCP_MAC, GatewayIP, GatewayMAC}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1981563\charrsid1981563 \hich\af31506\dbch\af31505\loch\f31506 , LAN_IP}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1981563
\hich\af31506\dbch\af31505\loch\f31506 are not working because the WinAPI function }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1981563\charrsid1981563 \hich\af2\dbch\af31505\loch\f2 GetAdaptersInfo()}{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1981563\charrsid1981563 \hich\af31506\dbch\af31505\loch\f31506 is not supported}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1981563 \hich\af31506\dbch\af31505\loch\f31506 (}{
\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid1981563\charrsid1981563 \hich\af2\dbch\af31505\loch\f2 ERROR_NOT_SUPPORTED}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1981563
\hich\af31506\dbch\af31505\loch\f31506 )}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1981563\charrsid1981563 .
\par }\pard\plain \ltrpar\s1\ql \li0\ri0\sb240\sa60\sl259\slmult1\keepn\widctlpar\wrapdefault\aspalpha\aspnum\faauto\outlinelevel0\adjustright\rin0\lin0\itap0\pararsid9307250 \rtlch\fcs1 \ab\af0\afs32\alang1025 \ltrch\fcs0
\b\fs32\lang1031\langfe1031\kerning32\loch\af31502\hich\af31502\dbch\af31501\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9307250 \hich\af31502\dbch\af31501\loch\f31502 Contact
\par }\pard\plain \ltrpar\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid4871690 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
\fs22\lang1031\langfe1031\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9307250 \hich\af31506\dbch\af31505\loch\f31506 UserDetect2 is a project of ViaThinkSoft ( }
{\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9307250 \hich\af31506\dbch\af31505\loch\f31506 HYPERLINK "http://www.viathinksoft.com" }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5733712
{\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5200000068007400740070003a002f002f007700770077002e007600690061007400680069006e006b0073006f00660074002e0063006f006d002f000000795881f43b1d7f48af2c825dc485276300000000a5ab0001
002d006d001400001400000000680000652d}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs17\ul\cf17\lang1033\langfe1031\langnp1033\insrsid9307250\charrsid9257259 \hich\af31506\dbch\af31505\loch\f31506 www.viathinksoft.com}}}\sectd \ltrsect
\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9307250 \hich\af31506\dbch\af31505\loch\f31506 ) and is released under the terms of GPLv3.
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6372815 \hich\af31506\dbch\af31505\loch\f31506 Project leader:
\par }\pard \ltrpar\ql \fi720\li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid6372815 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid9307250
\hich\af31506\dbch\af31505\loch\f31506 Daniel Marschall
\par }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6372815 \hich\af31506\dbch\af31505\loch\f31506 eMail\hich\af31506\dbch\af31505\loch\f31506 :\tab }{\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid6372815 \hich\af31506\dbch\af31505\loch\f31506 HYPERLINK "mailto:info@daniel-marschall.de" }{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5733712 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b580000006d00610069006c0074006f003a0069006e0066006f004000640061006e00690065006c002d006d006100720073006300680061006c006c002e00640065000000795881f43b1d7f48af2c825dc48527630000
0000a5ab00010067004c007000010000002c00000000c400}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs17\ul\cf17\lang1033\langfe1031\langnp1033\insrsid6372815\charrsid9257259 \hich\af31506\dbch\af31505\loch\f31506 info@daniel-marschall.de}}}\sectd \ltrsect
\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6372815
\par \hich\af31506\dbch\af31505\loch\f31506 Web:\tab }{\field{\*\fldinst {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6372815 \hich\af31506\dbch\af31505\loch\f31506 HYPERLINK "http://www.daniel-marschall.de" }{\rtlch\fcs1 \af0
\ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5733712 {\*\datafield
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e00640061006e00690065006c002d006d006100720073006300680061006c006c002e00640065002f000000795881f43b1d7f48af2c825dc48527630000
0000a5ab0001000000000000000000020002490000960300}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs17\ul\cf17\lang1033\langfe1031\langnp1033\insrsid6372815\charrsid9257259 \hich\af31506\dbch\af31505\loch\f31506 www.daniel-marschall.de}}}\sectd \ltrsect
\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid6372815
\par }\pard \ltrpar\ql \li0\ri0\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid8799422 {\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid8799422\charrsid8799422
\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865
6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
4757e8d3f729e245eb2b260a0238fd010000ffff0300504b030414000600080000002100aa5225dfc60600008b1a0000160000007468656d652f7468656d652f
7468656d65312e786d6cec595d8bdb46147d2ff43f08bd3bfe92fcb1c41b6cd9ceb6d94d42eca4e4716c8fadc98e344633de8d0981923c160aa569e943037deb
43691b48a02fe9afd936a54d217fa17746b63c638fbb9b2585a5640d8b343af7ce997bafce1d4997afdc8fa87384134e58dc708b970aae83e3211b9178d2706f
f7bbb99aeb7081e211a22cc60d778eb97b65f7c30f2ea31d11e2083b601ff31dd4704321a63bf93c1fc230e297d814c7706dcc920809384d26f951828ec16f44
f3a542a1928f10895d274611b8bd311e932176fad2a5bbbb74dea1701a0b2e078634e949d7d8b050d8d1615122f89c0734718e106db830cf881df7f17de13a14
7101171a6e41fdb9f9ddcb79b4b330a2628bad66d7557f0bbb85c1e8b0a4e64c26836c52cff3bd4a33f3af00546ce23ad54ea553c9fc29001a0e61a52917dda7
dfaab7dafe02ab81d2438bef76b55d2e1a78cd7f798373d3973f03af40a97f6f03dfed06104503af4029dedfc07b5eb51478065e81527c65035f2d34db5ed5c0
2b5048497cb8812ef89572b05c6d061933ba6785d77daf5b2d2d9caf50500d5975c929c62c16db6a2d42f758d2058004522448ec88f9148fd110aa3840940c12
e2ec93490885374531e3305c2815ba8532fc973f4f1da988a01d8c346bc90b98f08d21c9c7e1c3844c45c3fd18bcba1ae4cdcb1fdfbc7cee9c3c7a71f2e89793
c78f4f1efd9c3a32acf6503cd1ad5e7fffc5df4f3f75fe7afeddeb275fd9f15cc7fffed367bffdfaa51d082b5d85e0d5d7cffe78f1ecd5379ffff9c3130bbc99
a0810eef930873e73a3e766eb10816a6426032c783e4ed2cfa2122ba45339e701423398bc57f478406fafa1c5164c1b5b019c13b09488c0d787576cf20dc0b93
9920168fd7c2c8001e30465b2cb146e19a9c4b0b737f164fec9327331d770ba123dbdc018a8dfc766653d05662731984d8a07993a258a0098eb170e4357688b1
6575770931e27a408609e36c2c9cbbc46921620d499f0c8c6a5a19ed9108f232b711847c1bb139b8e3b418b5adba8d8f4c24dc15885ac8f73135c27815cd048a
6c2efb28a27ac0f791086d247bf364a8e33a5c40a6279832a733c29cdb6c6e24b05e2de9d7405eec693fa0f3c84426821cda7cee23c674649b1d06218aa6366c
8fc4a18efd881f428922e7261336f80133ef10790e7940f1d674df21d848f7e96a701b9455a7b42a107965965872791533a37e7b733a4658490d08bfa1e71189
4f15f73559f7ff5b5907217df5ed53cbaa2eaaa0371362bda3f6d6647c1b6e5dbc03968cc8c5d7ee369ac53731dc2e9b0decbd74bf976ef77f2fdddbeee7772f
d82b8d06f9965bc574abae36eed1d67dfb9850da13738af7b9daba73e84ca32e0c4a3bf5cc8ab3e7b8690887f24e86090cdc2441cac64998f88488b017a229ec
ef8bae7432e10bd713ee4c19876dbf1ab6fa96783a8b0ed8287d5c2d16e5a3692a1e1c89d578c1cfc6e15143a4e84a75f50896b9576c27ea51794940dabe0d09
6d329344d942a2ba1c9441520fe610340b09b5b277c2a26e615193ee97a9da6001d4b2acc0d6c9810d57c3f53d30012378a242148f649ed2542fb3ab92f92e33
bd2d984605c03e625901ab4cd725d7adcb93ab4b4bed0c99364868e566925091513d8c87688417d52947cf42e36d735d5fa5d4a02743a1e683d25ad1a8d6fe8d
c579730d76ebda40635d2968ec1c37dc4ad9879219a269c31dc3633f1c4653a81d2eb7bc884ee0ddd95024e90d7f1e6599265cb4110fd3802bd149d520220227
0e2551c395cbcfd24063a5218a5bb104827061c9d541562e1a3948ba99643c1ee3a1d0d3ae8dc848a7a7a0f0a95658af2af3f383a5259b41ba7be1e8d819d059
720b4189f9d5a20ce0887078fb534ca33922f03a3313b255fdad35a685eceaef13550da5e3884e43b4e828ba98a77025e5191d7596c5403b5bac1902aa8564d1
080713d960f5a01add34eb1a2987ad5df7742319394d34573dd35015d935ed2a66ccb06c036bb13c5f93d7582d430c9aa677f854bad725b7bed4bab57d42d625
20e059fc2c5df70c0d41a3b69acca026196fcab0d4ecc5a8d93b960b3c85da599a84a6fa95a5dbb5b8653dc23a1d0c9eabf383dd7ad5c2d078b9af549156df3d
f44f136c700fc4a30d2f81675470954af8f09020d810f5d49e24950db845ee8bc5ad0147ce2c210df741c16f7a41c90f72859adfc97965af90abf9cd72aee9fb
e562c72f16daadd243682c228c8a7efacda50bafa2e87cf1e5458d6f7c7d89966fdb2e0d599467eaeb4a5e11575f5f8aa5ed5f5f1c02a2f3a052ead6cbf55625
572f37bb39afddaae5ea41a5956b57826abbdb0efc5abdfbd0758e14d86b9603afd2a9e52ac520c8799582a45fabe7aa5ea9d4f4aacd5ac76b3e5c6c6360e5a9
7c2c6201e155bc76ff010000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f
7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be
9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980
ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5b
babac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f6e74656e
745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f
2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f7468656d652f74
68656d654d616e616765722e786d6c504b01022d0014000600080000002100aa5225dfc60600008b1a00001600000000000000000000000000d6020000746865
6d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b0100002700000000000000000000000000d00900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000cb0a00000000}
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;
\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;
\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;
\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;
\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid;
\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;
\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;
\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;
\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;
\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;
\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;
\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;
\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;
\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4;
\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4;
\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1;
\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1;
\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2;
\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2;
\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3;
\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4;
\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4;
\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5;
\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5;
\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6;
\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6;
\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark;
\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1;
\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1;
\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2;
\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3;
\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3;
\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4;
\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4;
\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5;
\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5;
\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6;
\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000
4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000c051
7f7717fed001feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000105000000000000}}
/tags/UserDetect2_Release_2.0/UD2_Main.dfm
0,0 → 1,2689
object UD2MainForm: TUD2MainForm
Left = 190
Top = 177
Width = 784
Height = 440
ActiveControl = TasksListView
Caption = 'ViaThinkSoft UserDetect2'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
OnDestroy = FormDestroy
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object PageControl1: TPageControl
Left = 0
Top = 0
Width = 768
Height = 402
ActivePage = TasksTabSheet
Align = alClient
TabIndex = 0
TabOrder = 0
object TasksTabSheet: TTabSheet
Caption = 'Tasks'
object TasksListView: TVTSListView
Left = 0
Top = 0
Width = 760
Height = 374
Align = alClient
Columns = <>
Items.Data = {
3B0000000200000000000000FFFFFFFFFFFFFFFF000000000000000004746573
7400000000FFFFFFFFFFFFFFFF0000000000000000057465737432}
LargeImages = TasksImageList
ReadOnly = True
PopupMenu = TasksPopupMenu
TabOrder = 0
OnCompare = ListViewCompare
OnDblClick = TasksListViewDblClick
OnKeyPress = TasksListViewKeyPress
end
end
object TabSheet2: TTabSheet
Caption = 'Identifications'
ImageIndex = 1
object IdentificationsListView: TVTSListView
Left = 0
Top = 0
Width = 760
Height = 374
Align = alClient
Columns = <
item
Caption = 'Description'
Width = 100
end
item
Caption = 'Method name'
Width = 100
end
item
Caption = 'Value'
Width = 100
end
item
Caption = 'GUID of Plugin'
end>
ReadOnly = True
RowSelect = True
PopupMenu = IdentificationsPopupMenu
TabOrder = 0
ViewStyle = vsReport
OnCompare = ListViewCompare
end
end
object TabSheet3: TTabSheet
Caption = 'Task Definition File Template'
ImageIndex = 2
object IniTemplateMemo: TMemo
Left = 0
Top = 0
Width = 760
Height = 323
Align = alClient
Font.Charset = ANSI_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'Courier New'
Font.Style = []
ParentFont = False
ReadOnly = True
ScrollBars = ssBoth
TabOrder = 0
WantTabs = True
end
object Panel1: TPanel
Left = 0
Top = 323
Width = 760
Height = 51
Align = alBottom
BevelOuter = bvNone
TabOrder = 1
DesignSize = (
760
51)
object Button1: TButton
Left = 8
Top = 8
Width = 209
Height = 33
Anchors = [akLeft, akTop, akBottom]
Caption = 'Open current Task Definition File'
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 541
Top = 8
Width = 209
Height = 33
Anchors = [akTop, akRight, akBottom]
Caption = 'Save as new Task Definition File'
TabOrder = 1
OnClick = Button2Click
end
end
end
object TabSheet4: TTabSheet
Caption = 'Loaded Plugins'
ImageIndex = 3
object LoadedPluginsListView: TVTSListView
Left = 0
Top = 0
Width = 760
Height = 374
Align = alClient
Columns = <
item
Caption = 'DLL File'
Width = 100
end
item
Caption = 'Vendor'
Width = 100
end
item
Caption = 'Plugin name'
Width = 100
end
item
Caption = 'Version'
Width = 100
end
item
Caption = 'Identification method name'
Width = 100
end
item
Caption = 'Detected IDs'
end
item
Caption = 'Load time'
end
item
Caption = 'Identification Status'
end
item
Caption = 'GUID of Plugin'
Width = 100
end>
ReadOnly = True
RowSelect = True
PopupMenu = LoadedPluginsPopupMenu
TabOrder = 0
ViewStyle = vsReport
OnCompare = ListViewCompare
end
end
object TabSheet5: TTabSheet
Caption = 'About'
ImageIndex = 4
DesignSize = (
760
374)
object Image1: TImage
Left = 8
Top = 8
Width = 32
Height = 32
AutoSize = True
Picture.Data = {
055449636F6E0000010006001010100000000000280100006600000010100000
00000000680500008E0100002020100000000000E8020000F606000020200000
00000000A8080000DE0900003030100000000000680600008612000030300000
00000000A80E0000EE1800002800000010000000200000000100040000000000
C000000000000000000000001000000000000000000000000000800000800000
00808000800000008000800080800000C0C0C000808080000000FF0000FF0000
00FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000000000008777
7777777000008FFFFFFFFF7000008FF22FF99F7000008F2B2F9B9F7000008FA2
2FFDDF7087778FFFFFFFFF708FFF8777777777708F9F9444444444408FF99444
444444408F99F998888888808FFF9FFFFF700000877797777770000084444444
4440000084444444444000008888888888800000F000DFCDF000FFFDF000D7DF
F000D7EFF0009FCF0000BFCF0000DDDF0000FDEF0000BFCB00009FDB0000CFCF
000FCFEF000FFFCE000FDFDE000FDBDF000FFBFF280000001000000020000000
0100080000000000400100000000000000000000000100000000000000000000
000080000080000000808000800000008000800080800000C0C0C000C0DCC000
F0CAA60004040400080808000C0C0C0011111100161616001C1C1C0022222200
29292900555555004D4D4D004242420039393900807CFF005050FF009300D600
FFECCC00C6D6EF00D6E7E70090A9AD000000330000006600000099000000CC00
003300000033330000336600003399000033CC000033FF000066000000663300
00666600006699000066CC000066FF0000990000009933000099660000999900
0099CC000099FF0000CC000000CC330000CC660000CC990000CCCC0000CCFF00
00FF660000FF990000FFCC00330000003300330033006600330099003300CC00
3300FF00333300003333330033336600333399003333CC003333FF0033660000
3366330033666600336699003366CC003366FF00339900003399330033996600
339999003399CC003399FF0033CC000033CC330033CC660033CC990033CCCC00
33CCFF0033FF330033FF660033FF990033FFCC0033FFFF006600000066003300
66006600660099006600CC006600FF0066330000663333006633660066339900
6633CC006633FF00666600006666330066666600666699006666CC0066990000
6699330066996600669999006699CC006699FF0066CC000066CC330066CC9900
66CCCC0066CCFF0066FF000066FF330066FF990066FFCC00CC00FF00FF00CC00
9999000099339900990099009900CC009900000099333300990066009933CC00
9900FF00996600009966330099336600996699009966CC009933FF0099993300
99996600999999009999CC009999FF0099CC000099CC330066CC660099CC9900
99CCCC0099CCFF0099FF000099FF330099CC660099FF990099FFCC0099FFFF00
CC00000099003300CC006600CC009900CC00CC0099330000CC333300CC336600
CC339900CC33CC00CC33FF00CC660000CC66330099666600CC669900CC66CC00
9966FF00CC990000CC993300CC996600CC999900CC99CC00CC99FF00CCCC0000
CCCC3300CCCC6600CCCC9900CCCCCC00CCCCFF00CCFF0000CCFF330099FF6600
CCFF9900CCFFCC00CCFFFF00CC003300FF006600FF009900CC330000FF333300
FF336600FF339900FF33CC00FF33FF00FF660000FF663300CC666600FF669900
FF66CC00CC66FF00FF990000FF993300FF996600FF999900FF99CC00FF99FF00
FFCC0000FFCC3300FFCC6600FFCC9900FFCCCC00FFCCFF00FFFF3300CCFF6600
FFFF9900FFFFCC006666FF0066FF660066FFFF00FF666600FF66FF00FFFF6600
2100A5005F5F5F00777777008686860096969600CBCBCB00B2B2B200D7D7D700
DDDDDD00E3E3E300EAEAEA00F1F1F100F8F8F800F0FBFF00A4A0A00080808000
0000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000
0A0A0A0A0A0A0A0A0A0A0A0A00000000EC070707070707070707070A00000000
ECF6F6F6F6F6F6F6F6F6070A00000000ECF6F60202F6F6F9F9F6070A00000000
ECF602FB02F6F9FBF9F6070A0A0A0A0AECF6FA0202F6F6FDFDF6070AECEF0707
40F6F6F6F6F6F6F6F6F6070AECF6F6F6EC070707070707070707070AECF640F6
E9040404040404040404040AECF6F44040045F04040404040404040AECF64020
F64040EC40ECECECECECEC0AECF6F6F640F6F6F6F6F6070A00000000EC070707
400707070707070A00000000EC040404040404040404040A00000000EC040404
400404040404040A00000000ECECECECECECECECECECEC0A00000000F0000000
F000F000F000B000F000F000F000000000009000000090000000B00000000000
0000B0000000B000000FB000000F0000000FF000000FF000000FF00028000000
2000000040000000010004000000000080020000000000000000000010000000
0000000000000000000080000080000000808000800000008000800080800000
C0C0C000808080000000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000
FFFFFF0000000000000000000000000000000000000000000000000000000000
00000000000000008777777777777777777777700000000087FFFFFFFFFFFFFF
FFFFFF700000000087F8888FFF8888FFF8888F700000000087FFFFFFFFFFFFFF
FFFFFF700000000087FF000FFFF000FFFF000F700000000087F55D5FFF3330FF
F1111F700000000087FFDBDFFFF3B3FFFF9B1F700000000087FFFDDFFFFF33FF
FF991F708777777787FFFFFFFFFFFFFFFFFFFF7087FFFFFF87F8888FFF8888FF
F8888F7087FFFFFF87FFFFFFFFFFFFFFFFFFFF7087FFFFFF87FF000FFFF444FF
FF000F7087FFFFFF87F2222FFF6664FFF4444F7087FFFFFF87FFAB2FFFF6E6FF
FFCE4F7087FFFFFF87FFAA2FFFF666FFFFCC4F7087FFBFFF97FFBFFFFFFFFFFF
FFFFFF7087FFF97F87797777777777777777777087FFFF979494444444444444
4000000087FFFFF989444444444444444F0F0F0087BFB997B799444444444444
4444444087FFFF79F9888888888888888888888087FFF79F9F97FFFFFFFFFF70
0000000087FFF9FF7FF9FFFFFFFFFF700000000087FBFFFF9FFFBFFFFFFFFF70
0000000087777777777777777777777000000000844444444444444440000000
0000000084444444444444444F0F0F0000000000844444444444444444444440
0000000088888888888888888888888000000000000000000000000000000000
00000000FFFFFFFFFF000000FF000000FF000000FF000000FF000000FF000000
FF000000FF000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF
FFFFFFFF28000000200000004000000001000800000000008004000000000000
0000000000010000000000000000000000008000008000000080800080000000
8000800080800000C0C0C000C0DCC000F0CAA60004040400080808000C0C0C00
11111100161616001C1C1C002222220029292900555555004D4D4D0042424200
39393900807CFF005050FF009300D600FFECCC00C6D6EF00D6E7E70090A9AD00
0000330000006600000099000000CC0000330000003333000033660000339900
0033CC000033FF00006600000066330000666600006699000066CC000066FF00
009900000099330000996600009999000099CC000099FF0000CC000000CC3300
00CC660000CC990000CCCC0000CCFF0000FF660000FF990000FFCC0033000000
3300330033006600330099003300CC003300FF00333300003333330033336600
333399003333CC003333FF00336600003366330033666600336699003366CC00
3366FF00339900003399330033996600339999003399CC003399FF0033CC0000
33CC330033CC660033CC990033CCCC0033CCFF0033FF330033FF660033FF9900
33FFCC0033FFFF00660000006600330066006600660099006600CC006600FF00
663300006633330066336600663399006633CC006633FF006666000066663300
66666600666699006666CC00669900006699330066996600669999006699CC00
6699FF0066CC000066CC330066CC990066CCCC0066CCFF0066FF000066FF3300
66FF990066FFCC00CC00FF00FF00CC009999000099339900990099009900CC00
9900000099333300990066009933CC009900FF00996600009966330099336600
996699009966CC009933FF009999330099996600999999009999CC009999FF00
99CC000099CC330066CC660099CC990099CCCC0099CCFF0099FF000099FF3300
99CC660099FF990099FFCC0099FFFF00CC00000099003300CC006600CC009900
CC00CC0099330000CC333300CC336600CC339900CC33CC00CC33FF00CC660000
CC66330099666600CC669900CC66CC009966FF00CC990000CC993300CC996600
CC999900CC99CC00CC99FF00CCCC0000CCCC3300CCCC6600CCCC9900CCCCCC00
CCCCFF00CCFF0000CCFF330099FF6600CCFF9900CCFFCC00CCFFFF00CC003300
FF006600FF009900CC330000FF333300FF336600FF339900FF33CC00FF33FF00
FF660000FF663300CC666600FF669900FF66CC00CC66FF00FF990000FF993300
FF996600FF999900FF99CC00FF99FF00FFCC0000FFCC3300FFCC6600FFCC9900
FFCCCC00FFCCFF00FFFF3300CCFF6600FFFF9900FFFFCC006666FF0066FF6600
66FFFF00FF666600FF66FF00FFFF66002100A5005F5F5F007777770086868600
96969600CBCBCB00B2B2B200D7D7D700DDDDDD00E3E3E300EAEAEA00F1F1F100
F8F8F800F0FBFF00A4A0A000808080000000FF0000FF000000FFFF00FF000000
FF00FF00FFFF0000FFFFFF000000000000000000000000000000000000000000
00000000000000000000000000000000000000000A0A0A0A0A0A0A0A0A0A0A0A
0A0A0A0A0A0A0A0A0A0A0A0A0000000000000000EC0707070707070707070707
07070707070707070707070A0000000000000000EC071B1B1BF31B1B1B1B1B1B
F31B1B1B1B1B1BF31B1B070A0000000000000000EC071BECECECECF6F6F6ECEC
ECECF6F6F6ECECECEC1B070A0000000000000000EC071BF6F6F6F6F6F6F6F6F6
F6F6F6F6F6F6F6F6F61B070A0000000000000000EC07F3F60A0A0AF6F6F6F60A
0A0AF6F6F6F60A0A0A1B070A0000000000000000EC071B0505FD05F6F6F60303
030AF6F6F6010101011B070A0000000000000000EC071BF6FDFBFDF6F6F6F603
FB03F6F6F6F6F9FB011B070A0A0A0A0A0A0A0A0AEC071BF6F6FDFDF6F6F6F6F6
0303F6F6F6F6F9F9011B070AECEF070707070707EC07F3F6F6F6F6F6F6F6F6F6
F6F6F6F6F6F6F6F6F61B070AEC071B1B1B1B1B1BEC071BECECECECF6F6F6ECEC
ECECF6F6F6ECECECEC1B070AEC071BF6F6F6F6F6EC071BF6F6F6F6F6F6F6F6F6
F6F6F6F6F6F6F6F6F61B070AEC07F3F6F6F6F6F6EC071BF60A0A0AF6F6F6F604
0404F6F6F6F60A0A0A1B070AEC071BF6F6F6F6F6EC071B02020202F6F6F60606
0604F6F6F6040404041B070AEC071BF6F6F6F6F6EC071BF6FAFB02F6F6F6F606
FE06F6F6F6F6FCFE041B070AEC071BF6F6F6F6F6EC071BF6FAFA02F6F6F6F606
0606F6F6F6F6FCFC041B070AEC071BF6FBF6F6F640071B1BFB1B1B1B1B1B1B1B
1B1B1B1B1B1B1B1B1B1B070AEC071BF6F64007F6EC0707400707070707070707
07070707070707070707070AEC071BF6F6F6E907400440040404040404040404
04040404040A0A0A0A0A0A0AEC071BF6F6F6F640EB4004040404040404040404
0404040404FF0AFF0AFF0A0AEC07FBF6FB402007FBEF40200404040404040404
04040404040404040404040AEC07F3F6F6F60740F640ECECECECECECECECECEC
ECECECECECECECECECECEC0AEC071BF6F6EF40F640FF4007F6F6F6F6F6F6F6F6
F61B070A0000000000000000EC071BF6F640F6F607FFFF40F6F6F6F6F6F6F6F6
F61B070A0000000000000000EC07F3FB1B1B1B1B401B1B1BFB1B1B1B1B1B1B1B
1B1B070A0000000000000000EC07070707070707070707070707070707070707
0707070A0000000000000000EC040404040404040404040404040404040A0A0A
0A0A0A0A0000000000000000EC04040404040404040404040404040404FF0AFF
0AFF0A0A0000000000000000EC04040404040404040404040404040404040404
0404040A0000000000000000ECECECECECECECECECECECECECECECECECECECEC
ECECEC0A00000000000000000000000000000000000000000000000000000000
000000000000000000000000FFFFFFFFFF000000FF000000FF000000FF000000
FF000000FF000000FF000000FF00000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000FF000000FF000000FF000000FF000000FF000000FF
000000FF000000FFFFFFFFFF2800000030000000600000000100040000000000
0006000000000000000000001000000000000000000000000000800000800000
00808000800000008000800080800000C0C0C000808080000000FF0000FF0000
00FFFF00FF000000FF00FF00FFFF0000FFFFFF00000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000087777777777777777777777777777777777000000000000087FFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF000000000000087FFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFF000000000000087FFF77777FFFFFF77777FFFFF77777FFFF000000000
000087FFF88888FFFFFF88888FFFFF88888FFFF000000000000087FFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF000000000000087FFFFFFFFFFFFFFFFFFFFFFFFFF
FFFFFFF000000000000087FFFF0000FFFFFFF0000FFFFFF0000FFFF000000000
000087FFF55555FFFFFF33333FFFFF11111FFFF000000000000087FFFFDDD5FF
FFFFF3773FFFFFF9991FFFF000000000000087FFFFDBD5FFFFFFF3B73FFFFFF9
B91FFFF000000000000087FFFFDDDDFFFFFFF3333FFFFFF9991FFFF087777777
777787FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF087FFFFFFFFFF87FFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF087FFFFFFFFFF87FFF77777FFFFFF77777FFFFF77
777FFFF087FFFFFFFFFF87FFF88888FFFFFF88888FFFFF88888FFFF087FFFFFF
FFFF87FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF087FFFFFFFFFF87FFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFF087FFFFFFFFFF87FFFF0000FFFFFFF4444FFFFFF0
000FFFF087FFFFFFFFF997FFF22222FFFFFF66664FFFFF44444FFFF087FFFFFF
FFFF87FFFFABA2FFFFFFF6E64FFFFFFC664FFFF087FFFFFFFFF997FFFFABA2FF
FFFFF6E64FFFFFFCE64FFFF087FFFBFFFFFF87FFFFBBA2FFFFFFF6666FFFFFFC
CC4FFFF087FFFBBFFFF997FFF99FFFFFFFFFFFFFFFFFFFFFFFFFFFF087FFFFB9
FFFF87FF99FFFFFFFFFFFFFFFFFFFFFFFFFFFFF087FFFFF99FF9977997777777
77777777777777777777777087FFFFFF99F99499444444444444444444444444
4444444087FFFFFFF99999944444444444444444444440000000004087FFFFFF
F9999944444444444444444444444770770770408BBFB9F99997899494B44B44
4444444444444F70F70F70408BBFB9F99997899494B44B444444444444444444
4444444087FFFFFFF99999988888888888888888888888888888888087FFFFFF
F9999999FFFFFFFFFFFFFFFFFF7000000000000087FFFFFF99FFFFF99FFFFFFF
FFFFFFFFFF7000000000000087FFFFF99FF99FFF99FFFFFFFFFFFFFFFF700000
0000000087FFFFB9FFFFFFFFF9BFFFFFFFFFFFFFFF7000000000000087FFFBBF
FFF99FFFFFBBFFFFFFFFFFFFFF700000000000008777777777777777777B7777
7777777777700000000000008444444444444444444444444444444444400000
0000000084444444444444444444444440000000004000000000000084444444
4444444444444444477077077040000000000000844444444444444444444444
4F70F70F70400000000000008444444444444444444444444444444444400000
0000000088888888888888888888888888888888888000000000000000000000
0000000000000000000000000000000000000000FFFFFFFFFFFF01F5FFFFFFFF
FFFF01F5FFF00000000005F5FFF000000000BFFDFFF00000000011F0FFF00000
000005F0FFF00000000005F0FFF000000000BFFFFFF00000000003E8FFF00000
00000FE8FFF0000000000FF8FFF000000000AFFAFFF00000000001E2FFF00000
000019F200000000000019F2000000000000BBFF00000000000001E000000000
000099F000000000000099F1000000000000B9F700000000000001E500000000
0000A9E5000000000000BDE5000000000000BFED00000000000001F000000000
00003DF00000000000003DF00000000000003FFF00000000000003B800000000
000057B800000000000097B80000000000009FFA00000000000041B200000000
000041B200000000000041B2000000000FFF4BFF000000000FFF01B000000000
0FFF01B0000000000FFF01F1000000000FFF09F7000000000FFF09F500000000
0FFF01F5000000000FFF15F5000000000FFF1FFD000000000FFF40F000000000
0FFF5CF0000000000FFF1CF0FFFFFFFFFFFF1FFF280000003000000060000000
0100080000000000800A00000000000000000000000100000000000000000000
000080000080000000808000800000008000800080800000C0C0C000C0DCC000
F0CAA60004040400080808000C0C0C0011111100161616001C1C1C0022222200
29292900555555004D4D4D004242420039393900807CFF005050FF009300D600
FFECCC00C6D6EF00D6E7E70090A9AD000000330000006600000099000000CC00
003300000033330000336600003399000033CC000033FF000066000000663300
00666600006699000066CC000066FF0000990000009933000099660000999900
0099CC000099FF0000CC000000CC330000CC660000CC990000CCCC0000CCFF00
00FF660000FF990000FFCC00330000003300330033006600330099003300CC00
3300FF00333300003333330033336600333399003333CC003333FF0033660000
3366330033666600336699003366CC003366FF00339900003399330033996600
339999003399CC003399FF0033CC000033CC330033CC660033CC990033CCCC00
33CCFF0033FF330033FF660033FF990033FFCC0033FFFF006600000066003300
66006600660099006600CC006600FF0066330000663333006633660066339900
6633CC006633FF00666600006666330066666600666699006666CC0066990000
6699330066996600669999006699CC006699FF0066CC000066CC330066CC9900
66CCCC0066CCFF0066FF000066FF330066FF990066FFCC00CC00FF00FF00CC00
9999000099339900990099009900CC009900000099333300990066009933CC00
9900FF00996600009966330099336600996699009966CC009933FF0099993300
99996600999999009999CC009999FF0099CC000099CC330066CC660099CC9900
99CCCC0099CCFF0099FF000099FF330099CC660099FF990099FFCC0099FFFF00
CC00000099003300CC006600CC009900CC00CC0099330000CC333300CC336600
CC339900CC33CC00CC33FF00CC660000CC66330099666600CC669900CC66CC00
9966FF00CC990000CC993300CC996600CC999900CC99CC00CC99FF00CCCC0000
CCCC3300CCCC6600CCCC9900CCCCCC00CCCCFF00CCFF0000CCFF330099FF6600
CCFF9900CCFFCC00CCFFFF00CC003300FF006600FF009900CC330000FF333300
FF336600FF339900FF33CC00FF33FF00FF660000FF663300CC666600FF669900
FF66CC00CC66FF00FF990000FF993300FF996600FF999900FF99CC00FF99FF00
FFCC0000FFCC3300FFCC6600FFCC9900FFCCCC00FFCCFF00FFFF3300CCFF6600
FFFF9900FFFFCC006666FF0066FF660066FFFF00FF666600FF66FF00FFFF6600
2100A5005F5F5F00777777008686860096969600CBCBCB00B2B2B200D7D7D700
DDDDDD00E3E3E300EAEAEA00F1F1F100F8F8F800F0FBFF00A4A0A00080808000
0000FF0000FF000000FFFF00FF000000FF00FF00FFFF0000FFFFFF0000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A
0A0A0A0A0A0A0A0A0A0A0A0A000000000000000000000000EC07070707070707
0707070707070707070707070707070707070707070707070707070A00000000
0000000000000000EC071B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B
1B1B1B1B1B1B1B1B1B1B070A000000000000000000000000EC071BF6F6F6F6F6
F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F61B070A00000000
0000000000000000EC07F3F6F60707070707F6F6F6F6F6F60707070707F6F6F6
F6F60707070707F6F61B070A000000000000000000000000EC071BF6F6ECECEC
ECECF6F6F6F6F6F6ECECECECECF6F6F6F6F6ECECECECECF6F61B070A00000000
0000000000000000EC071BF6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
F6F6F6F6F6F6F6F6F61B070A000000000000000000000000EC07F3F6F6F6F6F6
F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F61B070A00000000
0000000000000000EC071BF6F6F60A0A0A0AF6F6F6F6F6F6F60A0A0A0AF6F6F6
F6F6F60A0A0A0AF6F61B070A000000000000000000000000EC071BF6F6050505
0505F6F6F6F6F6F60303030303F6F6F6F6F60101010101F6F61B070A00000000
0000000000000000EC071BF6F6F68D8D8D05F6F6F6F6F6F6F603303003F6F6F6
F6F6F640E94001F6F61B070A000000000000000000000000EC071BF6F6F6FDFB
8D05F6F6F6F6F6F6F603FB3003F6F6F6F6F6F6F9FB4001F6F61B070A0A0A0A0A
0A0A0A0A0A0A0A0AEC07F3F6F6F6FDFDFD8DF6F6F6F6F6F6F603030303F6F6F6
F6F6F6F9F94001F6F61B070AEC0707070707070707070707EC071BF6F6F6F6F6
F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F61B070AEC071B1B
1B1B1B1B1B1B1B1BEC071BF6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
F6F6F6F6F6F6F6F6F61B070AEC071BF6F6F6F6F6F6F6F6F6EC071BF6F6070707
0707F6F6F6F6F6F60707070707F6F6F6F6F6EF07070707F6F61B070AEC07F3F6
F6F6F6F6F6F6F6F6EC07F3F6F6ECECECECECF6F6F6F6F6F6ECECECECECF6F6F6
F6F6ECECECECECF6F61B070AEC071BF6F6F6F6F6F6F6F6F6EC071BF6F6F6F6F6
F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F61B070AEC071BF6
F6F6F6F6F6F6F6F6EC071BF6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
F6F6F6F6F6F6F6F6F61B070AEC071BF6F6F6F6F6F6F6F6F6EC071BF6F6F60A0A
0A0AF6F6F6F6F6F6F604040404F6F6F6F6F6F60A0A0A0AF6F61B070AEC07F3F6
F6F6F6F6F6F6F64020071BF6F60202022D02F6F6F6F6F6F60606060604F6F6F6
F6F60404040404F6F61B070AEC071BF6F6F6F6F6F6F6F6F6EC071BF6F6F67272
7202F6F6F6F6F6F6F606FE0604F6F6F6F6F6F6FCB2B204F6F61B070AEC071BF6
F6F6F6F6F6F6F6E940071BF6F6F6FAFB7202F6F6F6F6F6F6F606FE0604F6F6F6
F6F6F6FCFEB204F6F61B070AEC071BF6F638F6F6F6F6F6F6EC071BF6F6F6FB38
7202F6F6F6F6F6F6F606060606F6F6F6F6F6F6FCFCFC04F6F61B070AEC07F3F6
F6FB38F6F6F6F6404007F3F6FF40E9F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6
F6F6F6F6F6F6F6F6F61B070AEC071BF6F6F6FB40F6F6F6F6EC071B1B20401B1B
1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B070AEC071BF6
F6F6FF2040F6F6E9400707E94007070707070707070707070707070707070707
07070707070707070707070AEC071BF6F6F6F6F640E9F6402004404004040404
0404040404040404040404040404040404040404040404040404040AEC071BF6
F6F6F6F6F6404040404020040404040404040404040404040404040404040404
040A0A0A0A0A0A0A0A0A040AEC071BF6F6F6F6F6F640E9E9E9E9040404040404
040404040404040404040404040404040407070A07070A07070A040AECFBFBF6
3840F6404040E907ECE94004F904380404FB0404040404040404040404040404
04F6070AF6070AF6070A040AECFB38F6FB40F6402040E907ECE94004F904FB04
04FB040404040404040404040404040404040404040404040404040AEC07F3F6
F6F6F6F6F640E9E9E9E920ECECECECECECECECECECECECECECECECECECECECEC
ECECECECECECECECECECEC0AEC071BF6F6F6F6F6F6E9404040404040FFF6F6F6
F6F6F6F6F6F6F6F6F6F6F6F6F61B070A000000000000000000000000EC071BF6
F6F6F6F64040FFFFFFFFFF4020F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F61B070A
000000000000000000000000EC071BF6F6F6F64040FFFF4040FFFFFF4040F6F6
F6F6F6F6F6F6F6F6F6F6F6F6F61B070A000000000000000000000000EC07F3F6
F6F6FB40FFFFFFFFFFFFFFFFFF4038F6F6F6F6F6F6F6F6F6F6F6F6F6F61B070A
000000000000000000000000EC071B1B1BFBFB1B1B1B1B40401B1B1B1B1BFB38
1B1B1B1B1B1B1B1B1B1B1B1B1B1B070A000000000000000000000000EC070707
070707070707070707070707070707FB0707070707070707070707070707070A
000000000000000000000000EC04040404040404040404040404040404040404
0404040404040404040404040404040A000000000000000000000000EC040404
0404040404040404040404040404040404040404040A0A0A0A0A0A0A0A0A040A
000000000000000000000000EC04040404040404040404040404040404040404
040404040407070A07070A07070A040A000000000000000000000000EC040404
040404040404040404040404040404040404040404F6070AF6070AF6070A040A
000000000000000000000000EC04040404040404040404040404040404040404
0404040404040404040404040404040A000000000000000000000000ECECECEC
ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC0A
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000FFFFFFFF
FFFF0000FFFFFFFFFFFF0000FFF0000000000000FFF0000000000000FFF00000
00000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00000
00000000FFF0000000000000FFF0000000000000FFF0000000000000FFF00000
00000000FFF00000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000FFF000000000000
0FFF0000000000000FFF0000000000000FFF0000000000000FFF000000000000
0FFF0000000000000FFF0000000000000FFF0000000000000FFF000000000000
0FFF0000000000000FFF0000000000000FFF0000FFFFFFFFFFFF0000}
end
object Label1: TLabel
Left = 48
Top = 8
Width = 91
Height = 20
Caption = 'ViaThinkSoft'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -16
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object Label2: TLabel
Left = 48
Top = 24
Width = 139
Height = 29
Caption = 'UserDetect 2'
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -24
Font.Name = 'MS Sans Serif'
Font.Style = []
ParentFont = False
end
object Label3: TLabel
Left = 48
Top = 64
Width = 38
Height = 13
Caption = 'Version:'
end
object Label4: TLabel
Left = 48
Top = 88
Width = 26
Height = 13
Caption = 'Web:'
end
object Label5: TLabel
Left = 48
Top = 104
Width = 32
Height = 13
Caption = 'E-Mail:'
end
object Label6: TLabel
Left = 104
Top = 88
Width = 104
Height = 13
Cursor = crHandPoint
Caption = 'www.viathinksoft.com'
Font.Charset = DEFAULT_CHARSET
Font.Color = clHighlight
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnClick = URLLabelClick
end
object Label7: TLabel
Left = 104
Top = 104
Width = 118
Height = 13
Cursor = crHandPoint
Caption = 'info@daniel-marschall.de'
Font.Charset = DEFAULT_CHARSET
Font.Color = clHighlight
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = [fsUnderline]
ParentFont = False
OnClick = URLLabelClick
end
object Label8: TLabel
Left = 48
Top = 128
Width = 149
Height = 13
Caption = 'Project leader: Daniel Marschall'
end
object VersionLabel: TLabel
Left = 104
Top = 64
Width = 15
Height = 13
Caption = '2.0'
end
object Memo1: TMemo
Left = 264
Top = 8
Width = 482
Height = 356
Anchors = [akLeft, akTop, akRight, akBottom]
Lines.Strings = (
' GNU GENERAL PUBLIC LICENSE'
' Version 3, 29 June 2007'
''
' Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.o' +
'rg/>'
' Everyone is permitted to copy and distribute verbatim copies'
' of this license document, but changing it is not allowed.'
''
' Preamble'
''
' The GNU General Public License is a free, copyleft license for'
'software and other kinds of works.'
''
' The licenses for most software and other practical works are d' +
'esigned'
'to take away your freedom to share and change the works. By con' +
'trast,'
'the GNU General Public License is intended to guarantee your fre' +
'edom to'
'share and change all versions of a program--to make sure it rema' +
'ins free'
'software for all its users. We, the Free Software Foundation, u' +
'se the'
'GNU General Public License for most of our software; it applies ' +
'also to'
'any other work released this way by its authors. You can apply ' +
'it to'
'your programs, too.'
''
' When we speak of free software, we are referring to freedom, n' +
'ot'
'price. Our General Public Licenses are designed to make sure th' +
'at you'
'have the freedom to distribute copies of free software (and char' +
'ge for'
'them if you wish), that you receive source code or can get it if' +
' you'
'want it, that you can change the software or use pieces of it in' +
' new'
'free programs, and that you know you can do these things.'
''
' To protect your rights, we need to prevent others from denying' +
' you'
'these rights or asking you to surrender the rights. Therefore, ' +
'you have'
'certain responsibilities if you distribute copies of the softwar' +
'e, or if'
'you modify it: responsibilities to respect the freedom of others' +
'.'
''
' For example, if you distribute copies of such a program, wheth' +
'er'
'gratis or for a fee, you must pass on to the recipients the same'
'freedoms that you received. You must make sure that they, too, ' +
'receive'
'or can get the source code. And you must show them these terms ' +
'so they'
'know their rights.'
''
' Developers that use the GNU GPL protect your rights with two s' +
'teps:'
'(1) assert copyright on the software, and (2) offer you this Lic' +
'ense'
'giving you legal permission to copy, distribute and/or modify it' +
'.'
''
' For the developers'#39' and authors'#39' protection, the GPL clearly e' +
'xplains'
'that there is no warranty for this free software. For both user' +
's'#39' and'
'authors'#39' sake, the GPL requires that modified versions be marked' +
' as'
'changed, so that their problems will not be attributed erroneous' +
'ly to'
'authors of previous versions.'
''
' Some devices are designed to deny users access to install or r' +
'un'
'modified versions of the software inside them, although the manu' +
'facturer'
'can do so. This is fundamentally incompatible with the aim of'
'protecting users'#39' freedom to change the software. The systemati' +
'c'
'pattern of such abuse occurs in the area of products for individ' +
'uals to'
'use, which is precisely where it is most unacceptable. Therefor' +
'e, we'
'have designed this version of the GPL to prohibit the practice f' +
'or those'
'products. If such problems arise substantially in other domains' +
', we'
'stand ready to extend this provision to those domains in future ' +
'versions'
'of the GPL, as needed to protect the freedom of users.'
''
' Finally, every program is threatened constantly by software pa' +
'tents.'
'States should not allow patents to restrict development and use ' +
'of'
'software on general-purpose computers, but in those that do, we ' +
'wish to'
'avoid the special danger that patents applied to a free program ' +
'could'
'make it effectively proprietary. To prevent this, the GPL assur' +
'es that'
'patents cannot be used to render the program non-free.'
''
' The precise terms and conditions for copying, distribution and'
'modification follow.'
''
' TERMS AND CONDITIONS'
''
' 0. Definitions.'
''
' "This License" refers to version 3 of the GNU General Public L' +
'icense.'
''
' "Copyright" also means copyright-like laws that apply to other' +
' kinds of'
'works, such as semiconductor masks.'
''
' "The Program" refers to any copyrightable work licensed under ' +
'this'
'License. Each licensee is addressed as "you". "Licensees" and'
'"recipients" may be individuals or organizations.'
''
' To "modify" a work means to copy from or adapt all or part of ' +
'the work'
'in a fashion requiring copyright permission, other than the maki' +
'ng of an'
'exact copy. The resulting work is called a "modified version" o' +
'f the'
'earlier work or a work "based on" the earlier work.'
''
' A "covered work" means either the unmodified Program or a work' +
' based'
'on the Program.'
''
' To "propagate" a work means to do anything with it that, witho' +
'ut'
'permission, would make you directly or secondarily liable for'
'infringement under applicable copyright law, except executing it' +
' on a'
'computer or modifying a private copy. Propagation includes copy' +
'ing,'
'distribution (with or without modification), making available to' +
' the'
'public, and in some countries other activities as well.'
''
' To "convey" a work means any kind of propagation that enables ' +
'other'
'parties to make or receive copies. Mere interaction with a user' +
' through'
'a computer network, with no transfer of a copy, is not conveying' +
'.'
''
' An interactive user interface displays "Appropriate Legal Noti' +
'ces"'
'to the extent that it includes a convenient and prominently visi' +
'ble'
'feature that (1) displays an appropriate copyright notice, and (' +
'2)'
'tells the user that there is no warranty for the work (except to' +
' the'
'extent that warranties are provided), that licensees may convey ' +
'the'
'work under this License, and how to view a copy of this License.' +
' If'
'the interface presents a list of user commands or options, such ' +
'as a'
'menu, a prominent item in the list meets this criterion.'
''
' 1. Source Code.'
''
' The "source code" for a work means the preferred form of the w' +
'ork'
'for making modifications to it. "Object code" means any non-sou' +
'rce'
'form of a work.'
''
' A "Standard Interface" means an interface that either is an of' +
'ficial'
'standard defined by a recognized standards body, or, in the case' +
' of'
'interfaces specified for a particular programming language, one ' +
'that'
'is widely used among developers working in that language.'
''
' The "System Libraries" of an executable work include anything,' +
' other'
'than the work as a whole, that (a) is included in the normal for' +
'm of'
'packaging a Major Component, but which is not part of that Major'
'Component, and (b) serves only to enable use of the work with th' +
'at'
'Major Component, or to implement a Standard Interface for which ' +
'an'
'implementation is available to the public in source code form. ' +
'A'
'"Major Component", in this context, means a major essential comp' +
'onent'
'(kernel, window system, and so on) of the specific operating sys' +
'tem'
'(if any) on which the executable work runs, or a compiler used t' +
'o'
'produce the work, or an object code interpreter used to run it.'
''
' The "Corresponding Source" for a work in object code form mean' +
's all'
'the source code needed to generate, install, and (for an executa' +
'ble'
'work) run the object code and to modify the work, including scri' +
'pts to'
'control those activities. However, it does not include the work' +
#39's'
'System Libraries, or general-purpose tools or generally availabl' +
'e free'
'programs which are used unmodified in performing those activitie' +
's but'
'which are not part of the work. For example, Corresponding Sour' +
'ce'
'includes interface definition files associated with source files' +
' for'
'the work, and the source code for shared libraries and dynamical' +
'ly'
'linked subprograms that the work is specifically designed to req' +
'uire,'
'such as by intimate data communication or control flow between t' +
'hose'
'subprograms and other parts of the work.'
''
' The Corresponding Source need not include anything that users'
'can regenerate automatically from other parts of the Correspondi' +
'ng'
'Source.'
''
' The Corresponding Source for a work in source code form is tha' +
't'
'same work.'
''
' 2. Basic Permissions.'
''
' All rights granted under this License are granted for the term' +
' of'
'copyright on the Program, and are irrevocable provided the state' +
'd'
'conditions are met. This License explicitly affirms your unlimi' +
'ted'
'permission to run the unmodified Program. The output from runni' +
'ng a'
'covered work is covered by this License only if the output, give' +
'n its'
'content, constitutes a covered work. This License acknowledges ' +
'your'
'rights of fair use or other equivalent, as provided by copyright' +
' law.'
''
' You may make, run and propagate covered works that you do not'
'convey, without conditions so long as your license otherwise rem' +
'ains'
'in force. You may convey covered works to others for the sole p' +
'urpose'
'of having them make modifications exclusively for you, or provid' +
'e you'
'with facilities for running those works, provided that you compl' +
'y with'
'the terms of this License in conveying all material for which yo' +
'u do'
'not control copyright. Those thus making or running the covered' +
' works'
'for you must do so exclusively on your behalf, under your direct' +
'ion'
'and control, on terms that prohibit them from making any copies ' +
'of'
'your copyrighted material outside their relationship with you.'
''
' Conveying under any other circumstances is permitted solely un' +
'der'
'the conditions stated below. Sublicensing is not allowed; secti' +
'on 10'
'makes it unnecessary.'
''
' 3. Protecting Users'#39' Legal Rights From Anti-Circumvention Law.'
''
' No covered work shall be deemed part of an effective technolog' +
'ical'
'measure under any applicable law fulfilling obligations under ar' +
'ticle'
'11 of the WIPO copyright treaty adopted on 20 December 1996, or'
'similar laws prohibiting or restricting circumvention of such'
'measures.'
''
' When you convey a covered work, you waive any legal power to f' +
'orbid'
'circumvention of technological measures to the extent such circu' +
'mvention'
'is effected by exercising rights under this License with respect' +
' to'
'the covered work, and you disclaim any intention to limit operat' +
'ion or'
'modification of the work as a means of enforcing, against the wo' +
'rk'#39's'
'users, your or third parties'#39' legal rights to forbid circumventi' +
'on of'
'technological measures.'
''
' 4. Conveying Verbatim Copies.'
''
' You may convey verbatim copies of the Program'#39's source code as' +
' you'
'receive it, in any medium, provided that you conspicuously and'
'appropriately publish on each copy an appropriate copyright noti' +
'ce;'
'keep intact all notices stating that this License and any'
'non-permissive terms added in accord with section 7 apply to the' +
' code;'
'keep intact all notices of the absence of any warranty; and give' +
' all'
'recipients a copy of this License along with the Program.'
''
' You may charge any price or no price for each copy that you co' +
'nvey,'
'and you may offer support or warranty protection for a fee.'
''
' 5. Conveying Modified Source Versions.'
''
' You may convey a work based on the Program, or the modificatio' +
'ns to'
'produce it from the Program, in the form of source code under th' +
'e'
'terms of section 4, provided that you also meet all of these con' +
'ditions:'
''
' a) The work must carry prominent notices stating that you mo' +
'dified'
' it, and giving a relevant date.'
''
' b) The work must carry prominent notices stating that it is'
' released under this License and any conditions added under s' +
'ection'
' 7. This requirement modifies the requirement in section 4 t' +
'o'
' "keep intact all notices".'
''
' c) You must license the entire work, as a whole, under this'
' License to anyone who comes into possession of a copy. This'
' License will therefore apply, along with any applicable sect' +
'ion 7'
' additional terms, to the whole of the work, and all its part' +
's,'
' regardless of how they are packaged. This License gives no'
' permission to license the work in any other way, but it does' +
' not'
' invalidate such permission if you have separately received i' +
't.'
''
' d) If the work has interactive user interfaces, each must di' +
'splay'
' Appropriate Legal Notices; however, if the Program has inter' +
'active'
' interfaces that do not display Appropriate Legal Notices, yo' +
'ur'
' work need not make them do so.'
''
' A compilation of a covered work with other separate and indepe' +
'ndent'
'works, which are not by their nature extensions of the covered w' +
'ork,'
'and which are not combined with it such as to form a larger prog' +
'ram,'
'in or on a volume of a storage or distribution medium, is called' +
' an'
'"aggregate" if the compilation and its resulting copyright are n' +
'ot'
'used to limit the access or legal rights of the compilation'#39's us' +
'ers'
'beyond what the individual works permit. Inclusion of a covered' +
' work'
'in an aggregate does not cause this License to apply to the othe' +
'r'
'parts of the aggregate.'
''
' 6. Conveying Non-Source Forms.'
''
' You may convey a covered work in object code form under the te' +
'rms'
'of sections 4 and 5, provided that you also convey the'
'machine-readable Corresponding Source under the terms of this Li' +
'cense,'
'in one of these ways:'
''
' a) Convey the object code in, or embodied in, a physical pro' +
'duct'
' (including a physical distribution medium), accompanied by t' +
'he'
' Corresponding Source fixed on a durable physical medium'
' customarily used for software interchange.'
''
' b) Convey the object code in, or embodied in, a physical pro' +
'duct'
' (including a physical distribution medium), accompanied by a'
' written offer, valid for at least three years and valid for ' +
'as'
' long as you offer spare parts or customer support for that p' +
'roduct'
' model, to give anyone who possesses the object code either (' +
'1) a'
' copy of the Corresponding Source for all the software in the'
' product that is covered by this License, on a durable physic' +
'al'
' medium customarily used for software interchange, for a pric' +
'e no'
' more than your reasonable cost of physically performing this'
' conveying of source, or (2) access to copy the'
' Corresponding Source from a network server at no charge.'
''
' c) Convey individual copies of the object code with a copy o' +
'f the'
' written offer to provide the Corresponding Source. This'
' alternative is allowed only occasionally and noncommercially' +
', and'
' only if you received the object code with such an offer, in ' +
'accord'
' with subsection 6b.'
''
' d) Convey the object code by offering access from a designat' +
'ed'
' place (gratis or for a charge), and offer equivalent access ' +
'to the'
' Corresponding Source in the same way through the same place ' +
'at no'
' further charge. You need not require recipients to copy the'
' Corresponding Source along with the object code. If the pla' +
'ce to'
' copy the object code is a network server, the Corresponding ' +
'Source'
' may be on a different server (operated by you or a third par' +
'ty)'
' that supports equivalent copying facilities, provided you ma' +
'intain'
' clear directions next to the object code saying where to fin' +
'd the'
' Corresponding Source. Regardless of what server hosts the'
' Corresponding Source, you remain obligated to ensure that it' +
' is'
' available for as long as needed to satisfy these requirement' +
's.'
''
' e) Convey the object code using peer-to-peer transmission, p' +
'rovided'
' you inform other peers where the object code and Correspondi' +
'ng'
' Source of the work are being offered to the general public a' +
't no'
' charge under subsection 6d.'
''
' A separable portion of the object code, whose source code is e' +
'xcluded'
'from the Corresponding Source as a System Library, need not be'
'included in conveying the object code work.'
''
' A "User Product" is either (1) a "consumer product", which mea' +
'ns any'
'tangible personal property which is normally used for personal, ' +
'family,'
'or household purposes, or (2) anything designed or sold for inco' +
'rporation'
'into a dwelling. In determining whether a product is a consumer' +
' product,'
'doubtful cases shall be resolved in favor of coverage. For a pa' +
'rticular'
'product received by a particular user, "normally used" refers to' +
' a'
'typical or common use of that class of product, regardless of th' +
'e status'
'of the particular user or of the way in which the particular use' +
'r'
'actually uses, or expects or is expected to use, the product. A' +
' product'
'is a consumer product regardless of whether the product has subs' +
'tantial'
'commercial, industrial or non-consumer uses, unless such uses re' +
'present'
'the only significant mode of use of the product.'
''
' "Installation Information" for a User Product means any method' +
's,'
'procedures, authorization keys, or other information required to' +
' install'
'and execute modified versions of a covered work in that User Pro' +
'duct from'
'a modified version of its Corresponding Source. The information' +
' must'
'suffice to ensure that the continued functioning of the modified' +
' object'
'code is in no case prevented or interfered with solely because'
'modification has been made.'
''
' If you convey an object code work under this section in, or wi' +
'th, or'
'specifically for use in, a User Product, and the conveying occur' +
's as'
'part of a transaction in which the right of possession and use o' +
'f the'
'User Product is transferred to the recipient in perpetuity or fo' +
'r a'
'fixed term (regardless of how the transaction is characterized),' +
' the'
'Corresponding Source conveyed under this section must be accompa' +
'nied'
'by the Installation Information. But this requirement does not ' +
'apply'
'if neither you nor any third party retains the ability to instal' +
'l'
'modified object code on the User Product (for example, the work ' +
'has'
'been installed in ROM).'
''
' The requirement to provide Installation Information does not i' +
'nclude a'
'requirement to continue to provide support service, warranty, or' +
' updates'
'for a work that has been modified or installed by the recipient,' +
' or for'
'the User Product in which it has been modified or installed. Ac' +
'cess to a'
'network may be denied when the modification itself materially an' +
'd'
'adversely affects the operation of the network or violates the r' +
'ules and'
'protocols for communication across the network.'
''
' Corresponding Source conveyed, and Installation Information pr' +
'ovided,'
'in accord with this section must be in a format that is publicly'
'documented (and with an implementation available to the public i' +
'n'
'source code form), and must require no special password or key f' +
'or'
'unpacking, reading or copying.'
''
' 7. Additional Terms.'
''
' "Additional permissions" are terms that supplement the terms o' +
'f this'
'License by making exceptions from one or more of its conditions.'
'Additional permissions that are applicable to the entire Program' +
' shall'
'be treated as though they were included in this License, to the ' +
'extent'
'that they are valid under applicable law. If additional permiss' +
'ions'
'apply only to part of the Program, that part may be used separat' +
'ely'
'under those permissions, but the entire Program remains governed' +
' by'
'this License without regard to the additional permissions.'
''
' When you convey a copy of a covered work, you may at your opti' +
'on'
'remove any additional permissions from that copy, or from any pa' +
'rt of'
'it. (Additional permissions may be written to require their own'
'removal in certain cases when you modify the work.) You may pla' +
'ce'
'additional permissions on material, added by you to a covered wo' +
'rk,'
'for which you have or can give appropriate copyright permission.'
''
' Notwithstanding any other provision of this License, for mater' +
'ial you'
'add to a covered work, you may (if authorized by the copyright h' +
'olders of'
'that material) supplement the terms of this License with terms:'
''
' a) Disclaiming warranty or limiting liability differently fr' +
'om the'
' terms of sections 15 and 16 of this License; or'
''
' b) Requiring preservation of specified reasonable legal noti' +
'ces or'
' author attributions in that material or in the Appropriate L' +
'egal'
' Notices displayed by works containing it; or'
''
' c) Prohibiting misrepresentation of the origin of that mater' +
'ial, or'
' requiring that modified versions of such material be marked ' +
'in'
' reasonable ways as different from the original version; or'
''
' d) Limiting the use for publicity purposes of names of licen' +
'sors or'
' authors of the material; or'
''
' e) Declining to grant rights under trademark law for use of ' +
'some'
' trade names, trademarks, or service marks; or'
''
' f) Requiring indemnification of licensors and authors of tha' +
't'
' material by anyone who conveys the material (or modified ver' +
'sions of'
' it) with contractual assumptions of liability to the recipie' +
'nt, for'
' any liability that these contractual assumptions directly im' +
'pose on'
' those licensors and authors.'
''
' All other non-permissive additional terms are considered "furt' +
'her'
'restrictions" within the meaning of section 10. If the Program ' +
'as you'
'received it, or any part of it, contains a notice stating that i' +
't is'
'governed by this License along with a term that is a further'
'restriction, you may remove that term. If a license document co' +
'ntains'
'a further restriction but permits relicensing or conveying under' +
' this'
'License, you may add to a covered work material governed by the ' +
'terms'
'of that license document, provided that the further restriction ' +
'does'
'not survive such relicensing or conveying.'
''
' If you add terms to a covered work in accord with this section' +
', you'
'must place, in the relevant source files, a statement of the'
'additional terms that apply to those files, or a notice indicati' +
'ng'
'where to find the applicable terms.'
''
' Additional terms, permissive or non-permissive, may be stated ' +
'in the'
'form of a separately written license, or stated as exceptions;'
'the above requirements apply either way.'
''
' 8. Termination.'
''
' You may not propagate or modify a covered work except as expre' +
'ssly'
'provided under this License. Any attempt otherwise to propagate' +
' or'
'modify it is void, and will automatically terminate your rights ' +
'under'
'this License (including any patent licenses granted under the th' +
'ird'
'paragraph of section 11).'
''
' However, if you cease all violation of this License, then your'
'license from a particular copyright holder is reinstated (a)'
'provisionally, unless and until the copyright holder explicitly ' +
'and'
'finally terminates your license, and (b) permanently, if the cop' +
'yright'
'holder fails to notify you of the violation by some reasonable m' +
'eans'
'prior to 60 days after the cessation.'
''
' Moreover, your license from a particular copyright holder is'
'reinstated permanently if the copyright holder notifies you of t' +
'he'
'violation by some reasonable means, this is the first time you h' +
'ave'
'received notice of violation of this License (for any work) from' +
' that'
'copyright holder, and you cure the violation prior to 30 days af' +
'ter'
'your receipt of the notice.'
''
' Termination of your rights under this section does not termina' +
'te the'
'licenses of parties who have received copies or rights from you ' +
'under'
'this License. If your rights have been terminated and not perma' +
'nently'
'reinstated, you do not qualify to receive new licenses for the s' +
'ame'
'material under section 10.'
''
' 9. Acceptance Not Required for Having Copies.'
''
' You are not required to accept this License in order to receiv' +
'e or'
'run a copy of the Program. Ancillary propagation of a covered w' +
'ork'
'occurring solely as a consequence of using peer-to-peer transmis' +
'sion'
'to receive a copy likewise does not require acceptance. However' +
','
'nothing other than this License grants you permission to propaga' +
'te or'
'modify any covered work. These actions infringe copyright if yo' +
'u do'
'not accept this License. Therefore, by modifying or propagating' +
' a'
'covered work, you indicate your acceptance of this License to do' +
' so.'
''
' 10. Automatic Licensing of Downstream Recipients.'
''
' Each time you convey a covered work, the recipient automatical' +
'ly'
'receives a license from the original licensors, to run, modify a' +
'nd'
'propagate that work, subject to this License. You are not respo' +
'nsible'
'for enforcing compliance by third parties with this License.'
''
' An "entity transaction" is a transaction transferring control ' +
'of an'
'organization, or substantially all assets of one, or subdividing' +
' an'
'organization, or merging organizations. If propagation of a cov' +
'ered'
'work results from an entity transaction, each party to that'
'transaction who receives a copy of the work also receives whatev' +
'er'
'licenses to the work the party'#39's predecessor in interest had or ' +
'could'
'give under the previous paragraph, plus a right to possession of' +
' the'
'Corresponding Source of the work from the predecessor in interes' +
't, if'
'the predecessor has it or can get it with reasonable efforts.'
''
' You may not impose any further restrictions on the exercise of' +
' the'
'rights granted or affirmed under this License. For example, you' +
' may'
'not impose a license fee, royalty, or other charge for exercise ' +
'of'
'rights granted under this License, and you may not initiate liti' +
'gation'
'(including a cross-claim or counterclaim in a lawsuit) alleging ' +
'that'
'any patent claim is infringed by making, using, selling, offerin' +
'g for'
'sale, or importing the Program or any portion of it.'
''
' 11. Patents.'
''
' A "contributor" is a copyright holder who authorizes use under' +
' this'
'License of the Program or a work on which the Program is based. ' +
' The'
'work thus licensed is called the contributor'#39's "contributor vers' +
'ion".'
''
' A contributor'#39's "essential patent claims" are all patent claim' +
's'
'owned or controlled by the contributor, whether already acquired' +
' or'
'hereafter acquired, that would be infringed by some manner, perm' +
'itted'
'by this License, of making, using, or selling its contributor ve' +
'rsion,'
'but do not include claims that would be infringed only as a'
'consequence of further modification of the contributor version. ' +
' For'
'purposes of this definition, "control" includes the right to gra' +
'nt'
'patent sublicenses in a manner consistent with the requirements ' +
'of'
'this License.'
''
' Each contributor grants you a non-exclusive, worldwide, royalt' +
'y-free'
'patent license under the contributor'#39's essential patent claims, ' +
'to'
'make, use, sell, offer for sale, import and otherwise run, modif' +
'y and'
'propagate the contents of its contributor version.'
''
' In the following three paragraphs, a "patent license" is any e' +
'xpress'
'agreement or commitment, however denominated, not to enforce a p' +
'atent'
'(such as an express permission to practice a patent or covenant ' +
'not to'
'sue for patent infringement). To "grant" such a patent license ' +
'to a'
'party means to make such an agreement or commitment not to enfor' +
'ce a'
'patent against the party.'
''
' If you convey a covered work, knowingly relying on a patent li' +
'cense,'
'and the Corresponding Source of the work is not available for an' +
'yone'
'to copy, free of charge and under the terms of this License, thr' +
'ough a'
'publicly available network server or other readily accessible me' +
'ans,'
'then you must either (1) cause the Corresponding Source to be so'
'available, or (2) arrange to deprive yourself of the benefit of ' +
'the'
'patent license for this particular work, or (3) arrange, in a ma' +
'nner'
'consistent with the requirements of this License, to extend the ' +
'patent'
'license to downstream recipients. "Knowingly relying" means you' +
' have'
'actual knowledge that, but for the patent license, your conveyin' +
'g the'
'covered work in a country, or your recipient'#39's use of the covere' +
'd work'
'in a country, would infringe one or more identifiable patents in' +
' that'
'country that you have reason to believe are valid.'
''
' If, pursuant to or in connection with a single transaction or'
'arrangement, you convey, or propagate by procuring conveyance of' +
', a'
'covered work, and grant a patent license to some of the parties'
'receiving the covered work authorizing them to use, propagate, m' +
'odify'
'or convey a specific copy of the covered work, then the patent l' +
'icense'
'you grant is automatically extended to all recipients of the cov' +
'ered'
'work and works based on it.'
''
' A patent license is "discriminatory" if it does not include wi' +
'thin'
'the scope of its coverage, prohibits the exercise of, or is'
'conditioned on the non-exercise of one or more of the rights tha' +
't are'
'specifically granted under this License. You may not convey a c' +
'overed'
'work if you are a party to an arrangement with a third party tha' +
't is'
'in the business of distributing software, under which you make p' +
'ayment'
'to the third party based on the extent of your activity of conve' +
'ying'
'the work, and under which the third party grants, to any of the'
'parties who would receive the covered work from you, a discrimin' +
'atory'
'patent license (a) in connection with copies of the covered work'
'conveyed by you (or copies made from those copies), or (b) prima' +
'rily'
'for and in connection with specific products or compilations tha' +
't'
'contain the covered work, unless you entered into that arrangeme' +
'nt,'
'or that patent license was granted, prior to 28 March 2007.'
''
' Nothing in this License shall be construed as excluding or lim' +
'iting'
'any implied license or other defenses to infringement that may'
'otherwise be available to you under applicable patent law.'
''
' 12. No Surrender of Others'#39' Freedom.'
''
' If conditions are imposed on you (whether by court order, agre' +
'ement or'
'otherwise) that contradict the conditions of this License, they ' +
'do not'
'excuse you from the conditions of this License. If you cannot c' +
'onvey a'
'covered work so as to satisfy simultaneously your obligations un' +
'der this'
'License and any other pertinent obligations, then as a consequen' +
'ce you may'
'not convey it at all. For example, if you agree to terms that o' +
'bligate you'
'to collect a royalty for further conveying from those to whom yo' +
'u convey'
'the Program, the only way you could satisfy both those terms and' +
' this'
'License would be to refrain entirely from conveying the Program.'
''
' 13. Use with the GNU Affero General Public License.'
''
' Notwithstanding any other provision of this License, you have'
'permission to link or combine any covered work with a work licen' +
'sed'
'under version 3 of the GNU Affero General Public License into a ' +
'single'
'combined work, and to convey the resulting work. The terms of t' +
'his'
'License will continue to apply to the part which is the covered ' +
'work,'
'but the special requirements of the GNU Affero General Public Li' +
'cense,'
'section 13, concerning interaction through a network will apply ' +
'to the'
'combination as such.'
''
' 14. Revised Versions of this License.'
''
' The Free Software Foundation may publish revised and/or new ve' +
'rsions of'
'the GNU General Public License from time to time. Such new vers' +
'ions will'
'be similar in spirit to the present version, but may differ in d' +
'etail to'
'address new problems or concerns.'
''
' Each version is given a distinguishing version number. If the'
'Program specifies that a certain numbered version of the GNU Gen' +
'eral'
'Public License "or any later version" applies to it, you have th' +
'e'
'option of following the terms and conditions either of that numb' +
'ered'
'version or of any later version published by the Free Software'
'Foundation. If the Program does not specify a version number of' +
' the'
'GNU General Public License, you may choose any version ever publ' +
'ished'
'by the Free Software Foundation.'
''
' If the Program specifies that a proxy can decide which future'
'versions of the GNU General Public License can be used, that pro' +
'xy'#39's'
'public statement of acceptance of a version permanently authoriz' +
'es you'
'to choose that version for the Program.'
''
' Later license versions may give you additional or different'
'permissions. However, no additional obligations are imposed on ' +
'any'
'author or copyright holder as a result of your choosing to follo' +
'w a'
'later version.'
''
' 15. Disclaimer of Warranty.'
''
' THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED ' +
'BY'
'APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COP' +
'YRIGHT'
'HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT' +
' WARRANTY'
'OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIM' +
'ITED TO,'
'THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PART' +
'ICULAR'
'PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF T' +
'HE PROGRAM'
'IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE' +
' COST OF'
'ALL NECESSARY SERVICING, REPAIR OR CORRECTION.'
''
' 16. Limitation of Liability.'
''
' IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN ' +
'WRITING'
'WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/O' +
'R CONVEYS'
'THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, IN' +
'CLUDING ANY'
'GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OU' +
'T OF THE'
'USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED T' +
'O LOSS OF'
'DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YO' +
'U OR THIRD'
'PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PR' +
'OGRAMS),'
'EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSI' +
'BILITY OF'
'SUCH DAMAGES.'
''
' 17. Interpretation of Sections 15 and 16.'
''
' If the disclaimer of warranty and limitation of liability prov' +
'ided'
'above cannot be given local legal effect according to their term' +
's,'
'reviewing courts shall apply local law that most closely approxi' +
'mates'
'an absolute waiver of all civil liability in connection with the'
'Program, unless a warranty or assumption of liability accompanie' +
's a'
'copy of the Program in return for a fee.'
''
' END OF TERMS AND CONDITIONS'
''
' How to Apply These Terms to Your New Programs'
''
' If you develop a new program, and you want it to be of the gre' +
'atest'
'possible use to the public, the best way to achieve this is to m' +
'ake it'
'free software which everyone can redistribute and change under t' +
'hese terms.'
''
' To do so, attach the following notices to the program. It is ' +
'safest'
'to attach them to the start of each source file to most effectiv' +
'ely'
'state the exclusion of warranty; and each file should have at le' +
'ast'
'the "copyright" line and a pointer to where the full notice is f' +
'ound.'
''
' <one line to give the program'#39's name and a brief idea of wha' +
't it does.>'
' Copyright (C) <year> <name of author>'
''
' This program is free software: you can redistribute it and/o' +
'r modify'
' it under the terms of the GNU General Public License as publ' +
'ished by'
' the Free Software Foundation, either version 3 of the Licens' +
'e, or'
' (at your option) any later version.'
''
' This program is distributed in the hope that it will be usef' +
'ul,'
' but WITHOUT ANY WARRANTY; without even the implied warranty ' +
'of'
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See th' +
'e'
' GNU General Public License for more details.'
''
' You should have received a copy of the GNU General Public Li' +
'cense'
' along with this program. If not, see <http://www.gnu.org/li' +
'censes/>.'
''
'Also add information on how to contact you by electronic and pap' +
'er mail.'
''
' If the program does terminal interaction, make it output a sho' +
'rt'
'notice like this when it starts in an interactive mode:'
''
' <program> Copyright (C) <year> <name of author>'
' This program comes with ABSOLUTELY NO WARRANTY; for details ' +
'type `show w'#39'.'
' This is free software, and you are welcome to redistribute i' +
't'
' under certain conditions; type `show c'#39' for details.'
''
'The hypothetical commands `show w'#39' and `show c'#39' should show the ' +
'appropriate'
'parts of the General Public License. Of course, your program'#39's ' +
'commands'
'might be different; for a GUI interface, you would use an "about' +
' box".'
''
' You should also get your employer (if you work as a programmer' +
') or school,'
'if any, to sign a "copyright disclaimer" for the program, if nec' +
'essary.'
'For more information on this, and how to apply and follow the GN' +
'U GPL, see'
'<http://www.gnu.org/licenses/>.'
''
' The GNU General Public License does not permit incorporating y' +
'our program'
'into proprietary programs. If your program is a subroutine libr' +
'ary, you'
'may consider it more useful to permit linking proprietary applic' +
'ations with'
'the library. If this is what you want to do, use the GNU Lesser' +
' General'
'Public License instead of this License. But first, please read'
'<http://www.gnu.org/philosophy/why-not-lgpl.html>.')
ReadOnly = True
ScrollBars = ssBoth
TabOrder = 0
WordWrap = False
end
object Button3: TButton
Left = 48
Top = 176
Width = 137
Height = 33
Caption = 'Check for updates'
TabOrder = 1
OnClick = Button3Click
end
end
object ErrorsTabSheet: TTabSheet
Caption = 'Errors'
ImageIndex = 5
object ErrorsMemo: TMemo
Left = 0
Top = 0
Width = 760
Height = 374
Align = alClient
Lines.Strings = (
'')
ReadOnly = True
ScrollBars = ssVertical
TabOrder = 0
end
end
end
object OpenDialog1: TOpenDialog
DefaultExt = '.ini'
Filter = 'Task Definition File (*.ini)|*.ini|Any file (*.*)|*.*'
Options = [ofHideReadOnly, ofFileMustExist, ofEnableSizing]
Left = 520
Top = 32
end
object TasksImageList: TImageList
Height = 32
Width = 32
Left = 560
Top = 32
Bitmap = {
494C010101000400040020002000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
0000000000003600000028000000800000002000000001002000000000000040
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C0C0C000C0C0C000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000C0C0C000C0C0C000FFFFFF00FFFFFF00C0C0C000C0C0
C000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000C0C0C000C0C0C000FFFFFF00FFFFFF0000FFFF00FFFFFF00FFFFFF00FFFF
FF00C0C0C0000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000080808000C0C0
C000FFFFFF00FFFFFF0000FFFF00FFFFFF00FFFFFF00FFFFFF0000FFFF00FFFF
FF00C0C0C0000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000080808000FFFF
FF0000FFFF00FFFFFF00FFFFFF00FFFFFF0000FFFF00FF000000FF000000FFFF
FF0000FFFF00C0C0C00000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000008080
8000FFFFFF00FFFFFF0000FFFF00FF000000FF000000FFFFFF0000FFFF00FFFF
FF00FFFFFF00C0C0C00000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000080808000C0C0C000FF000000FFFFFF0000FFFF00FFFFFF00FF000000FF00
000000FFFF00C0C0C00000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000808080000000000000FFFF00FFFFFF00FF000000FF00000000FFFF00FFFF
FF00FFFFFF00C0C0C00000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000080808000C0C0C000FF00000000FFFF00FFFFFF00FFFFFF00FF00
000000FFFF00C0C0C00000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000008080800000FFFF00FFFFFF00FFFFFF00FF000000FF000000FFFF
FF00FFFFFF00C0C0C00000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000080808000FFFFFF00FF000000FF000000FFFFFF00FFFFFF00FFFF
FF0000FFFF00C0C0C00000000000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000080808000C0C0C000FFFFFF00FFFFFF00FFFFFF00FF000000FF00
0000FFFFFF00C0C0C00000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF0000000000FFFFFF0080808000808080008080800080808000FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000080808000FFFFFF00FFFFFF00FF000000FF000000FFFFFF00FFFF
FF0000FFFF00C0C0C00000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000008080800000FFFF00FF000000FFFFFF00FFFFFF0000FFFF00FF00
0000FF000000FFFFFF008080800000000000FFFFFF00FFFFFF00000000000000
0000C0C0C00000000000FFFFFF00FFFFFF00000000000000000000000000FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000080808000FFFFFF00FFFFFF0000FFFF00FF000000FF000000FFFF
FF0000FFFF00FFFFFF00FFFFFF00808080000000000000000000FFFFFF00FFFF
FF00C0C0C00000000000FFFFFF0000008000000080000000FF0000008000FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000008080800000FFFF00FF000000FF000000FFFFFF0000FFFF00FFFF
FF00FF000000FF00000000FFFF00FFFFFF0080808000FFFFFF00FFFFFF00FFFF
FF00C0C0C00000000000FFFFFF00FFFFFF000000FF00FFFF00000000FF00FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000080808000FFFFFF0000FFFF00FFFFFF00FF000000FF00
000000FFFF00FFFFFF00FFFFFF00FFFFFF0000FFFF0080808000808080008080
800000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF00000000FF00FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000080808000FFFFFF00FF000000FF00000000FFFF00FFFF
FF00FFFFFF00FFFFFF0000FFFF00FFFFFF00FFFFFF00FFFFFF00C0C0C0008080
8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000008080800000FFFF00FFFFFF00FFFFFF00FFFF
FF0000FFFF00FFFFFF00FFFFFF00C0C0C0008080800080808000808080008080
8000FFFFFF00FFFFFF00FFFFFF0080808000808080008080800080808000FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000808080008080800000FFFF00FFFF
FF00C0C0C000808080008080800080808000FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000080808000C0C0C000808080008080
800080808000FFFFFF00FFFFFF00FFFFFF00FFFFFF0080000000800000008000
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000000000000000000000FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000080808000C0C0C000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080000080800000808000008000
0000FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF0000000000FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000080808000C0C0C000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF0080800000FFFF00008080
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF0000FFFF00FF00FF00FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000080808000C0C0C000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00808000008080
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000080808000C0C0C000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000080808000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000080808000C0C0C000800000008000
0000800000008000000080000000800000008000000080000000800000008000
0000800000008000000080000000800000008000000080000000800000008000
00008000000080000000C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000080808000C0C0C000800000008000
0000800000008000000080000000800000008000000080000000800000008000
0000800000008000000080000000800000008000000080000000800000008000
00008000000080000000C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000080808000C0C0C000800000008000
0000800000008000000080000000800000008000000080000000800000008000
0000800000008000000080000000800000008000000080000000800000008000
00008000000080000000C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000080808000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0C000C0C0
C000C0C0C000C0C0C000C0C0C000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000008080800080808000808080008080
8000808080008080800080808000808080008080800080808000808080008080
8000808080008080800080808000808080008080800080808000808080008080
8000808080008080800080808000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000424D3E000000000000003E000000
2800000080000000200000000100010000000000000200000000000000000000
000000000000000000000000FFFFFF00FF3FFFFF000000000000000000000000
FC0FFFFF000000000000000000000000F007FFFF000000000000000000000000
C003FFFF0000000000000000000000000003FFFF000000000000000000000000
C001FFFF000000000000000000000000E001FFFF000000000000000000000000
F001FFFF000000000000000000000000F401FFFF000000000000000000000000
F801FFFF000000000000000000000000F8000000000000000000000000000000
F8000000000000000000000000000000F8000000000000000000000000000000
F8000000000000000000000000000000F8000000000000000000000000000000
F8000000000000000000000000000000F8000000000000000000000000000000
FC000000000000000000000000000000FC000000000000000000000000000000
FE000000000000000000000000000000FF000000000000000000000000000000
FF000000000000000000000000000000FF000000000000000000000000000000
FF000000000000000000000000000000FF000000000000000000000000000000
FF000000000000000000000000000000FF000000000000000000000000000000
FF000000000000000000000000000000FF000000000000000000000000000000
FF000000000000000000000000000000FF000000000000000000000000000000
FF00000000000000000000000000000000000000000000000000000000000000
000000000000}
end
object SaveDialog1: TSaveDialog
DefaultExt = '.ini'
Filter = 'Task Definition File (*.ini)|*.ini|Any file (*.*)|*.*'
Options = [ofOverwritePrompt, ofHideReadOnly, ofEnableSizing]
Left = 488
Top = 32
end
object TasksPopupMenu: TPopupMenu
OnPopup = TasksPopupMenuPopup
Left = 456
Top = 32
object Run1: TMenuItem
Caption = 'Run'
Default = True
OnClick = Run1Click
end
object Properties1: TMenuItem
Caption = 'Properties'
OnClick = Properties1Click
end
end
object IdentificationsPopupMenu: TPopupMenu
OnPopup = IdentificationsPopupMenuPopup
Left = 424
Top = 32
object CopyTaskDefinitionExample1: TMenuItem
Caption = 'Copy Task Definition Example to Clipboard'
OnClick = CopyTaskDefinitionExample1Click
end
end
object LoadedPluginsPopupMenu: TPopupMenu
OnPopup = LoadedPluginsPopupMenuPopup
Left = 392
Top = 32
object MenuItem1: TMenuItem
Caption = 'Copy status code to Clipboard'
OnClick = MenuItem1Click
end
end
end
/tags/UserDetect2_Release_2.0/ud2_api.h
0,0 → 1,36
#ifndef _UD2_API_H_
#define _UD2_API_H_
 
#include <windows.h>
 
const char UD2_MULTIPLE_ITEMS_DELIMITER = 0x10;
 
#include "ud2_guid.h"
#include "ud2_status.h"
#include "ud2_utils.h"
 
#ifdef BUILDING_DLL
#define UD2_API extern "C" __cdecl __declspec(dllexport)
#else
#define UD2_API extern "C" __cdecl __declspec(dllimport)
#endif
 
UD2_API GUID PluginIdentifier();
UD2_API UD2_STATUS PluginNameW(LPWSTR lpPluginName, DWORD cchSize, LANGID wLangID);
UD2_API UD2_STATUS PluginVersionW(LPWSTR lpPluginVersion, DWORD cchSize, LANGID wLangID);
UD2_API UD2_STATUS PluginVendorW(LPWSTR lpPluginVendor, DWORD cchSize, LANGID wLangID);
UD2_API UD2_STATUS CheckLicense(LPVOID lpReserved);
UD2_API UD2_STATUS IdentificationMethodNameW(LPWSTR lpIdentificationMethodName, DWORD cchSize);
UD2_API UD2_STATUS IdentificationStringW(LPWSTR lpIdentifier, DWORD cchSize);
UD2_API BOOL DescribeOwnStatusCodeW(LPWSTR lpErrorDescription, DWORD cchSize, UD2_STATUS statusCode, LANGID wLangID);
 
const GUID GUID_USERDETECT2_IDPLUGIN_V1 = __GUID("{6C26245E-F79A-416C-8C73-BEA3EC18BB6E}");
#ifdef BUILDING_DLL
UD2_API GUID PluginInterfaceID() {
return GUID_USERDETECT2_IDPLUGIN_V1;
}
#else
UD2_API GUID PluginInterfaceID();
#endif
 
#endif
/tags/UserDetect2_Release_2.0/UserDetect2.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/private/TODO.txt
0,0 → 1,23
 
TODO
----
 
* Develop more plugins
- workstation/server (NetServerGetInfo)
- Computer SID
- Win version
- pc name
- lanman workgroup name
- user name
* (future): also develop a commandline-only-tool that only returns errorlevels, and which does only check a single identification string (equal to testuser.exe, "UserDetect1")
* transfer all functionalities from testuser.exe
* (small detail): in CLI mode, you can see the mainform for a few milliseconds
* (future): Full Task Definition File Editor functionality
* (idea): pass arguments to the plugin, e.g. FileAge(Letter.doc):20=calc.exe
problem: too many requires escape signs and/or forbidden signs, and too complex
* put geticon functions in ud2_obj.pas?
* (idea): can a plugin have multiple methodnames?
* offer possibility to re-load the Task Definition File (maybe even auto-detect if they were changed)
* offer possibility möglichkeit to re-load all plugins
* (idea): slow DLL files killable (via GUI)
* splash screen because of probably slow DLLs
/tags/UserDetect2_Release_2.0/private/todo_more_identifications.pas
0,0 → 1,445
unit todo_more_identifications;
 
interface
 
function IsConnected: boolean;
function GetHostname: string;
function GetComputerName: String;
function GetUserName: String;
function GetSystemWinDir: string;
function GetSystemDrive: AnsiChar;
function GetOSVersion: string;
function GetRegisteredOrganisation: string;
function GetRegisteredOwner: string;
function LaufwerkBereit(root: string): boolean;
function GetMyDocuments: string;
function GetLocalAppData: string;
function GetWindowsDirectory: string;
// function GetWifiSSID: string;
function GetTempDirectory: String;
 
implementation
 
uses
Windows, SysUtils, Registry, wininet, shlobj;
 
type
EAPICallError = Exception;
 
function IsConnected: boolean;
{$IF defined(ANDROID)}
begin
result := IsConnectedAndroid;
end;
{$ELSEIF defined(MACOS)}
//var
//IPW: TIdHTTP;
begin
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := false; // TODO: im zweifelsfall lieber true?
 
// head verzögert den Programmfluss um 1-2 Sekunden...
// Ip-Watch würde auch eine LAN-Adresse zeigen
//TIdHTTP.Head('http://registration.rinntech.com');
//response.code=200 -> true
end;
{$ELSEIF defined(MSWINDOWS)}
var
origin: Cardinal;
begin
result := InternetGetConnectedState(@origin, 0);
end;
{$ELSE}
begin
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := false;
end;
{$IFEND}
 
var CacheHostname: string;
{$IFDEF MSWindows}
function GetHostname: string;
var
reg: TRegistry;
begin
if CacheHostname <> '' then
begin
result := CacheHostname;
Exit;
end;
result := '';
reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
if reg.OpenKeyReadOnly
('\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters') then
begin
result := reg.ReadString('Hostname');
reg.CloseKey;
end;
finally
reg.Free;
end;
CacheHostname := result;
end;
{$ELSE}
function GetHostname: string;
{$IFDEF MACOS}
var
buff: array [0 .. 255] of AnsiChar;
{$ENDIF}
begin
if CacheHostname <> '' then
begin
result := CacheHostname;
Exit;
end;
{$IFDEF MACOS}
Posix.Unistd.gethostname(buff,sizeof(buff));
SetString(result, buff, AnsiStrings.strlen(buff));
CacheHostname := result;
{$ELSE}
{$IFDEF ANDROID}
result := '';
{$ELSE}
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
{$ENDIF}
{$ENDIF}
end;
{$ENDIF}
 
{$IFDEF MSWindows}
function GetComputerName: String;
var
buffer: array [0 .. MAX_PATH] of Char;
Size: dWord;
begin
Size := SizeOf(buffer);
Windows.GetComputerName(buffer, Size);
SetString(result, buffer, lstrlen(buffer));
end;
{$ELSE}
function GetComputerName: String;
{$IFDEF MACOS}
var
Pool: NSAutoreleasePool;
h : NSHost;
{$ENDIF}
begin
{$IFDEF MACOS}
NSDefaultRunLoopMode;
Pool := TNSAutoreleasePool.Create;
try
h := TNSHost.Wrap(TNSHost.OCClass.currentHost);
result := Format('%s',[h.localizedName.UTF8String]);
finally
Pool.drain;
end;
{$ELSE}
{$IFDEF ANDROID}
//TODO: anderer/richtiger name ... AccountManager for email adress, Telephony mngr etc.
result := JStringToString(TJBuild.JavaClass.SERIAL);
{$ELSE}
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := '';
{$ENDIF}
{$ENDIF}
end;
{$ENDIF}
 
{$IFDEF MACOS}
function NSUserName: Pointer; cdecl; external '/System/Library/Frameworks/Foundation.framework/Foundation' name _PU +'NSUserName';
function NSFullUserName: Pointer; cdecl; external '/System/Library/Frameworks/Foundation.framework/Foundation' name _PU + 'NSFullUserName';
{$ENDIF}
 
{$IFDEF MSWindows}
function GetUserName: String;
var
buffer: array [0 .. MAX_PATH] of Char;
Size: dWord;
begin
Size := SizeOf(buffer);
 
if Windows.GetUserName(Buffer, Size) then
begin
// SetString(result, buffer, lstrlen(buffer));
Result := StrPas(Buffer);
end
else
begin
Result := '';
end;
end;
{$ELSE}
function GetUserName: String;
begin
{$IFDEF MACOS}
result := Format('%s',[TNSString.Wrap(NSUserName).UTF8String]);
{$ELSE}
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := '';
{$ENDIF}
end;
{$ENDIF}
 
 
 
 
 
 
 
{$IFDEF MSWindows}
function GetSystemWinDir: string;
var
h: HModule;
{$IFDEF UNICODE}
f: function(lpBuffer: LPWSTR; uSize: UINT): UINT; stdcall;
{$ELSE}
f: function(lpBuffer: LPSTR; uSize: UINT): UINT; stdcall;
{$ENDIF}
res: string;
cnt: UINT;
begin
h := LoadLibrary(kernel32);
if h = 0 then RaiseLastOSError;
 
{$IFDEF UNICODE}
@f := GetProcAddress(h, 'GetSystemWindowsDirectoryW');
{$ELSE}
@f := GetProcAddress(h, 'GetSystemWindowsDirectoryA');
{$ENDIF}
 
SetLength(res, MAX_PATH);
if @f = nil then // Assigned?
begin
// We are probably on Win9x where GetSystemWindowsDirectory* does not exist.
cnt := Windows.GetWindowsDirectory(PChar(res), MAX_PATH);
end
else
begin
// We are on a modern system where GetSystemWindowsDirectory* does exist.
// http://objectmix.com/delphi/402836-getting-hard-drive-letter-windows-runs.html
// Im Gegensatz zu GetWindowsDirectory zeigt GetSystemWindowsDirectory bei
// Terminalservern das System-Windows-Verzeichnis und nicht das "private"
// Windows-Verzeichnis des Users.
cnt := f(PChar(res), MAX_PATH);
end;
 
if cnt <= 0 then RaiseLastOSError;
result := res;
end;
{$ELSE}
function GetSystemWinDir: string;
begin
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := '';
end;
{$ENDIF}
 
function GetSystemDrive: AnsiChar;
var
res: string;
begin
res := ExtractFileDrive(GetSystemWinDir);
Assert(Length(res) >= 1);
result := AnsiChar(res[1]);
end;
 
function GetOSVersion: string;
{$IF Declared(TOSVersion)}
begin
result := TOSVersion.ToString;
{$ELSE}
var
VersionInfo: TOSVersionInfo;
begin
VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
GetVersionEx(VersionInfo);
result := IntToStr(VersionInfo.dwPlatformId) + '-' +
IntToStr(VersionInfo.dwMajorVersion) + '.' +
IntToStr(VersionInfo.dwMinorVersion) + '-' +
IntToStr(VersionInfo.dwBuildNumber)
{$IFEND}
end;
 
{$IFDEF MSWindows}
function GetRegisteredOrganisation: string;
var
reg: TRegistry;
k: string;
VersionInfo: TOSVersionInfo;
begin
result := '';
reg := TRegistry.Create;
try
reg.rootkey := HKEY_LOCAL_MACHINE;
 
VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
GetVersionEx(VersionInfo);
 
if VersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
k := '\Software\Microsoft\Windows NT\CurrentVersion';
end
else
begin
k := '\Software\Microsoft\Windows\CurrentVersion';
end;
if reg.OpenKeyReadOnly(k) then
begin
result := reg.ReadString('RegisteredOrganization');
reg.CloseKey;
end;
finally
reg.Free;
end;
end;
{$ELSE}
function GetRegisteredOrganisation: string;
begin
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := '';
end;
{$ENDIF}
 
{$IFDEF MSWindows}
function GetRegisteredOwner: string;
var
reg: TRegistry;
k: string;
VersionInfo: TOSVersionInfo;
begin
result := '';
reg := TRegistry.Create;
try
reg.rootkey := HKEY_LOCAL_MACHINE;
 
VersionInfo.dwOSVersionInfoSize := SizeOf(VersionInfo);
GetVersionEx(VersionInfo);
 
if VersionInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
begin
k := '\Software\Microsoft\Windows NT\CurrentVersion';
end
else
begin
k := '\Software\Microsoft\Windows\CurrentVersion';
end;
if reg.OpenKeyReadOnly(k) then
begin
result := reg.ReadString('RegisteredOwner');
reg.CloseKey;
end;
finally
reg.Free;
end;
end;
{$ELSE}
function GetRegisteredOwner: string;
begin
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := '';
end;
{$ENDIF}
 
{$IFDEF MSWindows}
function LaufwerkBereit(root: string): boolean;
var
Oem: cardinal;
Dw1, Dw2: DWORD;
begin
// http://www.delphi-treff.de/tipps/system/hardware/feststellen-ob-ein-laufwerk-bereit-ist/
Oem := SetErrorMode(SEM_FAILCRITICALERRORS);
result := GetVolumeInformation(PCHAR(Root), nil, 0, nil, Dw1, Dw2, nil, 0);
SetErrorMode(Oem) ;
end;
{$ELSE}
function LaufwerkBereit(root: string): boolean;
begin
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := false;
end;
{$ENDIF}
 
{$IFDEF MSWindows}
function GetMyDocuments: string;
var
r: Bool;
path: array[0..Max_Path] of Char;
begin
// TODO: Stattdessen ShGetFolderPath verwenden?
r := ShGetSpecialFolderPath(0, path, CSIDL_Personal, False);
if not r then
raise EAPICallError.Create('Could not find MyDocuments folder location.');
Result := Path;
end;
{$ELSE}
function GetMyDocuments: string;
begin
result := TPath.GetDocumentsPath;
end;
{$ENDIF}
 
{$IF not Defined(CSIDL_LOCAL_APPDATA)}
const
CSIDL_LOCAL_APPDATA = $001c;
{$IFEND}
 
{$IFDEF MSWindows}
function GetLocalAppData: string;
var
r: Bool;
path: array[0..Max_Path] of Char;
begin
// TODO: Stattdessen ShGetFolderPath verwenden?
r := ShGetSpecialFolderPath(0, path, CSIDL_LOCAL_APPDATA, False);
if not r then
raise EAPICallError.Create('Could not find LocalAppData folder location.');
Result := Path;
end;
{$ELSE}
function GetLocalAppData: string;
begin
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := '';
end;
{$ENDIF}
 
{$IFDEF MSWindows}
function GetWindowsDirectory: string;
var
WinDir: PChar;
begin
WinDir := StrAlloc(MAX_PATH);
try
Windows.GetWindowsDirectory(WinDir, MAX_PATH);
result := string(WinDir);
finally
StrDispose(WinDir);
end;
end;
{$ELSE}
function GetWindowsDirectory: string;
begin
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := '';
end;
{$ENDIF}
 
{$IFDEF MSWindows}
function GetTempDirectory: String;
var
tempFolder: array [0 .. MAX_PATH] of Char;
begin
GetTempPath(MAX_PATH, @tempFolder);
result := StrPas(tempFolder);
end;
{$ELSE}
function GetTempDirectory: String;
begin
{$MESSAGE Warn 'Nicht implementiert für dieses OS'}
result := '';
end;
{$ENDIF}
 
end.
/tags/UserDetect2_Release_2.0/private/appwizard_list.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/private/appwizard.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/UD2_PluginStatus.pas
0,0 → 1,179
unit UD2_PluginStatus;
 
interface
 
uses
Windows, SysUtils;
 
type
UD2_STATUSCAT = WORD;
UD2_STATUSAUTH = TGUID;
UD2_STATUSMSG = DWORD;
UD2_STATUSEXTRAINFO = DWORD;
 
UD2_STATUS = packed record
cbSize: BYTE;
bReserved: BYTE;
wCategory: UD2_STATUSCAT;
grAuthority: UD2_STATUSAUTH;
dwMessage: UD2_STATUSMSG;
dwExtraInfo: UD2_STATUSEXTRAINFO;
end;
 
const
// Note: we need to declare non-typed constants first, because we cannot use
// typed constants in constant records.
// http://stackoverflow.com/questions/2714365/delphi-all-constants-are-constant-but-some-are-more-constant-than-others
UD2_STATUSAUTH_GENERIC_ = '{90F53368-1EFB-4350-A6BC-725C69938B9C}';
UD2_STATUSAUTH_GENERIC : UD2_STATUSAUTH = UD2_STATUSAUTH_GENERIC_;
 
UD2_STATUSCAT_SUCCESS = 0;
UD2_STATUSCAT_NOT_AVAIL = 1;
UD2_STATUSCAT_FAILED = 2;
 
(* Success codes *)
 
UD2_STATUS_OK_UNSPECIFIED: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_SUCCESS;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 0;
dwExtraInfo: 0
);
UD2_STATUS_OK_SINGLELINE: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_SUCCESS;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 1;
dwExtraInfo: 0
);
UD2_STATUS_OK_MULTILINE: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_SUCCESS;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 2;
dwExtraInfo: 0
);
UD2_STATUS_OK_LICENSED: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_SUCCESS;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 3;
dwExtraInfo: 0
);
 
(* "Not available" codes *)
 
UD2_STATUS_NOTAVAIL_UNSPECIFIED: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_NOT_AVAIL;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 0;
dwExtraInfo: 0
);
UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_NOT_AVAIL;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 1;
dwExtraInfo: 0
);
UD2_STATUS_NOTAVAIL_HW_NOT_SUPPORTED: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_NOT_AVAIL;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 2;
dwExtraInfo: 0
);
UD2_STATUS_NOTAVAIL_NO_ENTITIES: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_NOT_AVAIL;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 3;
dwExtraInfo: 0
);
UD2_STATUS_NOTAVAIL_WINAPI_CALL_FAILURE: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_NOT_AVAIL;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 4;
dwExtraInfo: 0
);
 
(* Failure codes *)
 
UD2_STATUS_FAILURE_UNSPECIFIED: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_FAILED;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 0;
dwExtraInfo: 0
);
UD2_STATUS_FAILURE_BUFFER_TOO_SMALL: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_FAILED;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 1;
dwExtraInfo: 0
);
UD2_STATUS_FAILURE_INVALID_ARGS: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_FAILED;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 2;
dwExtraInfo: 0
);
UD2_STATUS_FAILURE_PLUGIN_NOT_LICENSED: UD2_STATUS = (
cbSize: SizeOf(UD2_STATUS);
bReserved: 0;
wCategory: UD2_STATUSCAT_FAILED;
grAuthority: UD2_STATUSAUTH_GENERIC_;
dwMessage: 3;
dwExtraInfo: 0
);
 
function UD2_STATUS_FormatStatusCode(grStatus: UD2_STATUS): string;
function UD2_STATUS_Equal(grStatus1, grStatus2: UD2_STATUS; compareExtraInfo: boolean): boolean;
function UD2_STATUS_OSError(OSError: DWORD): UD2_STATUS;
 
implementation
 
function UD2_STATUS_FormatStatusCode(grStatus: UD2_STATUS): string;
begin
// 00 0000 {44332211-1234-ABCD-EFEF-001122334455} 00000000 00000000
result := Format('%.2x %.4x %s %.8x %.8x', [
grStatus.bReserved,
grStatus.wCategory,
GUIDTostring(grStatus.grAuthority),
grStatus.dwMessage,
grStatus.dwExtraInfo]);
end;
 
function UD2_STATUS_Equal(grStatus1, grStatus2: UD2_STATUS; compareExtraInfo: boolean): boolean;
begin
result := (grStatus1.bReserved = grStatus2.bReserved) and
(grStatus1.wCategory = grStatus2.wCategory) and
IsEqualGUID(grStatus1.grAuthority, grStatus2.grAuthority) and
(grStatus1.dwMessage = grStatus2.dwMessage);
if compareExtraInfo and (grStatus1.dwExtraInfo <> grStatus2.dwExtraInfo) then result := false;
end;
 
function UD2_STATUS_OSError(OSError: DWORD): UD2_STATUS;
begin
result := UD2_STATUS_NOTAVAIL_WINAPI_CALL_FAILURE;
result.dwExtraInfo := OSError;
end;
 
end.
/tags/UserDetect2_Release_2.0/UD2_Obj.pas
0,0 → 1,657
unit UD2_Obj;
 
interface
 
{$IF CompilerVersion >= 25.0}
{$LEGACYIFEND ON}
{$IFEND}
 
{$INCLUDE 'UserDetect2.inc'}
 
uses
Windows, SysUtils, Classes, IniFiles, Contnrs, Dialogs, UD2_PluginIntf,
UD2_PluginStatus;
 
const
cchBufferSize = 32768;
 
type
TUD2Plugin = class(TObject)
protected
FDetectedIdentifications: TObjectList{<TUD2IdentificationEntry>};
public
PluginDLL: string;
PluginGUID: TGUID;
PluginName: WideString;
PluginVendor: WideString;
PluginVersion: WideString;
IdentificationMethodName: WideString;
 
// ONLY contains the non-failure status code of IdentificationStringW
IdentificationProcedureStatusCode: UD2_STATUS;
IdentificationProcedureStatusCodeDescribed: WideString;
Time: Cardinal;
function PluginGUIDString: string;
property DetectedIdentifications: TObjectList{<TUD2IdentificationEntry>}
read FDetectedIdentifications;
destructor Destroy; override;
constructor Create;
procedure AddIdentification(IdStr: WideString);
end;
 
TUD2IdentificationEntry = class(TObject)
private
FIdentificationString: WideString;
FPlugin: TUD2Plugin;
public
property IdentificationString: WideString read FIdentificationString;
property Plugin: TUD2Plugin read FPlugin;
function GetPrimaryIdName: WideString;
procedure GetIdNames(sl: TStrings);
constructor Create(AIdentificationString: WideString; APlugin: TUD2Plugin);
end;
 
TUD2 = class(TObject)
private
{$IFDEF CHECK_FOR_SAME_PLUGIN_GUID}
FGUIDLookup: TStrings;
{$ENDIF}
protected
FLoadedPlugins: TObjectList{<TUD2Plugin>};
FIniFile: TMemIniFile;
FErrors: TStrings;
FIniFileName: string;
public
property IniFileName: string read FIniFileName;
property Errors: TStrings read FErrors;
property LoadedPlugins: TObjectList{<TUD2Plugin>} read FLoadedPlugins;
property IniFile: TMemIniFile read FIniFile;
procedure GetCommandList(ShortTaskName: string; outSL: TStrings);
procedure HandlePluginDir(APluginDir: string);
procedure GetTaskListing(outSL: TStrings);
constructor Create(AIniFileName: string);
destructor Destroy; override;
function TaskExists(ShortTaskName: string): boolean;
function ReadMetatagString(ShortTaskName, MetatagName: string;
DefaultVal: string): string;
function ReadMetatagBool(ShortTaskName, MetatagName: string;
DefaultVal: string): boolean;
function GetTaskName(AShortTaskName: string): string;
class function GenericErrorLookup(grStatus: UD2_STATUS): string;
end;
 
implementation
 
uses
UD2_Utils;
 
type
TUD2PluginLoader = class(TThread)
protected
dllFile: string;
lngID: LANGID;
procedure Execute; override;
function HandleDLL: boolean;
public
pl: TUD2Plugin;
Errors: TStringList;
constructor Create(Suspended: boolean; DLL: string; alngid: LANGID);
destructor Destroy; override;
end;
 
class function TUD2.GenericErrorLookup(grStatus: UD2_STATUS): string;
resourcestring
LNG_STATUS_OK_UNSPECIFIED = 'Unspecified generic success';
LNG_STATUS_OK_SINGLELINE = 'Operation successful; one identifier returned';
LNG_STATUS_OK_MULTILINE = 'Operation successful; multiple identifiers returned';
 
LNG_STATUS_NOTAVAIL_UNSPECIFIED = 'Unspecified generic "not available" status';
LNG_STATUS_NOTAVAIL_OS_NOT_SUPPORTED = 'Operating system not supported';
LNG_STATUS_NOTAVAIL_HW_NOT_SUPPORTED = 'Hardware not supported';
LNG_STATUS_NOTAVAIL_NO_ENTITIES = 'No entities to identify';
LNG_STATUS_NOTAVAIL_WINAPI_CALL_FAILURE = 'A Windows API call failed. Message: %s';
 
LNG_STATUS_ERROR_UNSPECIFIED = 'Unspecified generic error';
LNG_STATUS_ERROR_BUFFER_TOO_SMALL = 'The provided buffer is too small!';
LNG_STATUS_ERROR_INVALID_ARGS = 'The function received invalid arguments!';
LNG_STATUS_ERROR_PLUGIN_NOT_LICENSED = 'The plugin is not licensed';
 
LNG_UNKNOWN_SUCCESS = 'Unknown "success" status code %s';
LNG_UNKNOWN_NOTAVAIL = 'Unknown "not available" status code %s';
LNG_UNKNOWN_FAILED = 'Unknown "failure" status code %s';
LNG_UNKNOWN_STATUS = 'Unknown status code with unexpected category: %s';
begin
if UD2_STATUS_Equal(grStatus, UD2_STATUS_OK_UNSPECIFIED, false) then result := LNG_STATUS_OK_UNSPECIFIED
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_OK_SINGLELINE, false) then result := LNG_STATUS_OK_SINGLELINE
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_OK_MULTILINE, false) then result := LNG_STATUS_OK_MULTILINE
 
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_NOTAVAIL_UNSPECIFIED, false) then result := LNG_STATUS_NOTAVAIL_UNSPECIFIED
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED, false) then result := LNG_STATUS_NOTAVAIL_OS_NOT_SUPPORTED
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_NOTAVAIL_HW_NOT_SUPPORTED, false) then result := LNG_STATUS_NOTAVAIL_HW_NOT_SUPPORTED
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_NOTAVAIL_NO_ENTITIES, false) then result := LNG_STATUS_NOTAVAIL_NO_ENTITIES
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_NOTAVAIL_WINAPI_CALL_FAILURE, false) then result := Format(LNG_STATUS_NOTAVAIL_WINAPI_CALL_FAILURE, [FormatOSError(grStatus.dwExtraInfo)])
 
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_FAILURE_UNSPECIFIED, false) then result := LNG_STATUS_ERROR_UNSPECIFIED
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_FAILURE_BUFFER_TOO_SMALL, false) then result := LNG_STATUS_ERROR_BUFFER_TOO_SMALL
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_FAILURE_INVALID_ARGS, false) then result := LNG_STATUS_ERROR_INVALID_ARGS
else if UD2_STATUS_Equal(grStatus, UD2_STATUS_FAILURE_PLUGIN_NOT_LICENSED, false) then result := LNG_STATUS_ERROR_PLUGIN_NOT_LICENSED
 
else if grStatus.wCategory = UD2_STATUSCAT_SUCCESS then result := Format(LNG_UNKNOWN_SUCCESS, [UD2_STATUS_FormatStatusCode(grStatus)])
else if grStatus.wCategory = UD2_STATUSCAT_NOT_AVAIL then result := Format(LNG_UNKNOWN_NOTAVAIL, [UD2_STATUS_FormatStatusCode(grStatus)])
else if grStatus.wCategory = UD2_STATUSCAT_FAILED then result := Format(LNG_UNKNOWN_FAILED, [UD2_STATUS_FormatStatusCode(grStatus)])
else result := Format(LNG_UNKNOWN_STATUS, [UD2_STATUS_FormatStatusCode(grStatus)]);
end;
 
{ TUD2Plugin }
 
function TUD2Plugin.PluginGUIDString: string;
begin
result := UpperCase(GUIDToString(PluginGUID));
end;
 
procedure TUD2Plugin.AddIdentification(IdStr: WideString);
begin
DetectedIdentifications.Add(TUD2IdentificationEntry.Create(IdStr, Self))
end;
 
destructor TUD2Plugin.Destroy;
begin
DetectedIdentifications.Free;
inherited;
end;
 
constructor TUD2Plugin.Create;
begin
inherited Create;
FDetectedIdentifications := TObjectList{<TUD2IdentificationEntry>}.Create(true);
end;
 
{ TUD2IdentificationEntry }
 
function TUD2IdentificationEntry.GetPrimaryIdName: WideString;
begin
result := Plugin.IdentificationMethodName+':'+IdentificationString;
end;
 
procedure TUD2IdentificationEntry.GetIdNames(sl: TStrings);
begin
sl.Add(GetPrimaryIdName);
sl.Add(UpperCase(Plugin.IdentificationMethodName)+':'+IdentificationString);
sl.Add(LowerCase(Plugin.IdentificationMethodName)+':'+IdentificationString);
sl.Add(UpperCase(Plugin.PluginGUIDString)+':'+IdentificationString);
sl.Add(LowerCase(Plugin.PluginGUIDString)+':'+IdentificationString);
end;
 
constructor TUD2IdentificationEntry.Create(AIdentificationString: WideString;
APlugin: TUD2Plugin);
begin
inherited Create;
FIdentificationString := AIdentificationString;
FPlugin := APlugin;
end;
 
{ TUD2 }
 
procedure TUD2.HandlePluginDir(APluginDir: string);
Var
SR: TSearchRec;
path: string;
pluginLoader: TUD2PluginLoader;
tob: TObjectList;
i: integer;
{$IFDEF CHECK_FOR_SAME_PLUGIN_GUID}
sPluginID, prevDLL: string;
{$ENDIF}
lngid: LANGID;
resourcestring
LNG_PLUGINS_SAME_GUID = 'Attention: The plugin "%s" and the plugin "%s" have the same identification GUID. The latter will not be loaded.';
begin
tob := TObjectList.Create;
try
tob.OwnsObjects := false;
 
lngID := GetSystemDefaultLangID;
 
path := IncludeTrailingPathDelimiter(APluginDir);
if FindFirst(path + '*.dll', 0, SR) = 0 then
begin
try
repeat
try
tob.Add(TUD2PluginLoader.Create(false, path+sr.Name, lngid));
except
on E: Exception do
begin
MessageDlg(E.Message, mtError, [mbOK], 0);
end;
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
 
for i := 0 to tob.count-1 do
begin
pluginLoader := tob.items[i] as TUD2PluginLoader;
pluginLoader.WaitFor;
Errors.AddStrings(pluginLoader.Errors);
{$IFDEF CHECK_FOR_SAME_PLUGIN_GUID}
if Assigned(pluginLoader.pl) then
begin
sPluginID := GUIDToString(pluginLoader.pl.PluginGUID);
prevDLL := FGUIDLookup.Values[sPluginID];
if (prevDLL <> '') and (prevDLL <> pluginLoader.pl.PluginDLL) then
begin
Errors.Add(Format(LNG_PLUGINS_SAME_GUID, [prevDLL, pluginLoader.pl.PluginDLL]));
pluginLoader.pl.Free;
end
else
begin
FGUIDLookup.Values[sPluginID] := pluginLoader.pl.PluginDLL;
LoadedPlugins.Add(pluginLoader.pl);
end;
end;
{$ENDIF}
pluginLoader.Free;
end;
finally
tob.free;
end;
end;
 
destructor TUD2.Destroy;
begin
FIniFile.Free;
FLoadedPlugins.Free;
{$IFDEF CHECK_FOR_SAME_PLUGIN_GUID}
FGUIDLookup.Free;
{$ENDIF}
FErrors.Free;
end;
 
constructor TUD2.Create(AIniFileName: string);
begin
FIniFileName := AIniFileName;
FLoadedPlugins := TObjectList{<TUD2Plugin>}.Create(true);
FIniFile := TMemIniFile.Create(IniFileName);
{$IFDEF CHECK_FOR_SAME_PLUGIN_GUID}
FGUIDLookup := TStringList.Create;
{$ENDIF}
FErrors := TStringList.Create;
end;
 
function TUD2.GetTaskName(AShortTaskName: string): string;
resourcestring
LNG_NO_DESCRIPTION = '(%s)';
begin
result := FIniFile.ReadString(AShortTaskName, 'Description', Format(LNG_NO_DESCRIPTION, [AShortTaskName]));
end;
 
procedure TUD2.GetTaskListing(outSL: TStrings);
var
sl: TStringList;
i: integer;
desc: string;
begin
sl := TStringList.Create;
try
FIniFile.ReadSections(sl);
for i := 0 to sl.Count-1 do
begin
desc := GetTaskName(sl.Strings[i]);
outSL.Values[sl.Strings[i]] := desc;
end;
finally
sl.Free;
end;
end;
 
function TUD2.TaskExists(ShortTaskName: string): boolean;
begin
result := FIniFile.SectionExists(ShortTaskName);
end;
 
function TUD2.ReadMetatagString(ShortTaskName, MetatagName: string;
DefaultVal: string): string;
begin
result := IniFile.ReadString(ShortTaskName, MetatagName, DefaultVal);
end;
 
function TUD2.ReadMetatagBool(ShortTaskName, MetatagName: string;
DefaultVal: string): boolean;
begin
// DefaultVal is a string, because we want to allow an empty string, in case the
// user wishes an Exception in case the string is not a valid boolean string
result := BetterInterpreteBool(IniFile.ReadString(ShortTaskName, MetatagName, DefaultVal));
end;
 
(*
 
NAMING EXAMPLE: ComputerName:ABC&&User:John=calc.exe
 
idTerm: ComputerName:ABC&&User:John
idName: ComputerName:ABC
IdMethodName: ComputerName
IdStr ABC
cmd: calc.exe
 
*)
 
procedure TUD2.GetCommandList(ShortTaskName: string; outSL: TStrings);
var
i, j: integer;
cmd: string;
idTerm, idName: WideString;
slSV, slIdNames: TStrings;
x: TArrayOfString;
nameVal: TArrayOfString;
FulfilsEverySubterm: boolean;
pl: TUD2Plugin;
ude: TUD2IdentificationEntry;
begin
SetLength(x, 0);
SetLength(nameVal, 0);
 
slIdNames := TStringList.Create;
try
for i := 0 to LoadedPlugins.Count-1 do
begin
pl := LoadedPlugins.Items[i] as TUD2Plugin;
for j := 0 to pl.DetectedIdentifications.Count-1 do
begin
ude := pl.DetectedIdentifications.Items[j] as TUD2IdentificationEntry;
ude.GetIdNames(slIdNames);
end;
end;
 
slSV := TStringList.Create;
try
FIniFile.ReadSectionValues(ShortTaskName, slSV);
for j := 0 to slSV.Count-1 do
begin
// We are doing the interpretation of the line ourselves, because
// TStringList.Values[] would not allow multiple command lines with the
// same key (idTerm)
nameVal := SplitString('=', slSV.Strings[j]);
idTerm := nameVal[0];
cmd := nameVal[1];
 
if Pos(':', idTerm) = 0 then Continue;
x := SplitString('&&', idTerm);
FulfilsEverySubterm := true;
for i := Low(x) to High(x) do
begin
idName := x[i];
 
if slIdNames.IndexOf(idName) = -1 then
begin
FulfilsEverySubterm := false;
break;
end;
end;
 
if FulfilsEverySubterm then outSL.Add(cmd);
end;
finally
slSV.Free;
end;
finally
slIdNames.Free;
end;
end;
 
{ TUD2PluginLoader }
 
procedure TUD2PluginLoader.Execute;
begin
inherited;
 
HandleDLL;
end;
 
constructor TUD2PluginLoader.Create(Suspended: boolean; DLL: string; alngid: LANGID);
begin
inherited Create(Suspended);
dllfile := dll;
pl := nil;
Errors := TStringList.Create;
lngid := alngid;
end;
 
destructor TUD2PluginLoader.Destroy;
begin
Errors.Free;
inherited;
end;
 
function TUD2PluginLoader.HandleDLL: boolean;
var
sIdentifier: WideString;
sIdentifiers: TArrayOfString;
buf: array[0..cchBufferSize-1] of WideChar;
sPluginConfigFile: string;
iniConfig: TINIFile;
sOverrideGUID: string;
pluginIDfound: boolean;
pluginInterfaceID: TGUID;
dllHandle: Cardinal;
fPluginInterfaceID: TFuncPluginInterfaceID;
fPluginIdentifier: TFuncPluginIdentifier;
fPluginNameW: TFuncPluginNameW;
fPluginVendorW: TFuncPluginVendorW;
fPluginVersionW: TFuncPluginVersionW;
fIdentificationMethodNameW: TFuncIdentificationMethodNameW;
fIdentificationStringW: TFuncIdentificationStringW;
fCheckLicense: TFuncCheckLicense;
fDescribeOwnStatusCodeW: TFuncDescribeOwnStatusCodeW;
statusCode: UD2_STATUS;
i: integer;
starttime, endtime, time: cardinal;
 
function _ErrorLookup(statusCode: UD2_STATUS): WideString;
var
ret: BOOL;
begin
ret := fDescribeOwnStatusCodeW(@buf, cchBufferSize, statusCode, lngID);
if ret then
begin
result := PWideChar(@buf);
Exit;
end;
result := TUD2.GenericErrorLookup(statusCode);
end;
 
resourcestring
LNG_DLL_NOT_LOADED = 'Plugin DLL "%s" could not be loaded.';
LNG_METHOD_NOT_FOUND = 'Method "%s" not found in plugin "%s". The DLL is probably not a valid plugin DLL.';
LNG_INVALID_PLUGIN = 'The plugin "%s" is not a valid plugin for this program version.';
LNG_METHOD_FAILURE = 'Error "%s" at method "%s" of plugin "%s".';
begin
result := false;
startTime := GetTickCount;
 
dllHandle := LoadLibrary(PChar(dllFile));
if dllHandle = 0 then
begin
Errors.Add(Format(LNG_DLL_NOT_LOADED, [dllFile]));
end;
try
@fPluginInterfaceID := GetProcAddress(dllHandle, mnPluginInterfaceID);
if not Assigned(fPluginInterfaceID) then
begin
Errors.Add(Format(LNG_METHOD_NOT_FOUND, [mnPluginInterfaceID, dllFile]));
Exit;
end;
pluginInterfaceID := fPluginInterfaceID();
if not IsEqualGUID(pluginInterfaceID, GUID_USERDETECT2_IDPLUGIN_V1) then
begin
Errors.Add(Format(LNG_INVALID_PLUGIN, [dllFile]));
Exit;
end;
 
@fIdentificationStringW := GetProcAddress(dllHandle, mnIdentificationStringW);
if not Assigned(fIdentificationStringW) then
begin
Errors.Add(Format(LNG_METHOD_NOT_FOUND, [mnIdentificationStringW, dllFile]));
Exit;
end;
 
@fPluginNameW := GetProcAddress(dllHandle, mnPluginNameW);
if not Assigned(fPluginNameW) then
begin
Errors.Add(Format(LNG_METHOD_NOT_FOUND, [mnPluginNameW, dllFile]));
Exit;
end;
 
@fPluginVendorW := GetProcAddress(dllHandle, mnPluginVendorW);
if not Assigned(fPluginVendorW) then
begin
Errors.Add(Format(LNG_METHOD_NOT_FOUND, [mnPluginVendorW, dllFile]));
Exit;
end;
 
@fPluginVersionW := GetProcAddress(dllHandle, mnPluginVersionW);
if not Assigned(fPluginVersionW) then
begin
Errors.Add(Format(LNG_METHOD_NOT_FOUND, [mnPluginVersionW, dllFile]));
Exit;
end;
 
@fCheckLicense := GetProcAddress(dllHandle, mnCheckLicense);
if not Assigned(fCheckLicense) then
begin
Errors.Add(Format(LNG_METHOD_NOT_FOUND, [mnCheckLicense, dllFile]));
Exit;
end;
 
@fIdentificationMethodNameW := GetProcAddress(dllHandle, mnIdentificationMethodNameW);
if not Assigned(fIdentificationMethodNameW) then
begin
Errors.Add(Format(LNG_METHOD_NOT_FOUND, [mnIdentificationMethodNameW, dllFile]));
Exit;
end;
 
@fDescribeOwnStatusCodeW := GetProcAddress(dllHandle, mnDescribeOwnStatusCodeW);
if not Assigned(fDescribeOwnStatusCodeW) then
begin
Errors.Add(Format(LNG_METHOD_NOT_FOUND, [mnDescribeOwnStatusCodeW, dllFile]));
Exit;
end;
 
pl := TUD2Plugin.Create;
pl.PluginDLL := dllFile;
 
pluginIDfound := false;
sPluginConfigFile := ChangeFileExt(dllFile, '.ini');
if FileExists(sPluginConfigFile) then
begin
iniConfig := TIniFile.Create(sPluginConfigFile);
try
sOverrideGUID := iniConfig.ReadString('Compatibility', 'OverrideGUID', '');
if sOverrideGUID <> '' then
begin
pl.PluginGUID := StringToGUID(sOverrideGUID);
pluginIDfound := true;
end;
finally
iniConfig.Free;
end;
end;
 
if not pluginIDfound then
begin
@fPluginIdentifier := GetProcAddress(dllHandle, mnPluginIdentifier);
if not Assigned(fPluginIdentifier) then
begin
Errors.Add(Format(LNG_METHOD_NOT_FOUND, [mnPluginIdentifier, dllFile]));
Exit;
end;
pl.PluginGUID := fPluginIdentifier();
end;
 
statusCode := fCheckLicense(nil);
if statusCode.wCategory = UD2_STATUSCAT_FAILED then
begin
Errors.Add(Format(LNG_METHOD_FAILURE, [_ErrorLookup(statusCode), mnCheckLicense, dllFile]));
Exit;
end;
 
statusCode := fPluginNameW(@buf, cchBufferSize, lngID);
if statusCode.wCategory = UD2_STATUSCAT_SUCCESS then pl.PluginName := PWideChar(@buf)
else if statusCode.wCategory = UD2_STATUSCAT_NOT_AVAIL then pl.PluginName := ''
else
begin
Errors.Add(Format(LNG_METHOD_FAILURE, [_ErrorLookup(statusCode), mnPluginNameW, dllFile]));
Exit;
end;
 
statusCode := fPluginVendorW(@buf, cchBufferSize, lngID);
if statusCode.wCategory = UD2_STATUSCAT_SUCCESS then pl.PluginVendor := PWideChar(@buf)
else if statusCode.wCategory = UD2_STATUSCAT_NOT_AVAIL then pl.PluginVendor := ''
else
begin
Errors.Add(Format(LNG_METHOD_FAILURE, [_ErrorLookup(statusCode), mnPluginVendorW, dllFile]));
Exit;
end;
 
statusCode := fPluginVersionW(@buf, cchBufferSize, lngID);
if statusCode.wCategory = UD2_STATUSCAT_SUCCESS then pl.PluginVersion := PWideChar(@buf)
else if statusCode.wCategory = UD2_STATUSCAT_NOT_AVAIL then pl.PluginVersion := ''
else
begin
Errors.Add(Format(LNG_METHOD_FAILURE, [_ErrorLookup(statusCode), mnPluginVersionW, dllFile]));
Exit;
end;
 
statusCode := fIdentificationMethodNameW(@buf, cchBufferSize);
if statusCode.wCategory = UD2_STATUSCAT_SUCCESS then pl.IdentificationMethodName := PWideChar(@buf)
else if statusCode.wCategory = UD2_STATUSCAT_NOT_AVAIL then pl.IdentificationMethodName := ''
else
begin
Errors.Add(Format(LNG_METHOD_FAILURE, [_ErrorLookup(statusCode), mnIdentificationMethodNameW, dllFile]));
Exit;
end;
 
statusCode := fIdentificationStringW(@buf, cchBufferSize);
pl.IdentificationProcedureStatusCode := statusCode;
pl.IdentificationProcedureStatusCodeDescribed := _ErrorLookup(statusCode);
if statusCode.wCategory = UD2_STATUSCAT_SUCCESS then
begin
sIdentifier := PWideChar(@buf);
if UD2_STATUS_Equal(statusCode, UD2_STATUS_OK_MULTILINE, false) then
begin
// Multiple identifiers (e.g. multiple MAC addresses are delimited via UD2_MULTIPLE_ITEMS_DELIMITER)
SetLength(sIdentifiers, 0);
sIdentifiers := SplitString(UD2_MULTIPLE_ITEMS_DELIMITER, sIdentifier);
for i := Low(sIdentifiers) to High(sIdentifiers) do
begin
pl.AddIdentification(sIdentifiers[i]);
end;
end
else
begin
pl.AddIdentification(sIdentifier);
end;
end
else if statusCode.wCategory <> UD2_STATUSCAT_NOT_AVAIL then
begin
// Errors.Add(Format(LNG_METHOD_FAILURE, [_ErrorLookup(statusCode), mnIdentificationStringW, dllFile]));
Errors.Add(Format(LNG_METHOD_FAILURE, [pl.IdentificationProcedureStatusCodeDescribed, mnIdentificationStringW, dllFile]));
Exit;
end;
 
endtime := GetTickCount;
time := endtime - starttime;
if endtime < starttime then time := High(Cardinal) - time;
pl.time := time;
 
result := true;
finally
if not result and Assigned(pl) then FreeAndNil(pl);
FreeLibrary(dllHandle);
end;
end;
 
end.
/tags/UserDetect2_Release_2.0/UD2_PluginIntf.pas
0,0 → 1,54
unit UD2_PluginIntf;
 
interface
 
{$IF CompilerVersion >= 25.0}
{$LEGACYIFEND ON}
{$IFEND}
 
uses
Windows, SysUtils, UD2_PluginStatus;
 
const
GUID_USERDETECT2_IDPLUGIN_V1: TGUID = '{6C26245E-F79A-416C-8C73-BEA3EC18BB6E}';
 
const
mnPluginInterfaceID = 'PluginInterfaceID';
mnPluginIdentifier = 'PluginIdentifier';
mnPluginNameW = 'PluginNameW';
mnPluginVersionW = 'PluginVersionW';
mnPluginVendorW = 'PluginVendorW';
mnCheckLicense = 'CheckLicense';
mnIdentificationMethodNameW = 'IdentificationMethodNameW';
mnIdentificationStringW = 'IdentificationStringW';
mnDescribeOwnStatusCodeW = 'DescribeOwnStatusCodeW';
 
{$IF not Declared(LPVOID)}
type
LPVOID = Pointer;
{$IFEND}
 
type
TFuncPluginInterfaceID = function(): TGUID; cdecl;
TFuncPluginIdentifier = function(): TGUID; cdecl;
TFuncPluginNameW = function(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
TFuncPluginVersionW = function(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
TFuncPluginVendorW = function(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
TFuncCheckLicense = function(lpReserved: LPVOID): UD2_STATUS; cdecl;
TFuncIdentificationMethodNameW = function(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
TFuncIdentificationStringW = function(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
TFuncDescribeOwnStatusCodeW = function(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
 
const
UD2_MULTIPLE_ITEMS_DELIMITER = #10;
 
function PluginInterfaceID: TGUID; cdecl;
 
implementation
 
function PluginInterfaceID: TGUID; cdecl;
begin
result := GUID_USERDETECT2_IDPLUGIN_V1;
end;
 
end.
/tags/UserDetect2_Release_2.0/UD2_PluginUtils.pas
0,0 → 1,85
unit UD2_PluginUtils;
 
interface
 
{$IF CompilerVersion >= 25.0}
{$LEGACYIFEND ON}
{$IFEND}
 
uses
Windows, Classes, UD2_PluginIntf, UD2_PluginStatus;
 
function UD2_WritePascalStringToPointerW(lpDestination: LPWSTR; cchSize: DWORD;
stSource: WideString): UD2_STATUS;
 
function UD2_WriteStringListToPointerW(lpDestination: LPWSTR; cchSize: DWORD;
slSource: TStrings): UD2_STATUS;
 
implementation
 
uses
Math;
 
function UD2_IsMultiLineW(s: WideString): boolean;
var
i: integer;
c: WideChar;
begin
for i := 1 to Length(s) do
begin
c := s[i];
if c = UD2_MULTIPLE_ITEMS_DELIMITER then //if (c = #10) or (c = #13) then
begin
Result := true;
Exit;
end;
end;
Result := false;
end;
 
function UD2_WritePascalStringToPointerW(lpDestination: LPWSTR; cchSize: DWORD;
stSource: WideString): UD2_STATUS;
var
cchSource: DWORD;
cchCopy: DWORD;
begin
if cchSize = 0 then
begin
result := UD2_STATUS_FAILURE_INVALID_ARGS;
Exit;
end;
 
cchSource := Cardinal(Length(stSource));
cchCopy := Cardinal(Min(cchSource, cchSize));
if cchCopy > 0 then
begin
CopyMemory(lpDestination, @stSource[1], cchCopy*SizeOf(WideChar));
end;
lpDestination[cchCopy] := #0;
 
if cchSource >= cchSize then
result := UD2_STATUS_FAILURE_BUFFER_TOO_SMALL
else if stSource = '' then
result := UD2_STATUS_NOTAVAIL_UNSPECIFIED
else if UD2_IsMultiLineW(stSource) then
result := UD2_STATUS_OK_MULTILINE
else
result := UD2_STATUS_OK_SINGLELINE;
end;
 
function UD2_WriteStringListToPointerW(lpDestination: LPWSTR; cchSize: DWORD;
slSource: TStrings): UD2_STATUS;
var
stSource: WideString;
i: integer;
begin
stSource := '';
for i := 0 to slSource.Count-1 do
begin
if i > 0 then stSource := stSource + UD2_MULTIPLE_ITEMS_DELIMITER;
stSource := stSource + slSource.Strings[i];
end;
result := UD2_WritePascalStringToPointerW(lpDestination, cchSize, stSource);
end;
 
end.
/tags/UserDetect2_Release_2.0/UserDetect2.dpr
0,0 → 1,21
program UserDetect2;
 
uses
Forms,
UD2_Main in 'UD2_Main.pas' {UD2MainForm},
UD2_TaskProperties in 'UD2_TaskProperties.pas' {UD2TaskPropertiesForm},
UD2_PluginIntf in 'UD2_PluginIntf.pas',
UD2_PluginUtils in 'UD2_PluginUtils.pas',
UD2_Obj in 'UD2_Obj.pas',
UD2_Utils in 'UD2_Utils.pas',
UD2_PluginStatus in 'UD2_PluginStatus.pas';
 
{$R WindowsXP.res}
 
{$R *.res}
 
begin
Application.Initialize;
Application.CreateForm(TUD2MainForm, UD2MainForm);
Application.Run;
end.
/tags/UserDetect2_Release_2.0/UserDetect2.inc
0,0 → 1,3
{$DEFINE PREFER_SHELLEXECUTEEX_MESSAGES}
 
{$DEFINE CHECK_FOR_SAME_PLUGIN_GUID}
/tags/UserDetect2_Release_2.0/UD2_TaskProperties.dfm
0,0 → 1,97
object UD2TaskPropertiesForm: TUD2TaskPropertiesForm
Left = 318
Top = 140
Width = 495
Height = 465
Caption = 'Task properties'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
DesignSize = (
479
427)
PixelsPerInch = 96
TextHeight = 13
object Image1: TImage
Left = 16
Top = 16
Width = 32
Height = 32
end
object Label1: TLabel
Left = 64
Top = 56
Width = 62
Height = 13
Caption = 'Configuration'
end
object Label2: TLabel
Left = 64
Top = 307
Width = 275
Height = 13
Anchors = [akLeft, akRight, akBottom]
Caption = 'Following commands will be executed in your environment:'
end
object ValueListEditor1: TValueListEditor
Left = 64
Top = 72
Width = 403
Height = 220
Anchors = [akLeft, akTop, akRight, akBottom]
Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goColSizing, goThumbTracking]
TabOrder = 3
ColWidths = (
205
192)
end
object LabeledEdit1: TLabeledEdit
Left = 64
Top = 24
Width = 227
Height = 21
Anchors = [akLeft, akTop, akRight]
EditLabel.Width = 102
EditLabel.Height = 13
EditLabel.Caption = 'Section Name (intern)'
LabelPosition = lpAbove
LabelSpacing = 3
ReadOnly = True
TabOrder = 2
end
object ListBox1: TListBox
Left = 64
Top = 323
Width = 403
Height = 89
Anchors = [akLeft, akRight, akBottom]
ItemHeight = 13
TabOrder = 4
end
object Button1: TButton
Left = 304
Top = 8
Width = 163
Height = 25
Anchors = [akTop, akRight]
Caption = 'Open Task Definition File'
TabOrder = 1
OnClick = Button1Click
end
object Button2: TButton
Left = 304
Top = 40
Width = 163
Height = 25
Anchors = [akTop, akRight]
Cancel = True
Caption = 'Close'
TabOrder = 0
OnClick = Button2Click
end
end
/tags/UserDetect2_Release_2.0/UserDetect2.dof
0,0 → 1,84
[FileVersion]
Version=6.0
[Compiler]
A=8
B=0
C=1
D=1
E=0
F=0
G=1
H=1
I=1
J=0
K=0
L=1
M=0
N=1
O=1
P=1
Q=0
R=0
S=0
T=0
U=0
V=1
W=0
X=1
Y=1
Z=1
ShowHints=1
ShowWarnings=1
UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE;
[Linker]
MapFile=0
OutputObjs=0
ConsoleApp=1
DebugInfo=0
RemoteSymbols=0
MinStackSize=16384
MaxStackSize=1048576
ImageBase=4194304
ExeDescription=
[Directories]
OutputDir=
UnitOutputDir=
PackageDLLOutputDir=
PackageDCPOutputDir=
SearchPath=
Packages=vcl;rtl;vclx;VclSmp;vclshlctrls
Conditionals=
DebugSourceDirs=
UsePackages=0
[Parameters]
RunParams=
HostApplication=
Launcher=
UseLauncher=0
DebugCWD=
[Version Info]
IncludeVerInfo=1
AutoIncBuild=0
MajorVer=2
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=0
Locale=1033
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=UserDetect2
FileVersion=2.0.0.0
InternalName=UD2
LegalCopyright=(C) 2015 ViaThinkSoft
LegalTrademarks=
OriginalFilename=UserDetect2.exe
ProductName=UserDetect2
ProductVersion=2.0.0.0
Website=www.viathinksoft.de
Project leader=Daniel Marschall - www.daniel-marschall.de
/tags/UserDetect2_Release_2.0/UserDetect2.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/WindowsXP.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/tags/UserDetect2_Release_2.0/cleanup.bat
0,0 → 1,12
@echo off
del *.dcu
del *.cfg
del *.~*
del Plugins\*.dcu
del Plugins\*.cfg
del Plugins\*.~*
del vcl\*.dcu
del vcl\*.~*
del devcpp_plugins\*.o
del devcpp_plugins\*.a
del devcpp_plugins\Makefile.win