0
私は接続し、WindowsスマートカードAPIを介してスマートカードにコマンドを送信しようとしています。以下はMSDNのコードです。ここではSCardTransmit関数は常に私に0x000005aaを返す、私は間違って何をしているかを私に知らせることができます。SCardTransmitがエラー0x000005aaを返します
int _tmain(int argc, _TCHAR* argv[])
{
SCARDCONTEXT hContext;
LONG lReturn;
SCARDHANDLE hCardHandle;
DWORD dwAP;
const DWORD BUF_LEN = 512;
DWORD dwRecv;
BYTE pbRecv[BUF_LEN];
BYTE sendCommand[]={0x00,0x0A4,0x00,0x00,0x02,0x3F,0x00};
lReturn = SCardEstablishContext(SCARD_SCOPE_USER, NULL,NULL,&hContext);
if (SCARD_S_SUCCESS != lReturn)
{
printf("Failed SCardEstablishContext\n");
SCardReleaseContext(hContext);
return 0;
}
lReturn = SCardConnect(hContext, "OMNIKEY CardMan 3x21 0",
SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1,
&hCardHandle, &dwAP);
if (SCARD_S_SUCCESS != lReturn)
{
printf("Failed SCardConnect\n");
SCardReleaseContext(hContext);
return 0;
}
switch (dwAP)
{
case SCARD_PROTOCOL_T0:
printf("Active protocol T0\n");
break;
case SCARD_PROTOCOL_T1:
printf("Active protocol T1\n");
break;
case SCARD_PROTOCOL_UNDEFINED:
default:
printf("Active protocol unnegotiated or unknown\n");
break;
}
lReturn = SCardTransmit(hCardHandle,SCARD_PCI_T0,sendCommand,7,
NULL,pbRecv,&dwRecv);
if (SCARD_S_SUCCESS != lReturn)
{
printf("Failed SCardTransmit\n");
}
lReturn = SCardReleaseContext(hContext);
return 0;
}
最後の関数は 'SCardReleaseContext'です、それはあなたが意味するものですか?おそらく、最後のものを見つける必要があるのではなく、ちょうどそれに名前を付けることができます。 'dwRecv'は初期化されていないように見えますが、適切な値を持つはずです。応答のために –
ありがとうございます。私が試してみましょう。 – vivek
それが働いて、私は答えとしてそれを入れます。ありがとう。 – vivek