Subversion Repositories userdetect2

Rev

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

  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',
  9.   UD2_PluginStatus in '..\UD2_PluginStatus.pas',
  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.  
  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 := 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
  40.       result := UD2_STATUS_OSError(ec);
  41.       Exit;
  42.     end;
  43.  
  44.     for i := 0 to sl.Count-1 do
  45.     begin
  46.       ip := sl.Strings[i];
  47.       ec := GetMACAddress(ip, mac);
  48.       if ec = ERROR_NOT_SUPPORTED then
  49.       begin
  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
  57.         sl2.add(mac);
  58.       end;
  59.     end;
  60.     result := UD2_WriteStringListToPointerW(lpIdentifier, cchSize, sl2);
  61.   finally
  62.     sl.Free;
  63.     sl2.Free;
  64.   end;
  65. end;
  66.  
  67. function PluginNameW(lpPluginName: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
  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';
  77.   result := UD2_WritePascalStringToPointerW(lpPluginName, cchSize, stPluginName);
  78. end;
  79.  
  80. function PluginVendorW(lpPluginVendor: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
  81. begin
  82.   result := UD2_WritePascalStringToPointerW(lpPluginVendor, cchSize, 'ViaThinkSoft');
  83. end;
  84.  
  85. function PluginVersionW(lpPluginVersion: LPWSTR; cchSize: DWORD; wLangID: LANGID): UD2_STATUS; cdecl;
  86. begin
  87.   result := UD2_WritePascalStringToPointerW(lpPluginVersion, cchSize, '1.0');
  88. end;
  89.  
  90. function IdentificationMethodNameW(lpIdentificationMethodName: LPWSTR; cchSize: DWORD): UD2_STATUS; cdecl;
  91. var
  92.   stIdentificationMethodName: WideString;
  93. begin
  94.   stIdentificationMethodName := 'GatewayMAC';
  95.   result := UD2_WritePascalStringToPointerW(lpIdentificationMethodName, cchSize, stIdentificationMethodName);
  96. end;
  97.  
  98. function CheckLicense(lpReserved: LPVOID): UD2_STATUS; cdecl;
  99. begin
  100.   result := UD2_STATUS_OK_LICENSED;
  101. end;
  102.  
  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.  
  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,
  117.   CheckLicense              name mnCheckLicense,
  118.   DescribeOwnStatusCodeW    name mnDescribeOwnStatusCodeW;
  119.  
  120. end.
  121.