के साथ पीसीएससी रीडर सीरियल नंबर प्राप्त करना मुझे पाठक में कार्ड मौजूद नहीं होने पर पीसीएससी रीडर सीरियल नंबर प्राप्त करने में समस्या है। मैं winscard.dll और C++ का उपयोग कर रहा हूँ।WinSCard
निम्नलिखित कोड केवल मामले के लिए काम करेगा यदि कार्ड पाठक में मौजूद है। अन्यथा ScardHandle पुनर्प्राप्त नहीं किया गया है। मुझे स्कार्डहैंडल पाने का कोई और तरीका नहीं मिला है।
SCARDHANDLE hCardHandle;
SCARDCONTEXT hSC;
WCHAR pCardReaderName[256];
LONG lReturn;
lReturn = SCardEstablishContext(SCARD_SCOPE_USER, 0, 0, &hSC);
if (lReturn != SCARD_S_SUCCESS)
{
Console::WriteLine("SCardEstablishContext() failed\n");
return;
}
my_select_reader(hSC, pCardReaderName); // just shows reader names in console and requires you to pick one
// connect to smart card
DWORD dwAP;
lReturn = SCardConnect(hSC,
(LPCWSTR)pCardReaderName,
SCARD_SHARE_SHARED,
SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1 | SCARD_PROTOCOL_RAW,
&hCardHandle,
&dwAP);
if (SCARD_S_SUCCESS != lReturn)
{
Console::WriteLine("Failed SCardConnect\n");
exit(1); // Or other appropriate action.
}
// get reader serial no
LPBYTE pbAttr = NULL;
DWORD cByte = SCARD_AUTOALLOCATE;
lReturn = SCardGetAttrib(hCardHandle,
SCARD_ATTR_VENDOR_IFD_SERIAL_NO,
(LPBYTE)&pbAttr,
&cByte);
if (SCARD_S_SUCCESS != lReturn)
{
Console::WriteLine("Failed to retrieve Reader Serial\n");
exit(1); // Or other appropriate action.
}
printf("serial no: %s", pbAttr);
क्या कार्ड से कनेक्ट किए बिना पाठक सीरियल नंबर प्राप्त करने का कोई तरीका है?
मुझे लगता है कि मेरे लिए एक समाधान पीसीएससी रीडर सीरियल नंबर को पुनर्प्राप्त करने का कोई और तरीका हो सकता है। – vellotis
क्या आपने एचकार्डहैंडल के लिए 'न्यूल' पास करने का प्रयास किया है? ऐसा लगता है कि 'SCARDGetAttrib' एक 'SCARD_ATTR_ICC_PRESENCE' मान वापस कर सकता है, जो आपको पहले कार्ड पेश करने के लिए बहुत समझ में नहीं आता है ... (btw मुझे इस हार्डवेयर या एपीआई के बारे में कुछ भी पता नहीं है, बस दस्तावेज़ों को ब्राउज़ किया गया है थोड़ा) –
मैंने वेब पर इस SCardGetAttrib, दस्तावेज़ और स्रोत को थोड़ा और अधिक जांच की। यह अभी भी लगता है कि ScardGetAttrib के लिए मुझे hCardHandle प्राप्त करना है। HCardHandle के रूप में SCARDGetAttrib को NULL पास करने का अर्थ नहीं है। आपको किसी भी तरह से परिभाषित करना होगा कि कौन से कार्ड्रेडर्स विशेषताओं को आप प्राप्त करना चाहते हैं। SCardGetAtrrib का उपयोग करके इस पाठक को कार्डहैंडल के माध्यम से एक्सेस किया जाता है। मैंने जीत के लिए आईएफडी हैंडल खोजने की भी कोशिश की, लेकिन सफलता के बिना। पीसीएससी-लाइट में इन विशेषताओं को IFDHGetCapabilities का उपयोग करके एक्सेस किया जाता है। – vellotis