SCardSetAttrib
343 行, SCardSetAttrib 定义在 winscard_clnt.c
实现如下:
2732 LONG SCardSetAttrib(SCARDHANDLE hCard, DWORD dwAttrId, LPCBYTE pbAttr, 2733 DWORD cbAttrLen) 2734 { 2735 LONG ret; 2736 2737 PROFILE_START 2738 2739 if (NULL == pbAttr || 0 == cbAttrLen) 2740 return SCARD_E_INVALID_PARAMETER; 2741
2742 ret = SCardGetSetAttrib(hCard, SCARD_SET_ATTRIB, dwAttrId, (LPBYTE)pbAttr, 2743 &cbAttrLen); 2744 2745 PROFILE_END(ret) 2746 2747 return ret; 2748 } |
2734~2741 行,检查检查。
2742 行, SCardGetSetAttrib, 前面提过了,不过这次第二个参数是 SCARD_SET_ATTRIB.
SCardSetAttrib 也是 SCardGetSetAttrib 的一个 wrapper.
343 行,是要设置 ATR 字符串 .ATR 能设置的吗?看看服务端如何实现了?
345 346 printf("Testing SCardStatus/t/t: "); 347 348 #ifdef USE_AUTOALLOCATE 349 dwReaderLen = SCARD_AUTOALLOCATE; 350 dwAtrLen = SCARD_AUTOALLOCATE; 351 rv = SCardStatus(hCard, (LPSTR)&pcReaders, &dwReaderLen, &dwState, &dwProt, 352 (LPBYTE)&pbAtr, &dwAtrLen); 353 #else 354 dwReaderLen = 100; 355 pcReaders = malloc(sizeof(char) * 100); 356 dwAtrLen = MAX_ATR_SIZE; 357 358 rv = SCardStatus(hCard, pcReaders, &dwReaderLen, &dwState, &dwProt, 359 pbAtr, &dwAtrLen); 360 #endif |
351 行, 358 行, 测试 SCardStatus ,同样存在是否由 SCardStatus 内部分配内存。
SCardStatus 定义在 winscard_clnt.c
实现如下: