Page tree
Skip to end of metadata
Go to start of metadata

Функция GcaPI_GetTimeLimit возвращает оставшееся время работы алгоритма или защищенной ячейки.

    int GcaPI_GetTimeLimit(
      HANDLE hGrd,				
      DWORD	dwItemNum,			
      TGrdSystemTime *pGrdSystemTime,
      void *pReserved
    );	
     Параметры функции

    hGrd

    не используется

    dwItemNum

    числовое имя аппаратного алгоритма/защищенной ячейки

    pGrdSystemTime

    указатель на структуру TGrdSystemTime:

    typedef struct { 
        WORD wYear; // The year (2000 - 2099)
        WORD wMonth; // The month (January = 1, February = 2, ...)
        WORD wDayOfWeek; // The day of the week (Sunday = 0, Monday = 1, ...)
        WORD wDay; // The day of the month (1-31)
        WORD wHour; // The hour (0-23)
        WORD wMinute; // The minute (0-59)
        WORD wSecond; // The second (0-59)
        WORD wMilliseconds; // The millisecond (0-999)
    } TGrdSystemTime;

    pReserved

    зарезервировано, должно быть равно NULL

     Возвращаемое значение функции

    GrdE_OK

    нет ошибок

    GrdE_NeedInitialization

    требуется инициализация API (вызов GrdStartup)

    GrdE_InvalidHandle

    недействительный хэндл

    GrdE_NoService

    для алгоритма/ячейки сервис не предусмотрен

    GrdE_InvalidArg

    недопустимый параметр при вызове функции

     Описание

    Функция GcaPI_GetTimeLimit возвращает оставшееся время работы алгоритма или защищённой ячейки. Числовое имя алгоритма или защищённой ячейки задается параметром dwItemNum. Если время работы алгоритма неограниченно, возвращается ошибка GrdE_NoService.

    При использовании механизма DeadTime (а также и для LifeTime, т. к. после активации алгоритма логика работы механизма времени полностью идентична DeadTime) с Time-ключами, оставшееся число дней до активации будет отображаться для обратного порядка месяцев (при этом общее время до деактивации будет рассчитано корректно).

    К примеру:

    При задании времени ключа: 1 января 2008, 00-00-00,

    времени деактивации ключа: 1 марта 2008, 00-00-03 (либо время жизни 2 месяца 3 секунды):

    1. Если используется DeadTime-механизм, то после первого вызова GcaPI_GetTimeLimit вернется 2 месяца 2 секунды, после вызова GcaPI_GetTimeLimit через 3 секунды вернется 1 месяц, 28 дней, 23 часа, 59 минут, 59 секунд. Т. о. произошел "размен" февраля, а не текущего месяца. 
    2. Если используется LifeTime-механизм, то в зависимости поля state структуры LifeTime:

    - 1 (алгоритм активирован): все как в п.1.

    - 0 (алгоритм не активирован): до первого вызова GrdTransform будет возвращаться 2 месяца, 3 секунды, после него - как в п.1.

    Примечательно, что пересчет структуры времени происходит в момент активации алгоритма (при первом вызове GrdTransform). К примеру, при использовании механизма LifeTime, состояния "0"(не активирован), результатом задания времени жизни, к примеру 255 секунд, до активации алгоритма функция GcaPI_GetTimeLimit будет возвращать 255 секунд, после активации - произойдет пересчет в минуты и секунды.

    Т. о. при проектировании ПО рекомендуется опираться на совокупность значений оставшегося до деактивации времени, нежели на отдельное число дней.

    При указании нулевого времени жизни алгоритма (механизм LifeTime) после первого вызова GrdTransform алгоритм деактивируется не моментально, а через ~секунду.

    • No labels