Subversion Repositories userdetect2

Rev

Rev 70 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
68 daniel-mar 1
library GatewayMAC;
2
 
3
uses
4
  Windows,
5
  SysUtils,
6
  Classes,
7
  UD2_PluginIntf in '..\UD2_PluginIntf.pas',
8
  UD2_PluginUtils in '..\UD2_PluginUtils.pas',
71 daniel-mar 9
  UD2_PluginStatus in '..\UD2_PluginStatus.pas',
68 daniel-mar 10
  NetworkUtils in 'NetworkUtils.pas';
11
 
12
{$R *.res}
13
 
14
const
15
  PLUGIN_GUID: TGUID = '{C24258AE-2092-41CA-9DB5-313B38954D01}';
16
 
17
function PluginIdentifier: TGUID; cdecl;
18
begin
19
  result := PLUGIN_GUID;
20
end;
21
 
69 daniel-mar 22
function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
68 daniel-mar 23
var
24
  sl, sl2: TStringList;
25
  i: integer;
26
  ip, mac: string;
70 daniel-mar 27
  ec: DWORD;
68 daniel-mar 28
begin
29
  sl := TStringList.Create;
30
  sl2 := TStringList.Create;
31
  try
70 daniel-mar 32
    ec := GetGatewayIPAddressList(sl);
33
    if ec = ERROR_NOT_SUPPORTED then
34
    begin
35
      result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
36
      Exit;
37
    end
38
    else if ec <> ERROR_SUCCESS then
39
    begin
71 daniel-mar 40
      result := UD2_STATUS_OSError(ec);
70 daniel-mar 41
      Exit;
42
    end;
43
 
68 daniel-mar 44
    for i := 0 to sl.Count-1 do
45
    begin
46
      ip := sl.Strings[i];
70 daniel-mar 47
      ec := GetMACAddress(ip, mac);
48
      if ec = ERROR_NOT_SUPPORTED then
68 daniel-mar 49
      begin
70 daniel-mar 50
        result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
51
        Exit;
52
      end
53
      else if (ec = S_OK) and
54
              (mac <> '') and
55
              (sl2.IndexOf(mac) = -1) then
56
      begin
68 daniel-mar 57
        sl2.add(mac);
58
      end;
59
    end;
69 daniel-mar 60
    result := UD2_WriteStringListToPointerW(lpIdentifier, cchSize, sl2);
68 daniel-mar 61
  finally
62
    sl.Free;
63
    sl2.Free;
64
  end;
65
end;
66
 
69 daniel-mar 67
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
68 daniel-mar 68
var
69
  stPluginName: WideString;
70
  primaryLangID: Byte;
71
begin
72
  primaryLangID := wLangID and $00FF;
73
  if primaryLangID = LANG_GERMAN then
74
    stPluginName := 'MAC-Adressen der Gateways'
75
  else
76
    stPluginName := 'Gateway MAC addresses';
69 daniel-mar 77
  result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
68 daniel-mar 78
end;
79
 
69 daniel-mar 80
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
68 daniel-mar 81
begin
69 daniel-mar 82
  result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
68 daniel-mar 83
end;
84
 
69 daniel-mar 85
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
68 daniel-mar 86
begin
69 daniel-mar 87
  result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
68 daniel-mar 88
end;
89
 
69 daniel-mar 90
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
68 daniel-mar 91
var
92
  stIdentificationMethodName: WideString;
93
begin
94
  stIdentificationMethodName := 'GatewayMAC';
69 daniel-mar 95
  result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
68 daniel-mar 96
end;
97
 
69 daniel-mar 98
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
68 daniel-mar 99
begin
69 daniel-mar 100
  result := UD2_STATUS_OK_LICENSED;
68 daniel-mar 101
end;
102
 
70 daniel-mar 103
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
104
begin
105
  // This function does not use non-generic status codes
106
  result := FALSE;
107
end;
108
 
68 daniel-mar 109
exports
110
  PluginInterfaceID         name mnPluginInterfaceID,
111
  PluginIdentifier          name mnPluginIdentifier,
112
  PluginNameW               name mnPluginNameW,
113
  PluginVendorW             name mnPluginVendorW,
114
  PluginVersionW            name mnPluginVersionW,
115
  IdentificationMethodNameW name mnIdentificationMethodNameW,
116
  IdentificationStringW     name mnIdentificationStringW,
70 daniel-mar 117
  CheckLicense              name mnCheckLicense,
118
  DescribeOwnStatusCodeW    name mnDescribeOwnStatusCodeW;
68 daniel-mar 119
 
120
end.