чего то у меня не работает, вы уверенны что должно работать для рутокена, может только для смарткарт?
использую следующим образом
SCARDCONTEXT card=NULL;
if(SCardEstablishContext(SCARD_SCOPE_USER,0,0,&card)!=SCARD_S_SUCCESS) ....
SCARD_READERSTATE rd;
//Очистка структуры
memset((void *)&rd,0,sizeof(SCARD_READERSTATE));
rd.szReader=L"\\\\?PnP?\\Notification";
rd.dwCurrentState=SCARD_STATE_UNAWARE;
for(;;) //Цикл обработки сообщений Windows
{
//Проверка события USB устройства
if(SCardGetStatusChange (card,INFINITE ,&rd,1)==SCARD_S_SUCCESS)
{
if((rd.dwEventState&SCARD_STATE_IGNORE)==SCARD_STATE_IGNORE) MessageBox(0,L"SCARD_STATE_IGNORE",L"",MB_OK);
if((rd.dwEventState&SCARD_STATE_CHANGED)==SCARD_STATE_CHANGED ) MessageBox(0,L"Card reader is CHANGE",L"",MB_OK);
if((rd.dwEventState&SCARD_STATE_UNKNOWN)==SCARD_STATE_UNKNOWN) MessageBox(0,L"Unknows reader name",L"",MB_OK);
if((rd.dwEventState&SCARD_STATE_UNAVAILABLE)==SCARD_STATE_UNAVAILABLE) MessageBox(0,L"SCARD_STATE_UNAVAILABLE",L"",MB_OK);
if((rd.dwEventState&SCARD_STATE_EMPTY)==SCARD_STATE_EMPTY) MessageBox(0,L"SCARD_STATE_EMPTY",L"",MB_OK);
if((rd.dwEventState&SCARD_STATE_PRESENT)==SCARD_STATE_PRESENT) MessageBox(0,L"SCARD_STATE_PRESENT",L"",MB_OK);
if((rd.dwEventState&SCARD_STATE_ATRMATCH)==SCARD_STATE_ATRMATCH) MessageBox(0,L"SCARD_STATE_ATRMATCH",L"",MB_OK);
if((rd.dwEventState&SCARD_STATE_EXCLUSIVE)==SCARD_STATE_EXCLUSIVE) MessageBox(0,L"SCARD_STATE_EXCLUSIVE",L"",MB_OK);
if((rd.dwEventState&SCARD_STATE_INUSE)==SCARD_STATE_INUSE) MessageBox(0,L"SCARD_STATE_INUSE",L"",MB_OK);
if((rd.dwEventState&SCARD_STATE_MUTE)==SCARD_STATE_MUTE) MessageBox(0,L"SCARD_STATE_MUTE",L"",MB_OK);
rd.dwCurrentState=rd.dwEventState;
}
}