Subversion Repositories userdetect2

Compare Revisions

No changes between revisions

Regard whitespace Rev 72 → Rev 73

/trunk/UserDetect2/todo_more_identifications.pas
File deleted
/trunk/UserDetect2/UD2_TaskProperties.pas
88,7 → 88,7
end
else
begin
UD2MainForm.ImageList1.GetIcon(0, Image1.Picture.Icon);
UD2MainForm.TasksImageList.GetIcon(0, Image1.Picture.Icon);
end;
end;
 
/trunk/UserDetect2/UD2_Main.pas
1,19 → 1,5
unit UD2_Main;
 
// TODO: !!ud2 plugin: computer sid, win version, pc name, username, ... (RT)
// TODO (future): auch commandline tool das nur errorlevel zurückgibt
// TODO: alle funktionalitäten aus userdetect1 (is_user) übernehmen
// TODO (kleinigkeit): wie das aufblitzen des forms verhindern bei CLI?
// TODO (future): Editor, um alles in der GUI zu erledigen
// TODO (idee): argumente an die DLL stellen, z.B. FileAge(Letter.doc):20=calc.exe
// TODO: example ini file entwerfen
// TODO: geticon funktion in ud2_obj.pas?
// TODO (idee): ein plugin kann mehrere methodnames haben?
// TODO: möglichkeit, Task Definition File neu zu laden, nach änderungen die man durchgeführt hat
// TODO: möglichkeit, plugins neu zu laden
// TODO (idee): lahme DLLs abschießen beim start (per GUI)
// TODO: splash screen wegen ggf. langer DLL load zeit
 
interface
 
