Find возвращает GrdE_AllDonglesFound, код ошибки 36

Доброго времени суток.
При попытке найти ключ, посредством guardantAPI, Find все время возвращает код ошибки 36, при наличии ключа в usb-хабе и при его отсутствии. Что это значит, как найти ключ?

Пробовал писать сам и запускал ваше демо, результат идентичен. Причем программа "Поиск и проверка ключей" ключ видит.

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Добрый день. Пришлите ту часть кода, где организован поиск ключа. Начиная с инициализации API и до вызова Find, включая Find.

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Тимофей Ершов пишет:

Добрый день. Пришлите ту часть кода, где организован поиск ключа. Начиная с инициализации API и до вызова Find, включая Find.

//------------------------------------------------------------------------------
// (C) 1997 - 2014 Aktiv Co. All rights reserved.
//  Guardant API example C++ 
//------------------------------------------------------------------------------
// This example demonstrates Guardant API usage.
// This code sample is for API demonstration only!
// Please do not use this code in real projects!
//------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef WIN32
#include <windows.h>
#endif
#include <grdapi.h>
#include "grddongle.h"

// Definitions
#define CryptPU     0x8566783lu                         // Random value for access codes security
#define CryptRD     0x17d49c84u                         // Random value for access codes security
#define CryptWR     0x9843de24u                         // Random value for access codes security
#define CryptMS     0x47832845u                         // Random value for access codes security

// Data variables
uint32_t dwPublic = (uint32_t)GrdDC_DEMONVK - CryptPU;        // Must be encoded
uint32_t dwPrivRD = (uint32_t)GrdDC_DEMORDO - CryptRD;        // Must be encoded
uint32_t dwPrivWR = (uint32_t)GrdDC_DEMOPRF - CryptWR;        // Must be encoded
uint32_t dwPrivMS = (uint32_t)GrdDC_DEMOMST - CryptMS;        // Must be encoded

void PrintError(const char* Text);
void PrintText(const char* Text);
int  PrintCode(int nErrorCode);
int  PrintDongleModel(DWORD dwModelID);
int  ErrorHandling( int nRet);

