用PC/SC标准时 调用SCardControl 的参数问题..做过PC/SC的高手来

这是定义Public Declare Function SCardControl Lib "winscard.dll" (ByVal hCard As Long, _ ByVal dwControlCode As Long, _ ByRef pvInBuffer As Byte, _ ByVal cbInBufferSize As Long, _ ByRef pvOutBuffer As Byte, _ ByVal cbOutBufferSize As Long, _ ByRef pcbBytesReturned As Long) As Long其中 pvInBuffer 表示卡类型.如 16进制的"10" 表示的是4428卡.如果我用的是普通的CPU卡.请问这个类型数值是多少.

第1个回答  2011-10-26
我最近也在做PCSC,一起研究吧,这个pvInBuffer 大小没有规定的把?它是发给reader的escape command,而不是卡类型
给这个你看看:
#include <winscard.h>
#define IOCTL_CSB6_PCSC_ESCAPE SCARD_CTL_CODE(2048)

// Use ScardListReaders to get reader_name

LONG csb6_control(const char *reader_name,
const BYTE in_buffer[],
DWORD in_length,
BYTE out_buffer[],
DWORD max_out_length,
DWORD *got_out_length)
{
SCARDCONTEXT hContext;
SCARDHANDLE hCard;

LONG rc;
DWORD dwProtocol;

rc = SCardEstablishContext(SCARD_SCOPE_SYSTEM,
NULL,
NULL,
&hContext);
if (rc != SCARD_S_SUCCESS)
return rc;

rc = SCardConnect(hContext,
reader_name,
SCARD_SHARE_DIRECT,
0,
&hCard,
&dwProtocol);
if (rc != SCARD_S_SUCCESS)
{
SCardReleaseContext(hContext);
return rc;
}
rc = SCardControl(hCard,
IOCTL_CSB6_PCSC_ESCAPE,
in_buffer,
in_length,
out_buffer,
max_out_length,
got_out_length);

SCardDisconnect(hCard, SCARD_LEAVE_CARD);
SCardReleaseContext(hContext);

return rc;
}
相似回答
大家正在搜