-2

我有接触式 SLE4442智能卡 (2W) 和Omnikey 5421智能卡读卡器。我的问题是与卡的连接。WinSCard 的方法SCardConnect返回错误SCARD_W_UNRESPONSIVE_CARD 0x80100066。有趣的是,Omnikey 5 3 21(前身 5421)不存在这个问题。我发布了用于测试读取数据的代码(Delphi):

function GetResponseFromCard(const FCardHandle: Integer; const APdu: 

string): string;
var
  RetVar : cardinal;
  SBuf   : string;
  SLen   : cardinal;
  RBuf   : string;
  RLen   : cardinal;
  Ppci   : Pointer;
begin
  SBuf := APdu;
  RBuf := StringOfChar(#0,260);
  Ppci := @SCARD_PCI_T0;
  SLen := Length(APdu);
  RLen := Length(RBuf);
  RetVar := SCardTransmit(FCardHandle, Ppci, Pointer(SBuf), SLen, nil, Pointer(RBuf), @RLen);
  if RetVar = SCARD_S_SUCCESS then begin
    Result := Copy(RBuf,1,RLen);
  end else begin
    Result := IntToHex(RetVar, 8);
  end;
end;

procedure TestSLE4442;
var
  FContext: Cardinal;
  PContext: Pointer;
  Res: LongInt;
  ReaderListStr: string;
  ReaderListSize: integer;
  v: array[0..10] of string;
  SelectedReader: PChar;
  phCard: Integer;
  pdwActiveProtocol: Integer;
  ReadedData: string;
begin
  FContext := 0;
  PContext := @FContext;

  Res := SCardEstablishContext(SCARD_SCOPE_USER, nil, nil, PContext);
  if Res = SCARD_S_SUCCESS then begin
    Res := SCardListReaders(FContext, nil, nil, ReaderListSize);
    if Res = SCARD_S_SUCCESS then begin
      SetLength(ReaderListStr, ReaderListSize);
      Res := SCardListReaders(FContext, nil, Pointer(ReaderListStr), ReaderListSize);
      SortOutSubstrings(ReaderListStr,v,[#0]);
      SelectedReader := PChar(v[0]);
      ShowMessage('SelectedReader: '+ SelectedReader);
      if Res = SCARD_S_SUCCESS then begin
        Res := SCardConnect(FContext, SelectedReader, SCARD_SHARE_EXCLUSIVE, SCARD_PROTOCOL_T0, phCard, @pdwActiveProtocol);
        if Res = SCARD_S_SUCCESS then begin
          ReadedData := GetResponseFromCard(phCard, TStringHelper.Hex2Bin('FFB0000000'));
          ShowMessage('Data: '+ ReadedData);
        end;
      end;
    end;
    SCardReleaseContext(FContext);
  end;
end;

有人遇到过这个问题吗?我也问过 HID,但暂时没有答案。

4

1 回答 1

0

感谢帮助。我听说了,我厌倦了同步 Omnikey API。供应商回答我说新的 5421 不支持 2WBP。也许有机会使用 SCARD_SHARE_DIRECT,因为使用它我可以使用 5421 连接到 SLE4442。但这很难说没有供应商支持我还能做些什么。

于 2015-08-03T09:33:35.553 回答