//----------------------------------------------------------------------------------
//    Main function
//----------------------------------------------------------------------------------
int main(int argc, char** argv)
{
    int nRet;
    int dwLMS =-1;

    //------------------------------------------------------------------------------
    // Check argument for work with local or remote dongle
    //------------------------------------------------------------------------------
    uint32_t dwRemoteMode = GrdFMR_Local; // Operation mode flags
    if (argc > 1 && (strstr(argv[1], "-remote")))
        dwRemoteMode = GrdFMR_Remote;

    if (argc > 1 && (strstr(argv[1], "-all")))
        dwRemoteMode = GrdFMR_Local|GrdFMR_Remote;

    printf("------------------------------------------------------------------------------\n");
    printf("      Guardant StealthII/Sign/Time example for C++ (32/64-bit)\n");
    printf("          ( C ) 2014 Aktiv Co. All rights reserved\n");
    printf("Usage option: -remote (work with remote dongles) -all (work with all dongles) \n");
    if ( dwPrivRD == 0x51917645-CryptRD ){
        printf("        This example can be executed with DEMO dongle only.                \n");
        printf("    To execute with fully operable dongle, assign your own codes           \n");
        printf("                 to appropriate variables.\n");
    }
    printf("------------------------------------------------------------------------------\n");

    // Declare GrdDongle object
    printf("Declare GrdDongle object: ");
    CGrdDongle grdDongle(dwRemoteMode);        // parameters for call GrdStartup() & GrdSetFindMode
    ErrorHandling(GrdE_OK);                     // Some error found?

    // Create GrdDongle object
    printf("Create GrdDongle object: ");
    // Set parameters for call GrdSetAccessCodes()
    nRet = grdDongle.Create(dwPublic + CryptPU, dwPrivRD + CryptRD, dwPrivWR + CryptWR, dwPrivMS + CryptMS);
    ErrorHandling(nRet);

    uint32_t dwFlags      = 0;            // Check by bProg, bVer & dongle type flag
    uint8_t  byProg       = 0;            // Check by specified program number
    uint32_t dwID         = 0;            // This search mode is not used
    uint16_t wSN          = 0;            // This search mode is not used
    uint8_t  byVer        = 0;            // Check by specified version
    uint16_t wMask        = 0;            // This search mode is not used
    uint16_t wType        = 0;            // Type dongle
    uint32_t dwModel      = GrdFMM_ALL;   // Any Guardant 
    uint32_t dwInterface  = GrdFMI_ALL;   // Any interface

    // After execute constructor while creating GrdDongle object we can additionaly call one or more functions
    // GrdSetAccessCodes(), GrdSetWorkMode() & GrdSetFindMode() for you not default modes & search parameters for example
    printf("Setting dongle search conditions: ");
    nRet = grdDongle.SetFindMode(dwRemoteMode, dwFlags, byProg, dwID, wSN, byVer, wMask, wType, dwModel, dwInterface);
    ErrorHandling(nRet);

    // Search for all specified dongles and print ID's
    if (dwRemoteMode == GrdFMR_Remote)
        printf("Searching for all specified remote dongles and print dongles info about it's\n");
    else if (dwRemoteMode == GrdFMR_Local)
        printf("Searching for all specified local dongles and print dongles info about it's\n");
    else
        printf("Searching for all specified local/remote dongles and print dongles info about it's\n");

    TGrdFindInfo GrdFindInfo;
    nRet = grdDongle.Find(GrdF_First, &dwID, &GrdFindInfo);
    if( GrdE_OK != nRet)
    {
        PrintError("The Guardant dongle with this access codes not found!");
        return nRet;
    }

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Здравствуйте. Для корректной работы нашего примера необходимо перед началом работы загрузить в Ваш ключ образ, содержащий демонстрационные алгоритмы(подробнее о том, как добавить образ с демонстрационными алгоритмами, можно узнать по ссылке http://developer.guardant.ru/pages/view … Id=1279526 ). Также, необходимо использовать Ваши коды доступа.

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Тимофей Ершов пишет:

Здравствуйте. Для корректной работы нашего примера необходимо перед началом работы загрузить в Ваш ключ образ, содержащий демонстрационные алгоритмы(подробнее о том, как добавить образ с демонстрационными алгоритмами, можно узнать по ссылке http://developer.guardant.ru/pages/view … Id=1279526 ). Также, необходимо использовать Ваши коды дочтупа.

Проблема заключается не в этом, так как на машине с Linux, все отрабатывает нормально, с тем же ключом и с той же программой. Точнее мне не нужно, чтобы отработала вся программа, меня интересует только часть с поиском ключей.
Проблема такая, только на Windows 10. Правда я не знаю это индивидуально на моей машине или нет. Тем более, ПО Guardant использует демо-коды и все прекрасно находит.

(2016-08-31 17:36:22 отредактировано artemmh)

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Все проблема решилась, оказалось, что программа подтягивает другой grdapi, в которой прописаны не те коды доступа. Из-за чего ключ не находился.
Но почему программа "Поиск и проверка ключей" находит ключи без кода доступа, это так и должно быть?

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Добрый день. Да, это нормальное поведение для утилиты диагностики ключей. Данная утилита отображает все обнаруженные ключи Guardant.

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Здравствуйте!

Проблема практически такая же, как у пользователя artemmh, только ОС поменялись местами - в windows 11 пример работает, в grdapi.h указаны мои коды, ключ прошит, я читаю из него свои данные. Но в astra linux с этим же grdapi.h тот же пример с моими кодами на функции find всегда возвращает ошибку 36. Ключ точно торчит, диодик на нём горит, система ключ видит, коды точно правильные. Подскажите, пожалуйста, куда копать.

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Добрый день, rakint,

Уточните, пожалуйста, какой версией Guardant SDK вы собирали свое приложение? Какой модели у вас ключ?

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Здравствуйте, возникла проблема с поиском ключа.
Есть код, который выполняет поиск ключа, когда запускаем его на Windows, ключ удается найти.

Дальше, для тестирования на виртуальной машине запускается Astra Linux, туда пробрасывается ключ, запускается тот же код для поиска, но найти ключ не удается.
Утилита lsusb показывает, что устройство ключа в системе есть.

При поиске выдается ошибка 36

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Поиск ключа выполняется следующим кодом


int nRet;
    bool isHaveMetlabPubCode = false;

    // Data variables
    uint32_t dwPublic = (uint32_t)GrdDC_DEMONVK - CryptPU;        // Must be encoded
    uint32_t dwPrivRD = (uint32_t)GrdDC_DEMORDO - CryptRD;        // Must be encoded
    uint32_t dwPrivWR = (uint32_t)GrdDC_DEMOPRF - CryptWR;        // Must be encoded
    uint32_t dwPrivMS = (uint32_t)GrdDC_DEMOMST - CryptMS;

    uint32_t dwFlags = 0;                 // Check by bProg, bVer & dongle type flag
    uint8_t byProg = 0;                   // Check by specified program number
    uint16_t wSN = 0;                     // This search mode is not used
    uint8_t byVer = 0;                    // Check by specified version
    uint16_t wMask = 0;                   // This search mode is not used
    uint16_t wType = 0;                   // Type dongle
    uint32_t dwModel = 0;        // Any Guardant Sign/Time usb
    uint32_t dwInterface = 0;    // interface usb
    uint32_t dwID = 0;                    // This search mode is not used
    uint32_t dwRemoteMode = GrdFMR_Local; // Operation mode flags

    CGrdDongle grdDongle(dwRemoteMode);        // parameters for call GrdStartup() & GrdSetFindMode
    ErrorHandling(GrdE_OK);                    // Some error found?
    nRet = grdDongle.Open(dwPublic + CryptPU, dwPrivRD + CryptRD, dwPrivWR + CryptWR, dwPrivMS + CryptMS);
    ErrorHandling(nRet);

    nRet = grdDongle.SetFindMode(dwRemoteMode, dwFlags, byProg, dwID, wSN, byVer, wMask, wType, dwModel, dwInterface);
    ErrorHandling(nRet);


    TGrdFindInfo GrdFindInfo;
    nRet = grdDongle.Find(GrdF_First, &dwID, &GrdFindInfo);
    if (GrdE_OK != nRet)
    {
        PrintError("The Guardant dongle with this access codes not found!");
        return isHaveMetlabPubCode;
    }

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Добрый день, zuykov,

Уточните, пожалуйста, какой версией Guardant SDK вы пользуетесь? Какой модели у вас ключ?

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Использую SDK7
Ключ Aktiv Guardant Stealth 3 Sign/Time

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

zuykov пишет:

Использую SDK7
Ключ Aktiv Guardant Stealth 3 Sign/Time

Добрый день.
Просьба уточнить для нас информацию

  • Какая у вас полная версия Guardant SDK. Например, актуальная версия Guardant SDK на сегодняшний день - SDK 7 update 9;

  • Установлено ли правило UDEV?

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Полный отчет утилиты диагностики:

https://forum.guardant.ru/uploads/images/2025/01/32183b88975fe4961e46c9537840425c.png


Версия SDK 7 update 8

Правило udev установлено

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Добрый день, zuykov.
Просьба проверить работу нашего стандартного примера и сообщить нам результат. Для успешной работы в примере необходимо заменить коды доступа Демо на ваши коды.

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Запустил просто из Visual Studio, под Windows,  коды оставил демонстрационные

https://forum.guardant.ru/uploads/images/2025/01/0716183a37b191175614ee85c7a69f49.png

Ключ не найден

(2025-01-27 10:37:33 отредактировано zuykov)

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

В итоге запуска этого примера какой должен быть ожидаемый результат?

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Добрый день.

zuykov пишет:

В итоге запуска этого примера какой должен быть ожидаемый результат?

Ожидаемый результат - отобразится информация о всех подключенных ключах с вашими кодами доступа.

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

В чем тогда может быть ошибка? Я не изменял код примера, он собрался и запустился без ошибок.

У меня есть установщик "sdk7 update 9", я могу установить его и попробовать  запустить этот пример

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Обновил библиотеку, пересобрал пример, коды оставил демонстрационные. Ключ не найден.

При этом утилита диагностики находит ключ

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

zuykov пишет:

Обновил библиотеку, пересобрал пример, коды оставил демонстрационные. Ключ не найден.

При этом утилита диагностики находит ключ

Вам необходимо изменить коды доступа. Вместо демо кодов укажите ваши коды доступа.

(2025-01-28 09:42:47 отредактировано zuykov)

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

Коды поменял, ключ найден!


А как быть с поиском ключей под Astra Linux? Выше я писал, что на виртуальной машине не удается найти ключ, при этом в списке устройств системы (в виртуалке) он присутствует.

Re: Find возвращает GrdE_AllDonglesFound, код ошибки 36

zuykov пишет:

Коды поменял, ключ найден!


А как быть с поиском ключей под Astra Linux? Выше я писал, что на виртуальной машине не удается найти ключ, при этом в списке устройств системы (в виртуалке) он присутствует.

Прицеп работы в ОС семейства Linux (в том числе и в Astra Linux) такой же.

Для успешной работы с ключом необходимо установить актуальную версию правила UDEV.
В коде должны использоваться именно ваши коды доступа.
Попробуйте проверить работу ключа с нашим стандартным примером.
Для сборки примера можно использовать компилятор gcc и команду

gcc demo.c -o demo -I./ -L./ -lgrdapi -lpthread

Где  -I./ -L./ - пути расположения заголовочных файлов и библиотек API.