Функция GcaPI_Update позволяет перезаписывать данные защищенной ячейки или определитель алгоритма. При этом определитель алгоритма можно перезаписать только целиком, а в защищенной ячейке можно перезаписывать любой участок данных.

    int GcaPI_Update(	
      HANDLE hGrd,
      DWORD dwItemNum,
      DWORD dwAddr,
      DWORD dwLng,
      void *pData,
      DWORD dwUpdatePsw,
      DWORD dwMethod,
      void *pReserved
    );	

    hGrd

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

    dwItemNum

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

    dwAddr

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

    dwLng

    длина блока данных, которые будут обновлены

    pData

    указатель на буфер, содержащий данные для обновления

    dwUpdatePsw

    зарезервировано

    dwMethod

    метод обновления данных. Задается одной из констант GrdUM_XXX

    GrdUM_MOV

    Данные из буфера pData заменяют старые данные

    GrdUM_XOR

    Данные из буфера pData складываются со старыми данными по модулю 2

    pReserved

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

     

    Возможные ошибки

    GrdE_NoService

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

    GrdE_InactiveItem

    ячейка в деактивированном состоянии, обновление выполнить невозможно

    GrdE_Overbound

    адрес для обновления выходит за пределы определителя

     

    Набор ошибок Guardant API

    Функция GcaPI_Update позволяет менять определитель аппаратного алгоритма или данные защищенной ячейки (rs_K[]). При этом определитель аппаратного алгоритма можно менять только целиком. При попытке изменить часть определителя возвращается код ошибки GrdE_InvalidArg. В защищенной ячейке можно менять любой участок данных.

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

    Если алгоритм или ячейка находятся в активном состоянии (Active), функция возвращает GrdE_OK и производится обновление данных, начиная со смещения в определителе ячейки dwAddr. При этом данные из буфера pData длиной dwLng в зависимости от метода обновления dwMethod либо замещают старые данные, либо складываются со старыми данными по модулю 2.

    Если смещение dwAddr задано слишком большим, возвращается ошибка GrdE_Overbound.

    Если сумма dwAddr+dwLng выходит за доступные для чтения пределы, данных записывается ровно столько, сколько можно записать. При этом функция возвращает GrdE_OK  и никаких других кодов ошибки не генерируется.

    Функции GcaPI_Read и GcaPI_Update игнорируют пароль для доступа к ячейке и счетчик ошибок ввода пароля.

     

     

    • No labels