{$IF CompilerVersion >= 25.0}
44,8 → 30,8
TabSheet3: TTabSheet;
IniTemplateMemo: TMemo;
TabSheet4: TTabSheet;
ListView1: TVTSListView;
ImageList1: TImageList;
TasksListView: TVTSListView;
TasksImageList: TImageList;
SaveDialog1: TSaveDialog;
TabSheet5: TTabSheet;
Image1: TImage;
57,8 → 43,8
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
ListView2: TVTSListView;
ListView3: TVTSListView;
LoadedPluginsListView: TVTSListView;
IdentificationsListView: TVTSListView;
ErrorsTabSheet: TTabSheet;
ErrorsMemo: TMemo;
Memo1: TMemo;
65,28 → 51,32
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
PopupMenu1: TPopupMenu;
TasksPopupMenu: TPopupMenu;
Run1: TMenuItem;
Properties1: TMenuItem;
PopupMenu2: TPopupMenu;
IdentificationsPopupMenu: TPopupMenu;
CopyTaskDefinitionExample1: TMenuItem;
Button3: TButton;
VersionLabel: TLabel;
LoadedPluginsPopupMenu: TPopupMenu;
MenuItem1: TMenuItem;
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ListView1DblClick(Sender: TObject);
procedure ListView1KeyPress(Sender: TObject; var Key: Char);
procedure TasksListViewDblClick(Sender: TObject);
procedure TasksListViewKeyPress(Sender: TObject; var Key: Char);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure URLLabelClick(Sender: TObject);
procedure PopupMenu1Popup(Sender: TObject);
procedure TasksPopupMenuPopup(Sender: TObject);
procedure Run1Click(Sender: TObject);
procedure Properties1Click(Sender: TObject);
procedure PopupMenu2Popup(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;
144,6 → 134,7
end
else
begin
ExitCode := EXITCODE_INI_NOT_FOUND;
MessageDlg(Format(LNG_FILE_NOT_FOUND, [ParamStr(1)]), mtError, [mbOK], 0);
result := '';
end;
182,7 → 173,7
iconIndex: integer;
obj: TUD2ListViewEntry;
begin
ListView1.Clear;
TasksListView.Clear;
sl := TStringList.Create;
try
ud2.GetTaskListing(sl);
194,15 → 185,15
Obj.ShortTaskName := ShortTaskName;
Obj.CloseAfterLaunching := ud2.ReadMetatagBool(ShortTaskName, TagCloseAfterLaunching, DefaultCloseAfterLaunching);
 
ListView1.AddItem(sl.Values[ShortTaskName], TObject(Obj));
TasksListView.AddItem(sl.Values[ShortTaskName], TObject(Obj));
 
iconString := ud2.ReadMetatagString(ShortTaskName, TagIcon, '');
if iconString <> '' then
begin
iconIndex := AddIconRecToImageList(SplitIconString(iconString), ImageList1);
iconIndex := AddIconRecToImageList(SplitIconString(iconString), TasksImageList);
if iconIndex <> -1 then
begin
ListView1.Items.Item[ListView1.Items.Count-1].ImageIndex := iconIndex;
TasksListView.Items.Item[TasksListView.Items.Count-1].ImageIndex := iconIndex;
end;
end;
end;
224,6 → 215,7
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;
 
236,6 → 228,7
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
242,7 → 235,7
begin
cmd := slCmds.Strings[i];
if cmd = '' then continue;
UD2_RunCMD(cmd, SW_NORMAL); // TODO: SW_NORMAL konfigurieren?
UD2_RunCMD(cmd, SW_NORMAL); // IDEA: let SW_NORMAL be configurable?
end;
finally
slCmds.Free;
254,9 → 247,9
i: integer;
begin
if Assigned(ud2) then ud2.Free;
for i := 0 to ListView1.Items.Count-1 do
for i := 0 to TasksListView.Items.Count-1 do
begin
TUD2ListViewEntry(ListView1.Items.Item[i].Data).Free;
TUD2ListViewEntry(TasksListView.Items.Item[i].Data).Free;
end;
end;
 
276,7 → 269,7
pl: TUD2Plugin;
ude: TUD2IdentificationEntry;
begin
ListView3.Clear;
IdentificationsListView.Clear;
for i := 0 to ud2.LoadedPlugins.Count-1 do
begin
pl := ud2.LoadedPlugins.Items[i] as TUD2Plugin;
283,7 → 276,7
for j := 0 to pl.DetectedIdentifications.Count-1 do
begin
ude := pl.DetectedIdentifications.Items[j] as TUD2IdentificationEntry;
with ListView3.Items.Add do
with IdentificationsListView.Items.Add do
begin
Caption := pl.PluginName;
SubItems.Add(pl.IdentificationMethodName);
293,9 → 286,9
end;
end;
 
for i := 0 to ListView3.Columns.Count-1 do
for i := 0 to IdentificationsListView.Columns.Count-1 do
begin
ListView3.Columns.Items[i].Width := LVSCW_AUTOSIZE_USEHEADER;
IdentificationsListView.Columns.Items[i].Width := LVSCW_AUTOSIZE_USEHEADER;
end;
end;
 
335,11 → 328,11
i: integer;
pl: TUD2Plugin;
begin
ListView2.Clear;
LoadedPluginsListView.Clear;
for i := 0 to ud2.LoadedPlugins.Count-1 do
begin
pl := ud2.LoadedPlugins.Items[i] as TUD2Plugin;
with ListView2.Items.Add do
with LoadedPluginsListView.Items.Add do
begin
Caption := pl.PluginDLL;
SubItems.Add(pl.PluginVendor);
353,9 → 346,9
end;
end;
 
for i := 0 to ListView2.Columns.Count-1 do
for i := 0 to LoadedPluginsListView.Columns.Count-1 do
begin
ListView2.Columns.Items[i].Width := LVSCW_AUTOSIZE_USEHEADER;
LoadedPluginsListView.Columns.Items[i].Width := LVSCW_AUTOSIZE_USEHEADER;
end;
end;
 
365,11 → 358,14
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;
401,21 → 397,21
end;
end;
 
procedure TUD2MainForm.ListView1DblClick(Sender: TObject);
procedure TUD2MainForm.TasksListViewDblClick(Sender: TObject);
var
obj: TUD2ListViewEntry;
begin
if ListView1.ItemIndex = -1 then exit;
obj := TUD2ListViewEntry(ListView1.Selected.Data);
if TasksListView.ItemIndex = -1 then exit;
obj := TUD2ListViewEntry(TasksListView.Selected.Data);
DoRun(obj.ShortTaskName);
if obj.CloseAfterLaunching then Close;
end;
 
procedure TUD2MainForm.ListView1KeyPress(Sender: TObject; var Key: Char);
procedure TUD2MainForm.TasksListViewKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
ListView1DblClick(Sender);
TasksListViewDblClick(Sender);
end;
end;
 
444,15 → 440,15
UD2_RunCMD(s, SW_NORMAL);
end;
 
procedure TUD2MainForm.PopupMenu1Popup(Sender: TObject);
procedure TUD2MainForm.TasksPopupMenuPopup(Sender: TObject);
begin
Run1.Enabled := ListView1.ItemIndex <> -1;
Properties1.Enabled := ListView1.ItemIndex <> -1;
Run1.Enabled := TasksListView.ItemIndex <> -1;
Properties1.Enabled := TasksListView.ItemIndex <> -1;
end;
 
procedure TUD2MainForm.Run1Click(Sender: TObject);
begin
ListView1DblClick(Sender);
TasksListViewDblClick(Sender);
end;
 
procedure TUD2MainForm.Properties1Click(Sender: TObject);
459,8 → 455,8
var
obj: TUD2ListViewEntry;
begin
if ListView1.ItemIndex = -1 then exit;
obj := TUD2ListViewEntry(ListView1.Selected.Data);
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);
468,9 → 464,9
obj.TaskPropertiesForm.Show;
end;
 
