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 LAN_MAC;
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 = '{8E1AA598-67A6-4128-BB9F-7E624647F584}';
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 := GetLocalMACAddressList(sl2);
33
    if ec = ERROR_NOT_SUPPORTED then
68 daniel-mar 34
    begin
70 daniel-mar 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);
68 daniel-mar 41
      Exit;
42
    end;
43
 
44
    // This procedure should not find any more MAC addresses...
45
    GetLocalIPAddressList(sl);
46
    for i := 0 to sl.Count-1 do
47
    begin
48
      ip := sl.Strings[i];
70 daniel-mar 49
      ec := GetMACAddress(ip, mac);
50
      if ec = ERROR_NOT_SUPPORTED then
68 daniel-mar 51
      begin
70 daniel-mar 52
        result := UD2_STATUS_NOTAVAIL_OS_NOT_SUPPORTED;
53
        Exit;
54
      end
55
      else if (ec = S_OK) and
56
              (mac <> '') and
57
              (sl2.IndexOf(mac) = -1) then
58
      begin
68 daniel-mar 59
        sl2.add(mac);
60
      end;
61
    end;
69 daniel-mar 62
    result := UD2_WriteStringListToPointerW(lpIdentifier, cchSize, sl2);
68 daniel-mar 63
  finally
64
    sl.Free;
65
    sl2.Free;
66
  end;
67
end;
68
 
69 daniel-mar 69
function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
68 daniel-mar 70
var
71
  stPluginName: WideString;
72
  primaryLangID: Byte;
73
begin
74
  primaryLangID := wLangID and $00FF;
75
  if primaryLangID = LANG_GERMAN then
76
    stPluginName := 'MAC-Adressen'
77
  else
78
    stPluginName := 'MAC addresses';
69 daniel-mar 79
  result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
68 daniel-mar 80
end;
81
 
69 daniel-mar 82
function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
68 daniel-mar 83
begin
69 daniel-mar 84
  result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
68 daniel-mar 85
end;
86
 
69 daniel-mar 87
function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
68 daniel-mar 88
begin
69 daniel-mar 89
  result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
68 daniel-mar 90
end;
91
 
69 daniel-mar 92
function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
68 daniel-mar 93
var
94
  stIdentificationMethodName: WideString;
95
begin
96
  stIdentificationMethodName := 'LAN_MAC';
69 daniel-mar 97
  result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
68 daniel-mar 98
end;
99
 
69 daniel-mar 100
function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
68 daniel-mar 101
begin
69 daniel-mar 102
  result := UD2_STATUS_OK_LICENSED;
68 daniel-mar 103
end;
104
 
70 daniel-mar 105
function DescribeOwnStatusCodeW(lpErrorDescription: LPWSTR; cchSize: DWORD; statusCode: UD2_STATUS; wLangID: LANGID): BOOL; cdecl;
106
begin
107
  // This function does not use non-generic status codes
108
  result := FALSE;
109
end;
110
 
68 daniel-mar 111
exports
112
  PluginInterfaceID         name mnPluginInterfaceID,
113
  PluginIdentifier          name mnPluginIdentifier,
114
  PluginNameW               name mnPluginNameW,
115
  PluginVendorW             name mnPluginVendorW,
116
  PluginVersionW            name mnPluginVersionW,
117
  IdentificationMethodNameW name mnIdentificationMethodNameW,
118
  IdentificationStringW     name mnIdentificationStringW,
70 daniel-mar 119
  CheckLicense              name mnCheckLicense,
120
  DescribeOwnStatusCodeW    name mnDescribeOwnStatusCodeW;
68 daniel-mar 121
 
122
end.