Функция 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 алгоритм деактивируется не моментально, а через ~секунду.