2011-08-24 5 views
1

스마트 카드와의 통신의 경우 APSU 명령을 스마트 카드에 보내는 API로 WINSCARD.DLL을 사용합니다. 몇 cardreaders 들어, 예상대로 작동하지만 어떻게 든 난 알 수없는 반환 (http://msdn.microsoft.com/en-us/library/ms936965.aspx에) 값을 얻을 때 SCardTransmit 메서드에서 O2Micro 리더에 명령을 보낼.WINSCARD.DLL 메서드에서 알 수없는 응답 응답 길이 정보가있는 O2Micro 판독기에서 SCardTransmit

하는 작업은 무엇 : 나는 명령 (16 진수의 값) 보낼 경우 는 :

CLA: 00, INS: A4, P1: 02, P2: 04, Lc: 02, Data: "4401", Le: (not present) 

을 나는 응답 응답을 사용할 수 0x1F 바이트가 있다는 것을 알려줍니다 SW1: 61. SW2: 1F

를 얻을. 그래서 명령을 보내

CLA: 00, INS: A4, P1: 02, P2: 04, Lc: 02, Data: "4401", Le: 1F 

을하지만 그 명령에 나는 데이터를 얻을 가치 0x57을 반환합니다.

제 질문은 누구든지 반환 값 0x57이 무엇을 말하고 있는지 그리고 아마도 해결 방법이나 해결 방법을 알고 있는지 궁금합니다.

+0

제목에 맞춤법을 수정하십시오. – leppie

답변

3

오류 코드는 winerror.h의 System Error Codes : ERROR_INVALID_PARAMETER의 창 중 하나입니다. 이것은 거의 항상 APDU는 괜찮지 만, SCardTransmit 인수가 문제라는 것을 의미합니다. pbRecvBuffer 매개 변수를 자세히 살펴 보는 것이 좋습니다. 주의 사항 : SCard 함수는 C++가 아닌 C#에서만 사용했습니다.

PC/SC 기능은 표준 Windows 오류 코드 및 PC/SC 특정 오류 코드를 반환 할 수 있습니다. FormatMessage 호출에 대한 비트를 기록해 두십시오. Windows에서 제공하는 미리 정의 된 오류 메시지를 사용하여 오류보고를 좀 더 일반적인 것으로 만들 수 있습니다.

+0

나는 함수를 다음과 같이 호출한다. 'SCardTransmit ((uint) Card, IntPtr.Zero, SendBuffer, (SendBuffer.Length, IntPtr.Zero, RecvBuffer, rec RecLength)' RecvBuffer는 257 바이트의 바이트 배열이고 RecvLength 또한 RecvLength는 257입니다.하지만 여전히 동일한 오류가 발생합니다. –

+0

약간의 노력으로 잘못된 프로토콜이'SCardConnect' 메소드에 주어진 것을 발견했습니다. 매개 변수'dwPrefProtocol' (목록의 앞뒤에 위치)는 1 | 2로 표시됩니다. 일반적으로 개발 시스템에서는 2를 사용하지만 프로덕션 시스템에서는 1을 사용합니다. 값 2를 사용하여 하드 코딩을 변경 한 다음 작업을 시작했습니다. 도와 줘서 고맙다! –

+0

최대 255 바이트로 시도 했습니까? 그 부분의 최대 바이트 수는 ...이라고 생각합니다. – NKCSS