SCardReconnect
SCardReconnect 定义在 winscard_clnt.c
实现如下:
等等,
问:前面提过的 API 有 SCardConnect ,这次 SCardReconnect 做什么?
为什么需要这个 API ?
答案是,
在共享访问模式下,其中一个应用 reset 了读卡器中的卡。这样另外一个不同的应用再发出
与读卡器中的卡通讯的命令就会返回 SCARD_W_RESET_CARD 错误。这个错误不是真正的错误,仅仅提示后面这个应用需要 SCardReconnect 这个读卡器。
906 LONG SCardReconnect(SCARDHANDLE hCard, DWORD dwShareMode, 907 DWORD dwPreferredProtocols, DWORD dwInitialization, 908 LPDWORD pdwActiveProtocol) 909 { 910 LONG rv; 911 reconnect_struct scReconnectStruct; 912 sharedSegmentMsg msgStruct; 913 int i; 914 DWORD dwContextIndex, dwChannelIndex; 915
916 PROFILE_START 917 918 if (pdwActiveProtocol == NULL) 919 return SCARD_E_INVALID_PARAMETER; 920 921 rv = SCardCheckDaemonAvailability(); 922 if (rv != SCARD_S_SUCCESS) 923 return rv; 924 925 /* 926 * Make sure this handle has been opened 927 */ 928 rv = SCardGetIndicesFromHandle(hCard, &dwContextIndex, &dwChannelIndex); 929 if (rv == -1) 930 return SCARD_E_INVALID_HANDLE; |