Вызов GrdFind из libgrdapi.so под Linux возвращает AllDonglesFound

Добрый день!
Разрабатываем приложение для Linux на NetCore.
Подключили библиотеку libgrdapi.so и через DllImport вызываем методы.

        [DllImport("libgrdapi.so", EntryPoint = "GrdStartup", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GrdStartup(GrdFMR grdFMR);

        [DllImport("libgrdapi.so", EntryPoint = "GrdCreateHandle", CallingConvention = CallingConvention.Cdecl)]
        public static extern IntPtr GrdCreateHandle(IntPtr hAddress, GrdCHM mode, IntPtr other);

        [DllImport("libgrdapi.so", EntryPoint = "GrdSetAccessCodes", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GrdSetAccessCodes(IntPtr hAddress, uint publicCode, uint privateRD, uint privateWR, uint privateMST);

        [DllImport("libgrdapi.so", EntryPoint = "GrdFind", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GrdFind(IntPtr hAddress, int mode, IntPtr id, IntPtr findInfo);

        [DllImport("libgrdapi.so", EntryPoint = "GrdSetFindMode", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GrdSetFindMode(IntPtr hAddress, GrdFMR remoteMode, GrdFM flags, uint prog, uint id, uint sn, uint ver, uint mask, GrdDT type, GrdFMM models, GrdFMI interfaces);

        [DllImport("libgrdapi.so", EntryPoint = "GrdLogin", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GrdLogin(IntPtr hAddress, int moduleLMS, GrdLM loginFlags);

        [DllImport("libgrdapi.so", EntryPoint = "GrdLogout", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GrdLogout(IntPtr hAddress, int mode);

        [DllImport("libgrdapi.so", EntryPoint = "GrdRead", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GrdRead(IntPtr hAddress, uint addr, int length, IntPtr input, IntPtr other);

        [DllImport("libgrdapi.so", EntryPoint = "GrdCleanup", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GrdCleanup();

        [DllImport("libgrdapi.so", EntryPoint = "GrdCloseHandle", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GrdCloseHandle(IntPtr hAddress);

        [DllImport("libgrdapi.so", EntryPoint = "GrdSetWorkMode", CallingConvention = CallingConvention.Cdecl)]
        public static extern int GrdSetWorkMode(IntPtr hAddress, GrdWM flagsWork, int other);

При выполнении поиска установленных ключей в Astra Linux при помощи метода GrdFind всегда возвращается AllDonglesFound, хотя ключи установлены в ПК и определяются как Guardant.

Feb 22 19:06:54 astra kernel: usb 1-2: USB disconnect, device number 9
Feb 22 19:06:55 astra kernel: usb 1-2: new full-speed USB device number 10 using xhci_hcd
Feb 22 19:06:55 astra kernel: usb 1-2: New USB device found, idVendor=0a89, idProduct=0003, bcdDevice= 1.00
Feb 22 19:06:55 astra kernel: usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb 22 19:06:55 astra kernel: usb 1-2: Product: Guardant Stealth II 
Feb 22 19:06:55 astra kernel: usb 1-2: Manufacturer: Aktiv Co.
Feb 22 19:06:55 astra mtp-probe[15174]: checking bus 1, device 10: "/sys/devices/pci0000:00/0000:00:01.2/0000:02:00.0/usb1/1-2"
Feb 22 19:06:55 astra mtp-probe[15174]: bus: 1, device: 10 was not an MTP device
Feb 22 19:06:55 astra mtp-probe[15176]: checking bus 1, device 10: "/sys/devices/pci0000:00/0000:00:01.2/0000:02:00.0/usb1/1-2"

Вызов методов GrdStartup, GrdCreateHandle и GrdSetAccessCodes перед этим возвращают OK.

Подскажите пожалуйста, в чем может быть проблема?

(2023-02-23 10:07:58 отредактировано kriushichevalexander)

Re: Вызов GrdFind из libgrdapi.so под Linux возвращает AllDonglesFound

Кстати, тот же самый код только при использовании библиотеки GuardantDotNetApi.dll на Windows работает нормально и возвращает установленные ключи в ПК

Скомпилировал Вашу программу chknsk для Linux
Она так же не находит ключи в системе

Welcome to Guardant Diagnostic Tool! (v1.0001)

Detecting Guardant dongles ...

Result: 0 dongle(s) found. Press Enter...

Re: Вызов GrdFind из libgrdapi.so под Linux возвращает AllDonglesFound

Добрый день. Просьба уточнить, какую версию SDK вы используете для защиты?
Для защиты .NetCore в составе SDK есть специальная библиотека - GuardantDotNetCoreApi.dll. Ее необходимо использовать вместе с нативной библиотекой.

Re: Вызов GrdFind из libgrdapi.so под Linux возвращает AllDonglesFound

Guardant SDK 7 Update 8

Используем библиотеку GuardantDotNetCoreApi.dll и GrdAPI64.dll для сборок под Windows. Все прекрасно работает.

Но разве GuardantDotNetCoreApi.dll и GrdAPI64.dll будут работать для сборок под Linux?

(2024-04-09 17:33:14 отредактировано iluha)

Re: Вызов GrdFind из libgrdapi.so под Linux возвращает AllDonglesFound

хочу поднять тему, похоже она меня тоже касается.. один и тот же код работает под виндой, и не работает под линукс:

 
  int nRet = GrdStartup( GrdFMR_Local );

  uint8_t abyGrd[ GrdContainerSize ];
  HANDLE hGrd = GrdCreateHandle( (HANDLE)abyGrd, GrdCHM_MultiThread, NULL );

  nRet = GrdSetAccessCodes( hGrd, ..., ..., 0, 0 );

  nRet = GrdSetFindMode( hGrd, GrdFMR_Local, 0, 0, 0, 0, 0, 0, 0, GrdFMM_ALL, GrdFMI_ALL );

  DWORD dwID = 0;
  TGrdFindInfo GrdFindInfo;
  nRet = GrdFind( hGrd, GrdF_First, &dwID, &GrdFindInfo );

возвращается ошибка 36 (all dongles found)

PS.
ага, победил, дело было в отсутствии файла `/etc/udev/rules.d/95-grdnt.rules` - скопировал с другой системы
но вот хоть убейте - не помню, каким образом он туда попадает, что из ПО Guardant надо запускать?

Re: Вызов GrdFind из libgrdapi.so под Linux возвращает AllDonglesFound

Добрый день.
Для операционных систем семейства Linux устанавливать правило UDEV необходимо.

Подробнее об этом можно прочитать на портале документации, на этой странице.