2013-03-29 6 views
0

저는 USB 스마트 카드를 개발 중입니다. & 저는이 스마트 카드로 데이터를 전송하기 위해 Windows PC/SC API를 사용합니다. 나는 확실히 크기 & 포인터를 해요dwMaxCCIDMessageLength가 4KB보다 클 때 SCardTransmit이 ERROR_INVALID_PARAMETER를 반환합니다.

if(SCardConnect(hSC, sCard, SCARD_SHARE_EXCLUSIVE, SCARD_PROTOCOL_T1, &hCard, &dwActiveProtocol) == SCARD_S_SUCCESS) 
{ 
    if(SCardTransmit(hCard, SCARD_PCI_T1, pSendBuf, ulSendBufLen, SCARD_PCI_T1, pRecBuf, pulRecBufLen) == SCARD_S_SUCCESS) 
    { 
     //do something 
    } 
} 

에 모두 인/아웃 버퍼가 유효에서이 내 코드의 일부입니다. 장치 기술자의 dwMaxCCIDMessageLength 필드 0x00001000h보다 낮까지

는 아무 문제 & 프로그램이 잘 작동하지 있습니다,하지만 난 (4킬로바이트보다) 더 큰 값으로 증가 할 때, SCardTransmit는 ERROR_INVALID_PARAMETER 결과 코드와 함께 실패합니다. 나는이 불일치 어떤 종류의 생각 현재

, 내가 pSendBuf 내용이 완료된 내용을 처리하는 스마트 카드 &에 의해 성공적으로 수신 알고 있지만 카드가 응답을 반환하고자 할 때, 그 오류가 & 발생 (예 : 버퍼 크기 제한) PC/SC 드라이버.

아무도 도와 줄 수 있습니까?

답변

0

드라이버에 병목 현상이 있다는 것은 매우 드뭅니다. USB 인터페이스가 있다고 가정하면 프로토콜 계층이 용의성이 있다고 가정하지 않을 것입니다. 이로 인해 스마트 카드 칩이 주요한 용의자로 남았고, 많은 새로운 칩이 총 8KB의 RAM을 가지고 있기 때문에 더 나은 부분을 I/O 버퍼에 사용하지 않는다는 것을 이해할 수 있습니다. 영향을받는 명령을 모르는 채로 파일 연결 또는 청크 방식으로 읽는 것이 좋습니다.