...
slotID | [in] | идентификатор слота с подключенным токеном | ||||||||
userType | [in] | тип пользователя, допустимое значение только CKU_SO – глобальный администратор. | ||||||||
pPin | [in] | PIN-код пользователя | ||||||||
ulPinLen | [in] | длина PIN-кода пользователя | ||||||||
pInitParams | [in] | указатель на массив структур типа CK_VOLUME_FORMAT_INFO_EXTENDED, содержащих детальную информацию о разделах
| ||||||||
ulInitParamsCount | [in] | количество записей в массиве |
...
C_EX_GetVolumesInfo()
Назначение
Возвращает информацию о существующих на флеш-памяти разделах.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_ |
...
GetVolumesInfo)(
CK_SLOT_ID slotID,
CK_VOLUME_INFO_EXTENDED_PTR pInfo,
CK_ULONG_PTR pulInfoCount
);
typedef struct CK_VOLUME_INFO_EXTENDED
{
CK_VOLUME_ID_EXTENDED idVolume;
CK_ULONG ulVolumeSize;
CK_ACCESS_MODE_EXTENDED accessMode;
CK_OWNER_EXTENDED volumeOwner;
CK_FLAGS flags;
} CK_VOLUME_INFO_EXTENDED;
|
Параметры
slotID | [in] | идентификатор слота с подключенным токеном | ||||||||||
pInfo | [out] | указатель на массива структур типа
| ||||||||||
pulInfoCount | [out] | размер массива |
Возвращаемые значения
CKR_OK – функция выполнена успешно.
Примечания
При вызове функции с пустым указателем pInfo функция возвращает размер массива в pulInfoCount.
Пример
Code Block | ||
---|---|---|
| ||
CK_VOLUME_INFO_EXTENDED_PTR pVolumesInfo = NULL_PTR; // Указатель на массив структур с информацией о разделах
CK_ULONG ulVolumesInfoСount = 0; // Размер массива
printf("\nGetting volumes info");
rv = pFunctionListEx->C_EX_GetVolumesInfo( aSlots[0], // Идентификатор слота с подключенным токеном
NULL_PTR, // Указатель на массив с возвращаемой информацией о разделах
&ulVolumesInfoСount); // Размер массива
pVolumesInfo = (CK_VOLUME_INFO_EXTENDED*)malloc(ulVolumesInfoСount * sizeof(CK_VOLUME_INFO_EXTENDED));
memset(pVolumesInfo,
0,
(ulVolumesInfoСount * sizeof(CK_VOLUME_INFO_EXTENDED)));
rv = pFunctionListEx->C_EX_GetVolumesInfo(aSlots[0], // Идентификатор слота с подключенным токеном
pVolumesInfo, // Указатель на массив с возвращаемой информацией о разделах
&ulVolumesInfoСount); // Размер массива
if (rv != CKR_OK)
{
printf(" -> Failed\n");
}
else
{
printf(" -> OK\n");
for (i = 0; i < (int)ulVolumesInfoСount; i++)
{
printf("\nPrinting volume %1.2d info:\n", (int)i+1);
printf(" Volume id: %2.2d \n", pVolumesInfo[i].idVolume); // Идентификатор раздела
printf(" Volume size: %d Mb \n", pVolumesInfo[i].ulVolumeSize); // Объем раздела
printf(" Access mode: %2.2d \n", pVolumesInfo[i].accessMode); // Права доступа к разделу
printf(" Volume owner: %2.2d \n", pVolumesInfo[i].volumeOwner); // Владелец раздела
printf(" Flags: 0x%8.8X \n", pVolumesInfo[i].flags); // Флаги раздела
}
} |
C_EX_ChangeVolumeAttributes()
Назначение
Функция измененяет права доступа к разделу.
Синтаксис
Code Block |
---|
CK_DEFINE_FUNCTION(CK_RV, C_EX_ChangeVolumeAttributes)(
CK_SLOT_ID slotID,
CK_USER_TYPE userType,
CK_UTF8CHAR_PTR pPin,
CK_ULONG ulPinLen,
CK_VOLUME_ID_EXTENDED idVolume,
CK_ACCESS_MODE_EXTENDED newAccessMode,
CK_BBOOL bPermanent
); |
Параметры
slotID | [in] | идентификатор слота с подключенным токеном |
userType | [in] | тип пользователя, допустимое значение только CKU_SO – глобальный администратор. |
pPin | [in] | PIN-код пользователя |
ulPinLen | [in] | длина PIN-кода пользователя |
idVolume | [in] | идентификатор раздела |
newAccessMode | [in] | новые флаги доступа к разделу |
bPermanent | [in] |
slotID | [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_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"); |
...