-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.cpp
56 lines (47 loc) · 1.47 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <PCSC/winscard.h>
auto main()->int {
SCARDCONTEXT hContext;
auto dwReaders = SCARD_AUTOALLOCATE;
LPTSTR mszReaders;
LONG rv;
// Establish context with the PC/SC resource manager
rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, nullptr, nullptr, &hContext);
if (rv != SCARD_S_SUCCESS) {
std::cout<<"SCardEstablishContext failed: "<<std::hex<<rv<< std::endl;
return 1;
}
// List available readers
rv = SCardListReaders(hContext, nullptr, (LPSTR)&mszReaders, &dwReaders);
if (rv != SCARD_S_SUCCESS) {
std::cout<<"SCardListReaders failed: "<< std::hex<<rv <<std::endl;
SCardReleaseContext(hContext);
return 1;
}
// Check if any readers are found
if (dwReaders == 0) {
std::cout<<"No reader found\n";
SCardFreeMemory(hContext, mszReaders);
SCardReleaseContext(hContext);
return 1;
}
// Select the first reader (modify for specific reader selection)
LPTSTR readerName = mszReaders;
// Attempt to connect to the reader
SCARDHANDLE hCard;
DWORD dwActiveProtocol;
rv = SCardConnect(hContext, readerName, SCARD_SHARE_SHARED,
SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, &hCard, &dwActiveProtocol);
// Check connection status
if (rv == SCARD_S_SUCCESS) {
std::cout<<"Reader '%s' is connected"<<readerName;
SCardDisconnect(hContext, hCard);
} else {
std::cout << "Failed to connect to reader '" << readerName << "': 0x"
<< std::hex << rv << std::endl;
}
// Free memory and release context
SCardFreeMemory(hContext, mszReaders);
SCardReleaseContext(hContext);
return 0;
}