[PC/SC]SCardTransmitでSCARD_E_INSUFFICIENT_BUFFER | 現役SEが最新ITネタを分かりやすく伝えるブログ

現役SEが最新ITネタを分かりやすく伝えるブログ

好奇心旺盛なうどん大好きITエンジニア。
フットサル,けん玉,クライミング,新日本プロレスが趣味。
AI と データ分析 界隈が大好き。
本屋には毎日行く。

Twitter:@waka21

マイ本棚:http://booklog.jp/users/wakagasira/front

SCardTransmitでSCARD_E_INSUFFICIENT_BUFFERエラー(0x80100008)が

出るのでハマってしまいました。

 

WinError.hには以下のような説明になっています。

//
// MessageId: SCARD_E_INSUFFICIENT_BUFFER
//
// MessageText:
//
// The data buffer to receive returned data is too small for the returned data.

 

よくよく考えるとサイズを初期化せずに連続してコマンドを読んでしまってたので、

SCardTransmitを送る前にpbRecvBufferとpcbRecvLengthを初期化したら解決しました。

 

SCardTransmit(
    IN SCARDHANDLE hCard,
    IN LPCSCARD_IO_REQUEST pioSendPci,
    IN LPCBYTE pbSendBuffer,
    IN DWORD cbSendLength,
    IN OUT LPSCARD_IO_REQUEST pioRecvPci,
    OUT LPBYTE pbRecvBuffer,
    IN OUT LPDWORD pcbRecvLength);

凡ミスです。

前のコマンドでpcbRecvLengthが小さい値になっていて、レスポンスを受け取るだけのバッファサイズが指定できていなかったのが原因でした。