procedure TUD2MainForm.PopupMenu2Popup(Sender: TObject);
procedure TUD2MainForm.IdentificationsPopupMenuPopup(Sender: TObject);
begin
CopyTaskDefinitionExample1.Enabled := ListView3.ItemIndex <> -1;
CopyTaskDefinitionExample1.Enabled := IdentificationsListView.ItemIndex <> -1;
end;
 
procedure TUD2MainForm.CopyTaskDefinitionExample1Click(Sender: TObject);
477,11 → 473,11
var
s: string;
begin
s := '; '+ListView3.Selected.Caption+#13#10+
ListView3.Selected.SubItems[0] + ':' + ListView3.Selected.SubItems[1] + '=calc.exe'+#13#10+
s := '; '+IdentificationsListView.Selected.Caption+#13#10+
IdentificationsListView.Selected.SubItems[0] + ':' + IdentificationsListView.Selected.SubItems[1] + '=calc.exe'+#13#10+
#13#10+
'; Alternatively:'+#13#10+
ListView3.Selected.SubItems[2] + ':' + ListView3.Selected.SubItems[1] + '=calc.exe'+#13#10;
IdentificationsListView.Selected.SubItems[2] + ':' + IdentificationsListView.Selected.SubItems[1] + '=calc.exe'+#13#10;
Clipboard.AsText := s;
end;
 
508,4 → 504,17
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.
/trunk/UserDetect2/Plugins/UserSID.dpr
File deleted
/trunk/UserDetect2/Plugins/UserSID.dof
File deleted
/trunk/UserDetect2/Plugins/UserSID.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/trunk/UserDetect2/Plugins/UserSID.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/trunk/UserDetect2/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.
/trunk/UserDetect2/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
/trunk/UserDetect2/Plugins/ComputerName.dof
72,7 → 72,7
CodePage=1252
[Version Info Keys]
CompanyName=ViaThinkSoft
FileDescription=CompuerName plugin for UserDetect2
FileDescription=ComputerName plugin for UserDetect2
FileVersion=1.0.0.0
InternalName=UD2-ComputerName
LegalCopyright=(C) 2015 ViaThinkSoft
/trunk/UserDetect2/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
/trunk/UserDetect2/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
/trunk/UserDetect2/Plugins/ComputerName.res
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/UserDetect2/Plugins/NetworkUtils.pas
11,11 → 11,12
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;
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
213,4 → 214,63
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.
/trunk/UserDetect2/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
/trunk/UserDetect2/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
/trunk/UserDetect2/Plugins/ComputerName.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/UserDetect2/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.
/trunk/UserDetect2/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
/trunk/UserDetect2/devcpp_plugins/ud2_utils.h
File deleted
/trunk/UserDetect2/devcpp_plugins/ud2_api.h
File deleted
/trunk/UserDetect2/devcpp_plugins/ud2_status.h
File deleted
/trunk/UserDetect2/devcpp_plugins/ud2_guid.h
File deleted
/trunk/UserDetect2/devcpp_plugins/ExamplePlugin.dll
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/UserDetect2/devcpp_plugins/ExamplePlugin.layout
1,16 → 1,16
[Editor_0]
CursorCol=1
CursorRow=1
CursorCol=23
CursorRow=15
TopLine=1
LeftChar=1
[Editor_1]
CursorCol=36
CursorRow=21
TopLine=11
TopLine=1
LeftChar=1
[Editors]
Order=3
Focused=3
Order=3,1,0
Focused=0
[Editor_2]
CursorCol=21
CursorRow=6
17,9 → 17,9
TopLine=1
LeftChar=1
[Editor_3]
CursorCol=34
CursorRow=63
TopLine=57
CursorCol=11
CursorRow=6
TopLine=1
LeftChar=1
[Editor_4]
CursorCol=1
/trunk/UserDetect2/devcpp_plugins/ExamplePlugin.dev
51,7 → 51,7
SyncProduct=1
 
