You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

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

 

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

C#

Visual Basic

Visual C++

hGrd

хэндл, через который будет выполнено обновление

dwItemNum

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

dwAddr

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

dwLng

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

pData

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

dwUpdatePsw

пароль для обновления. Если пароль не используется, параметр должен быть равен 0

dwMethod

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

GrdUM_MOV

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

GrdUM_XOR

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

pReserved

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

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

GrdE_AccessDenied

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

GrdE_StatusUnchangeable

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

GrdE_NoService

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

GrdE_InactiveItem

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

GrdE_Overbound

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

 

Стандартный набор ошибок 

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

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

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

Функции GrdPI_Read, GrdPI_Update в случае ключей Guardant Sign/Time не имеют ранее существовавшего ограничения в 255 байт на длину считываемого/перезаписываемого определителя алгоритма/защищенной ячейки. Это связано с отсутствием в указанных ключах ограничения на размер определителя.

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

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

Если при попытке обновления активной ячейки был указан неверный пароль dwUpdatePsw, функция GrdPI_Update возвращает ошибку GrdE_AccessDenied. При этом автоматически в ключе уменьшается счетчик ошибок доступа к ячейке, который задается при создании ячейки. Когда значение счетчика ошибок доходит до 0, статус ячейки становится неизменяемым, то есть ячейку больше невозможно активировать/деактивировать/читать/менять ее значение. Однако если алгоритм находился в состоянии Active, функция GrdTransform будет нормально работать.

Пример для используемого средства разработки см. в директории:

"\%Program Files%\Guardant\Guardant 6\%PublicCode%\Samples\x86\Win32\General Guardant API\"
или
"\%Program Files%\Guardant\Guardant 6\%Public Code%\Samples\x64\Win64\General Guardant API\"

  • No labels