да, спасибо, потратил целый день на исследования, но добился результата))
пример, переименовываем первый рутокен в нулевой
SCARDCONTEXT hContext; // дискриптор контекста
LONG result; // результат
LPTSTR pmszReaders = NULL; // имена групп ридеров, NULL - все
LPTSTR pReader; // список ридеров
DWORD cch = SCARD_AUTOALLOCATE; // длина буффера
// Получаем контекст
result = SCardEstablishContext(SCARD_SCOPE_SYSTEM,
NULL,
NULL,
&hContext);
if (SCARD_S_SUCCESS != result)
{
return 1;
}
// Получаем список ридеров
result = SCardListReaders(hContext,
pmszReaders,
(LPTSTR)&pmszReaders,
&cch);
if (SCARD_S_SUCCESS != result)
{
return 2;
}
// Выводим в консоль
pReader = pmszReaders;
while ('\0' != *pReader)
{
printf("SCardListReaders %S\n", pReader);
pReader = pReader + wcslen((wchar_t *)pReader) + 1;
}
// Освобождение памяти
result = SCardFreeMemory(hContext, pmszReaders);
if (SCARD_S_SUCCESS != result)
{
return 3;
}
// Переименовывание ридера
SCARDHANDLE hCardHandle; // дискриптор ридера
DWORD dwAP; // флаг протокола
// Подключаемся к ридеру
result = SCardConnectA(hContext,
"Aktiv Rutoken ECP 1",
SCARD_SHARE_SHARED,
SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,
&hCardHandle,
&dwAP);
if (SCARD_S_SUCCESS != result)
{
return 4;
}
LPBYTE pbAttr = NULL; // указатель на буффер с атрибутом, в нашем случае имя
DWORD cByte = SCARD_AUTOALLOCATE; // длина буффера
// Получаем атрибуты ридера
result = SCardGetAttrib(hCardHandle,
SCARD_ATTR_DEVICE_SYSTEM_NAME,
(LPBYTE)&pbAttr,
&cByte);
if (SCARD_S_SUCCESS != result)
{
return 5;
}
// Добавляем новое имя ридеру
result = SCardIntroduceReader(hContext,
TEXT("Aktiv Rutoken ECP 0"),
(LPCTSTR)pbAttr);
if (SCARD_S_SUCCESS != result)
{
return 6;
}
// Удаляем старое имя
result = SCardForgetReaderA(hContext, "Aktiv Rutoken ECP 1");
if (SCARD_S_SUCCESS != result)
{
return 7;
}
// Дисконект от ридера
result = SCardDisconnect(hCardHandle, SCARD_LEAVE_CARD);
if (SCARD_S_SUCCESS != result)
{
return 8;
}
// Освобождение памяти
result = SCardFreeMemory(hContext, pbAttr);
if (SCARD_S_SUCCESS != result)
{
return 9;
}