[Unit2]
FileName=ud2_api.h
FileName=../ud2_api.h
CompileCpp=1
Folder=
Compile=1
71,7 → 71,7
BuildCmd=
 
[Unit3]
FileName=ud2_utils.h
FileName=../ud2_utils.h
CompileCpp=1
Folder=
Compile=1
81,7 → 81,7
BuildCmd=
 
[Unit4]
FileName=ud2_status.h
FileName=../ud2_status.h
CompileCpp=1
Folder=
Compile=1
91,7 → 91,7
BuildCmd=
 
[Unit5]
FileName=ud2_guid.h
FileName=../ud2_guid.h
CompileCpp=1
Folder=
Compile=1
/trunk/UserDetect2/devcpp_plugins/ExamplePlugin.cpp
1,6 → 1,6
#define BUILDING_DLL
 
#include "ud2_api.h"
#include "../ud2_api.h"
 
UD2_API GUID PluginIdentifier() {
return __GUID("{7576BD8F-A0C4-436F-B953-B137CBFD9FC7}");
/trunk/UserDetect2/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
/trunk/UserDetect2/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
 
/trunk/UserDetect2/UD2_Utils.pas
11,6 → 11,15
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;
 
147,12 → 156,13
if result = '' then result := Format(LNG_UNKNOWN_ERROR, [ec]);
end;
 
procedure CheckLastOSCall(AThrowException: boolean);
function CheckLastOSCall(AThrowException: boolean): boolean;
var
LastError: Cardinal;
begin
LastError := GetLastError;
if LastError <> 0 then
result := LastError = 0;
if not result then
begin
if AThrowException then
begin
223,6 → 233,7
// 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;
268,7 → 279,7
sei.nShow := WindowMode;
if ShellExecuteEx(@sei) then Exit;
{$IFNDEF PREFER_SHELLEXECUTEEX_MESSAGES}
CheckLastOSCall(false);
if not CheckLastOSCall(false) then ExitCode := EXITCODE_RUN_FAILURE;
{$ENDIF}
end;
 
/trunk/UserDetect2/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
/trunk/UserDetect2/Documentation.rtf
4,15 → 4,15
{\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;}{\f374\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f375\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
{\f377\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f378\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f379\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f380\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
{\f381\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f382\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f394\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f395\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}
{\f397\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f398\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f399\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f400\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}
{\f401\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f402\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f714\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f715\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
{\f717\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f718\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f721\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f722\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}
{\f734\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\f735\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}{\f737\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}{\f738\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}
{\f741\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\f742\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}{\f744\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f745\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
{\f747\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f748\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f751\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f752\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}
{\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;}
148,12 → 148,12
\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\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\rsid11930278\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\hr8\min9}{\version103}{\edmins0}{\nofpages12}{\nofwords2713}{\nofchars17095}{\nofcharsws19769}{\vern57439}}{\*\xmlnstbl {\xmlns1 http://schemas.micro
soft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1417\margr1417\margt1417\margb1134\gutter0\ltrsect
\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 )}}
250,6 → 250,30
\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
283,7 → 307,8
\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 \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 }{\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
292,14 → 317,15
\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\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 \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 \hich\f31506
The Task Definition 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:
\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
309,8 → 335,8
\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,\hich\af31506\dbch\af31505\loch\f31506 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.
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.
346,7 → 372,7
\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 \hich\af31506\dbch\af31505\loch\f31506 if no identification fields are added in the current task.}{
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
361,7 → 387,8
\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 field}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid12666715 \hich\af31506\dbch\af31505\loch\f31506 has following syntax:
\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
377,13 → 404,13
\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\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 , then 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
\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
Alternative\hich\af31506\dbch\af31505\loch\f31506 ly to the }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid9388365 \hich\af2\dbch\af31505\loch\f2 MethodName}{\rtlch\fcs1 \af0 \ltrch\fcs0
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
391,8 → 418,8
\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 , eith
\hich\af31506\dbch\af31505\loch\f31506 er all 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
\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
439,15 → 466,15
\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, 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 \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 don\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 e with the expression \'93\loch\f31506 \hich\f31506 &&\'94}{\rtlch\fcs1 \af0 \ltrch\fcs0
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
488,28 → 515,30
\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/~daniel-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
\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
2c825dc485276300000000a5ab0001000000006500}}}{\fldrslt {\rtlch\fcs1 \af0 \ltrch\fcs0 \cs17\ul\cf17\lang1033\langfe1031\langnp1033\insrsid9318354\charrsid8086032 \hich\af31506\dbch\af31505\loch\f31506
www.viathinksoft.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
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 \hich\f31506
Plugins are DLL 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
\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\hich\af31506\dbch\af31505\loch\f31506 as well as the default plugins are developed in Delphi.}{\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
554,7 → 583,7
\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:\hich\af2\dbch\af31505\loch\f2 LANGID): }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2
\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
566,7 → 595,7
\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: LP\hich\af2\dbch\af31505\loch\f2 WSTR; cchSize: DWORD): }{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid13381599 \hich\af2\dbch\af31505\loch\f2
\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
588,8 → 617,7
\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 wLa
\hich\af2\dbch\af31505\loch\f2 ngID);
\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);
600,9 → 628,9
\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_S\hich\af2\dbch\af31505\loch\f2 TATUS}{\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
IdentificationStringW(LPWSTR lpIdentifier, DWORD cchSize);}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid12134973
\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
648,8 → 676,8
\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 wide string (16}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid5733712 \hich\af31506\dbch\af31505\loch\f31506 bit).
\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.
677,25 → 705,27
\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 may 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 o
\hich\af31506\dbch\af31505\loch\f31506 n\hich\af31506\dbch\af31505\loch\f31506 the intended computer only.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid5064448
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_ERROR_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
\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 identifica\hich\af31506\dbch\af31505\loch\f31506
tion 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 \hich\f31506 . For 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 }{\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}{
707,10 → 737,10
\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 \hich\af31506\dbch\af31505\loch\f31506
descriptions of the non-generic status codes which THIS plugin is returning. You do not 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
\hich\af31506\dbch\af31505\loch\f31506 r\hich\af31506\dbch\af31505\loch\f31506 esolved. Return TRUE, if you could describe the code, FALSE otherwise, e.g. if the status 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
\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
737,7 → 767,7
\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_STATUSAUTH;
\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;
750,12 → 780,12
\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 ty\hich\af2\dbch\af31505\loch\f2 pedef}{\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 }{\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 alignment
\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 \{
845,8 → 875,8
\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 plugin is licensed}{\rtlch\fcs1 \af0 \ltrch\fcs0
\lang1033\langfe1031\langnp1033\insrsid6964071 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid3998625
\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
858,7 → 888,7
\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_STAT\hich\af2\dbch\af31505\loch\f2 US_NOTAVAIL_NO_ENTITIES}{\rtlch\fcs1 \af0 \ltrch\fcs0
\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
874,16 → 904,20
\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_ERROR_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_ERROR_BUFFER_TOO_SMALL}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid150970\charrsid150970
\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_ERROR_INVALID_ARGS}{\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_ERROR_PLUGIN_NOT_LICEN\hich\af2\dbch\af31505\loch\f2 SED}{\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
\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
905,7 → 939,7
\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, U\hich\af2\dbch\af31505\loch\f2 D2_STATUS grStatus2, bool compareExtraInfo)}{\rtlch\fcs1 \af2 \ltrch\fcs0 \f2\lang1033\langfe1031\langnp1033\insrsid15536699
\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
952,12 → 986,13
\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_ERROR_BUFFER_TOO_SMALL
\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_MUL\hich\af2\dbch\af31505\loch\f2 TILINE
\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
970,7 → 1005,7
\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 function will split each }{\rtlch\fcs1 \af2 \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
980,25 → 1015,25
\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 impro\hich\af31506\dbch\af31505\loch\f31506
ves the readability of the source code}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid538759 \hich\af31506\dbch\af31505\loch\f31506 , since the GUID does not have to be written in a }{\rtlch\fcs1 \af2 \ltrch\fcs0
\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 ti
\hich\af31506\dbch\af31505\loch\f31506 me.}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1929326\charrsid15940546
\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
\hich\af31502\dbch\af31501\loch\f31502 Compatibility Issues
\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 NT4 SP6
\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\hich\af31506\dbch\af31505\loch\f31506 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\hich\af31506\dbch\af31505\loch\f31506 the WinAPI function\hich\af31506\dbch\af31505\loch\f31506 }{\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_SU\hich\af2\dbch\af31505\loch\f2 PPORTED}{\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 .}{\rtlch\fcs1 \af0 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid1981563\charrsid1981563
\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
1006,20 → 1041,20
{\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
002d006d0014000014000000006800}}}{\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 te\hich\af31506\dbch\af31505\loch\f31506 rms of GPLv3.
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:\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
\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
0000a5ab00010067004c007000010000002c000000}}}{\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
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
0000a5ab0001000000000000000000020002490000}}}{\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
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
1161,8 → 1196,8
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000f0a1
3719a2fdd001feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000c051
7f7717fed001feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000105000000000000}}
/trunk/UserDetect2/UD2_Main.dfm
3,7 → 3,7
Top = 177
Width = 784
Height = 440
ActiveControl = ListView2
ActiveControl = TasksListView
Caption = 'ViaThinkSoft UserDetect2'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
22,13 → 22,13
Top = 0
Width = 768
Height = 402
ActivePage = TabSheet4
ActivePage = TasksTabSheet
Align = alClient
TabIndex = 3
TabIndex = 0
TabOrder = 0
object TasksTabSheet: TTabSheet
Caption = 'Tasks'
object ListView1: TVTSListView
object TasksListView: TVTSListView
Left = 0
Top = 0
Width = 760
38,19 → 38,19
Items.Data = {
3B0000000200000000000000FFFFFFFFFFFFFFFF000000000000000004746573
7400000000FFFFFFFFFFFFFFFF0000000000000000057465737432}
LargeImages = ImageList1
LargeImages = TasksImageList
ReadOnly = True
PopupMenu = PopupMenu1
PopupMenu = TasksPopupMenu
TabOrder = 0
OnCompare = ListViewCompare
OnDblClick = ListView1DblClick
OnKeyPress = ListView1KeyPress
OnDblClick = TasksListViewDblClick
OnKeyPress = TasksListViewKeyPress
end
end
object TabSheet2: TTabSheet
Caption = 'Identifications'
ImageIndex = 1
object ListView3: TVTSListView
object IdentificationsListView: TVTSListView
Left = 0
Top = 0
Width = 760
74,7 → 74,7
end>
ReadOnly = True
RowSelect = True
PopupMenu = PopupMenu2
PopupMenu = IdentificationsPopupMenu
TabOrder = 0
ViewStyle = vsReport
OnCompare = ListViewCompare
136,7 → 136,7
object TabSheet4: TTabSheet
Caption = 'Loaded Plugins'
ImageIndex = 3
object ListView2: TVTSListView
object LoadedPluginsListView: TVTSListView
Left = 0
Top = 0
Width = 760
178,6 → 178,7
end>
ReadOnly = True
RowSelect = True
PopupMenu = LoadedPluginsPopupMenu
TabOrder = 0
ViewStyle = vsReport
OnCompare = ListViewCompare
2105,7 → 2106,7
Left = 520
Top = 32
end
object ImageList1: TImageList
object TasksImageList: TImageList
Height = 32
Width = 32
Left = 560
2653,8 → 2654,8
Left = 488
Top = 32
end
object PopupMenu1: TPopupMenu
OnPopup = PopupMenu1Popup
object TasksPopupMenu: TPopupMenu
OnPopup = TasksPopupMenuPopup
Left = 456
Top = 32
object Run1: TMenuItem
2667,8 → 2668,8
OnClick = Properties1Click
end
end
object PopupMenu2: TPopupMenu
OnPopup = PopupMenu2Popup
object IdentificationsPopupMenu: TPopupMenu
OnPopup = IdentificationsPopupMenuPopup
Left = 424
Top = 32
object CopyTaskDefinitionExample1: TMenuItem
2676,4 → 2677,13
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
/trunk/UserDetect2/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
/trunk/UserDetect2/UserDetect2.exe
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/UserDetect2/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
/trunk/UserDetect2/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.
/trunk/vcl/AlphaNumSort.dcu
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
/trunk/vcl/VTSCompat.dcu
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
/trunk/vcl/VTSListView.dcu
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
/trunk/vcl/PatchU.dcu
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