Вот фрагмент кода, который я использую для смены PIN-кода:
Код: Выделить всё
if (!pCardData)
{
dwReturn = SCARD_E_COMM_DATA_LOST;
// Handling error...
}
const char* adminPin = "Old-Password"; // Example current admin PIN
const char* newUserPin = "Password-1234"; // Desired new user PIN
// Calculate the length of the PIN values
size_t adminPinLength = strlen(adminPin);
size_t newUserPinLength = strlen(newUserPin);
// Create byte arrays to store the PIN values
BYTE adminPinBytes[256];
BYTE newUserPinBytes[256];
// Copy the PIN values into the byte arrays
memcpy(adminPinBytes, adminPin, adminPinLength);
memcpy(newUserPinBytes, newUserPin, newUserPinLength);
// Attempt to change the user PIN using the admin PIN
dwReturn = pCardData->pfnCardChangeAuthenticatorEx(
pCardData,
PIN_CHANGE_FLAG_UNBLOCK,
ROLE_ADMIN,
adminPinBytes,
adminPinLength,
ROLE_USER,
newUserPinBytes,
newUserPinLength,
0,
&pcAttemptsRemaining);
if (dwReturn == ERROR_SUCCESS)
{
// Supposedly successful PIN change
}
pCardData правильно инициализируется, и другие операции с использованием этих данных работают должным образом.
Несмотря на сообщение об успехе, новый PIN-код не распознается нашим клиентским приложением, и состояние смарт-карты, судя по всему, не меняется.
Во время процесса не обнаруживается никаких исключений или ошибок. и pcAttemptsRemaining не уменьшается неожиданно.
Что я делаю не так?
- Пробывал различные флаги и методы, предоставленные документацию смарт-карты.
- Проведено экспериментирование как с правильными, так и с намеренно неправильными PIN-кодами администратора, все результаты оказались успешными.
- Убедился, что инициализация pCardData правильна, успешно выполнив другие операции с картами.
Подробнее здесь: https://stackoverflow.com/questions/782 ... ails-to-re