Subversion Repositories userdetect2

Rev

Rev 71 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  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',
  9.   UD2_PluginStatus in '..\UD2_PluginStatus.pas',
  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.  
  22. function IdentificationStringW(lpIdentifier: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
  23. var
  24.   sl, sl2: TStringList;
  25.   i: integer;
  26.   ip, mac: string;
  27.   ec: DWORD;
  28. begin
  29.   sl := TStringList.Create;
  30.   sl2 := TStringList.Create;
  31.   try
  32.     ec := GetLocalMACAddressList(sl2);
  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
  40.       result := UD2_STATUS_OSError(ec);
  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];
  49.       ec := GetMACAddress(ip, mac);
  50.       if ec = ERROR_NOT_SUPPORTED then
  51.       begin
  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
  59.         sl2.add(mac);
  60.       end;
  61.     end;
  62.     result := UD2_WriteStringListToPointerW(lpIdentifier, cchSize, sl2);
  63.   finally
  64.     sl.Free;
  65.     sl2.Free;
  66.   end;
  67. end;
  68.  
  69. function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
  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';
  79.   result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
  80. end;
  81.  
  82. function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
  83. begin
  84.   result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
  85. end;
  86.  
  87. function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
  88. begin
  89.   result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
  90. end;
  91.  
  92. function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
  93. var
  94.   stIdentificationMethodName: WideString;
  95. begin
  96.   stIdentificationMethodName := 'LAN_MAC';
  97.   result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
  98. end;
  99.  
  100. function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
  101. begin
  102.   result := UD2_STATUS_OK_LICENSED;
  103. end;
  104.  
  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.  
  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,
  119.   CheckLicense              name mnCheckLicense,
  120.   DescribeOwnStatusCodeW    name mnDescribeOwnStatusCodeW;
  121.  
  122. end.
  123.