Created
May 7, 2021 17:27
-
-
Save typelogic/9af3c6d23627fbe2d787124a1561494f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <winscard.h> | |
#pragma comment(lib, "winscard.lib") | |
#include <iostream> | |
#include <map> | |
#include <vector> | |
#include <codecvt> | |
#include <algorithm> | |
std::string reader = "Identiv uTrust 4701 F CL Reader 0"; | |
std::string wcs2s(const wchar_t* str) | |
{ | |
const char *buf = (const char*)str; | |
std::string retstr; | |
int len = wcslen(str); | |
int acc = 0; | |
std::vector<int> indexes(len); | |
std::generate_n(indexes.data(), len, | |
[&acc,&retstr,&buf]() { | |
int curr = acc; | |
acc += 2; | |
//retstr.push_back(buf[q]); // also possible here | |
return curr; | |
} | |
); | |
for (auto i : indexes) retstr.push_back(buf[i]); | |
/* | |
std::for_each(indexes.begin(), indexes.end(), | |
[&retstr,&buf](int i) { | |
retstr.push_back(buf[i]); | |
} | |
); | |
std::string out; | |
std::transform(indexes.begin(), indexes.end(), std::back_inserter(out), | |
[&](int i) { | |
return buf[i]; // order is not guaranteed !? | |
} | |
); | |
std::string out2; | |
std::copy_n(indexes.begin(), n, std::back_inserter(out2)); | |
*/ | |
return retstr; | |
} | |
void madafaka() | |
{ | |
const wchar_t *xxx = L"abcdef"; | |
int len = wcslen(xxx); | |
len = strlen((const char*)xxx); | |
} | |
int main(int argc, char *argv[]) | |
{ | |
std::vector<LPTSTR> readers; | |
LPTSTR pmszReaders = NULL; | |
DWORD dwReaders; | |
SCARD_IO_REQUEST IO_Request; | |
SCARDCONTEXT ContextHandle; // Context | |
SCARDHANDLE CardHandle; // Handle of Reader | |
DWORD ActiveProtocol; | |
DWORD ret = SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &ContextHandle); | |
dwReaders = SCARD_AUTOALLOCATE; | |
ret = SCardListReaders(ContextHandle, 0, (LPTSTR)&pmszReaders, &dwReaders); | |
switch (ret) { | |
case SCARD_S_SUCCESS: | |
LPTSTR pReader = pmszReaders; | |
while ('\0' != *pReader) { | |
readers.push_back(pReader); | |
pReader = pReader + wcslen((wchar_t *)pReader) + 1; | |
} | |
break; | |
} | |
int readerindex = -1; | |
int idx = 0; | |
for (auto r : readers) { | |
std::string rs = wcs2s(r); | |
if (reader.compare(rs) == 0) { | |
readerindex = idx; | |
break; | |
} | |
} | |
if (readerindex != -1) { | |
ret = SCardConnect(ContextHandle, | |
readers[readerindex], | |
SCARD_SHARE_SHARED, | |
SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, | |
&CardHandle, | |
&ActiveProtocol); | |
if (ret != SCARD_S_SUCCESS) { | |
std::cout << "error"; | |
} | |
ret = SCardDisconnect(CardHandle, SCARD_LEAVE_CARD); | |
} | |
SCardFreeMemory(ContextHandle, pmszReaders); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment