Anchor | ||||
---|---|---|---|---|
|
Table of Contents | ||||||
---|---|---|---|---|---|---|
|
...
Назначение
Функция измененяет права флаг доступа к разделу.
Синтаксис
...
Code Block | ||
---|---|---|
| ||
printf("\nChanging volume attributes"); rv = pFunctionListEx->C_EX_ChangeVolumeAttributes(aSlots[0], // Идентификатор слота с подключенным токеном CKU_SO, // Владелец раздела SO_PIN, // PIN-код владельца раздела sizeof(SO_PIN), // Длина PIN-кода владельца раздела VolumeRO, // Идентификатор раздела ACCESS_MODE_RW, // Новые права доступа к разделу CK_TRUE); // CK_TRUE - постоянное изменение атрибутов, CK_FALSE - временное изменение атрибутов if (rv != CKR_OK) printf(" -> Failed\n"); else printf(" -> OK\n"); |
Функции для работы с журналом
C_EX_GetJournal()
Назначение
Функция возвращает журнал операций.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_GetJournal)(
CK_SLOT_ID slotID,
CK_BYTE_PTR pJournal,
CK_ULONG_PTR pulJournalSize
); |
Параметры
slotID | [in] | идентификатор слота |
pJournal | [out] | указатель на запись журнала |
pulJournalSize | [out] | размер записи журнала |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Примечания
Перед выполнением функции должна быть выполнена авторизация пользователя с правами вледльца ключевой пары журнала (Пользователь). Формат возвращаемой записи журнала и пример парсинга доступны по ссылке.
Пример
Code Block | ||
---|---|---|
| ||
CK_BYTE_PTR pJournal = NULL_PTR; // Указатель на значение журнала
CK_ULONG ulJournalSize = 0; // Размер журнала
while(TRUE)
{
...
/* Получить размер журнала */
printf("Getting journal size");
rv = pFunctionListEx->C_EX_GetJournal(aSlots[0], // Хэндл слота с подключенным токеном
NULL_PTR, // Указатель на журнал
&ulJournalSize);// Размер журнала
if (rv != CKR_OK)
{
printf(" -> Failed\n");
break;
}
printf(" -> OK\n");
pJournal = (CK_BYTE*)malloc(ulSlotCount * sizeof(CK_BYTE));
if (pJournal == NULL)
{
printf("Memory allocation for pJournal failed! \n");
break;
}
memset(pJournal, 0, (ulJournalSize * sizeof(CK_BYTE)));
/* Получить журнал */
printf("Getting journal");
rv = pFunctionListEx->C_EX_GetJournal(aSlots[0], // Хэндл слота с подключенным токеном
pJournal, // Указатель на журнал
&ulJournalSize);// Размер журнала
if (rv != CKR_OK)
{
printf(" -> Failed %X\n", (int)rv);
break;
}
printf(" -> OK\n");
...
break;
} |
Функции специального назначения
C_EX_FreeBuffer()
Назначение
Функция освобождает память, выделенную другими расширенными функциями, например C_EX_GetCertificateInfoText.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_FreeBuffer)( CK_BYTE_PTR pBuffer ); |
Параметры
pBuffer | [in] | указатель на буфер |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
CK_BYTE_PTR pInfo . . rv = pfGetFunctionListEx -> C_EX_FreeBuffer(pInfo); // очистка буфера, использующегося функцией C_EX_GetCertificateInfoText() if (rv != CKR_OK) // проверка результата printf("C_EX_FreeBuffer() -> failed \n"); else printf("C_EX_FreeBuffer() -> OK \n"); |
C_EX_SetLocalPIN()
Назначение
Функция устанавливает локальный PIN-код, если он не был установлен или меняет локальный PIN-код, если он был установлен заранее.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_SetLocalPIN)( CK_SLOT_ID slotID, CK_UTF8CHAR_PTR pUserPin, // или pOldLocalPin CK_ULONG ulUserPinLen, // или pOldLocalPinLen CK_UTF8CHAR_PTR pNewLocalPin, CK_ULONG ulNewLocalPinLen, CK_ULONG ulLocalID ); |
Параметры
slotID | [in] | идентификатор слота, к которому подключен токен |
pUserPin или pOldLocalPin | [in] | указатель на текущий PIN-код Пользователя или на текущий локальный PIN-код |
ulUserPinLen или pOldLocalPinLen | [in] | длина текущего PIN-кода Пользователя или длина текущего локального PIN-кода |
pNewLocalPin | [in] | указатель на новый Локальный PIN-код |
ulNewLocalPinLen | [in] | длина нового Локального PIN-кода |
ulLocalID | [in] | идентификатор Локального PIN-кода |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Пример
Code Block | ||
---|---|---|
| ||
CK_BYTE Pin[] = {'1', '2', '3', '4', '5', '6', '7', '8'}; // текущий PIN-код Пользователя или локальный PIN-код CK_SLOT_ID slots[100]; // массив идентификаторов слотов . . rv = pfGetFunctionListEx -> C_EX_SetLocalPIN( slots[0], // считаем, что токен подключен к первому слоту Pin, // текущий PIN-код Пользователя или текущий локальный PIN-код arraysize(Pin), // длина текущего PIN-кода Пользователя или локального PIN-кода "000000000000000000000000000000", // указатель на новый Локальный PIN-код 30, // длина нового Локального PIN-кода 0x1F // идентификатор Локального PIN-кода ); if (rv != CKR_OK) // проверка результата printf("C_EX_SetLocalPIN() -> failed \n"); else printf("C_EX_SetLocalPIN() -> OK \n"); |
...