X-Git-Url: http://git.osdn.net/view?p=rec10%2Frec10-git.git;a=blobdiff_plain;f=dist%2Ftrunk%2Fb25-remote%2Fb25-client.cpp;fp=dist%2Ftrunk%2Fb25-remote%2Fb25-client.cpp;h=f108e00aea7c3942c76f6e23b801e9e420dd5ca9;hp=0000000000000000000000000000000000000000;hb=13e65e890a6dd60705bacc22b893ce5c899b7001;hpb=9b4c01d4fac3cef067298b660c72fe3755616a7e diff --git a/dist/trunk/b25-remote/b25-client.cpp b/dist/trunk/b25-remote/b25-client.cpp new file mode 100755 index 0000000..f108e00 --- /dev/null +++ b/dist/trunk/b25-remote/b25-client.cpp @@ -0,0 +1,87 @@ +// MllMain.cpp : DLL ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚̃Gƒ“ƒgƒŠ ƒ|ƒCƒ“ƒg‚ð’è‹`‚µ‚Ü‚·B +// +#include +#include +#include "CasProxy.h" +#include "W2L.h" +#ifndef SCARD_AUTOALLOCATE + #define SCARD_AUTOALLOCATE (DWORD)(-1) /**< see SCardFreeMemory() */ +#endif + +////////////////////////////////////////////////////////////////////// +// WinSCardƒtƒbƒN +////////////////////////////////////////////////////////////////////// +LONG SCardConnect(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol) +{ + // ƒvƒƒLƒVƒCƒ“ƒXƒ^ƒ“ƒX¶¬ + CCasProxy *pCasProxy = new CCasProxy(); + + // ƒT[ƒo‚ɐڑ± + if(!pCasProxy->Connect()){ + delete pCasProxy; + *phCard = NULL; + return SCARD_E_READER_UNAVAILABLE; + } + + // ƒnƒ“ƒhƒ‹‚É–„‚ߍž‚Þ + *phCard = reinterpret_cast(pCasProxy); + if(pdwActiveProtocol)*pdwActiveProtocol = SCARD_PROTOCOL_T1; + + return SCARD_S_SUCCESS; +} + +LONG SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition) +{ + // ƒT[ƒo‚©‚çØ’f + CCasProxy *pCasProxy = reinterpret_cast(hCard); + if(pCasProxy)delete pCasProxy; + + return SCARD_S_SUCCESS; +} + +LONG SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext) +{ + return SCARD_S_SUCCESS; +} + +LONG SCardFreeMemory(SCARDCONTEXT hContext, LPCVOID pvMem) +{ + return SCARD_S_SUCCESS; +} + +LONG SCardListReaders(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders) +{ + const char szReaderName[] = "BonCasLink Proxy Card Reader\0"; + + if(pcchReaders){ + if((*pcchReaders == SCARD_AUTOALLOCATE) && mszReaders){ + *((LPCSTR *)mszReaders) = szReaderName; + return SCARD_S_SUCCESS; + } + else{ + *pcchReaders = sizeof(szReaderName); + } + } + + if(mszReaders) memcpy(mszReaders, szReaderName, sizeof(szReaderName)); + + return SCARD_S_SUCCESS; +} + +LONG SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength) +{ + // ƒT[ƒo‚ɃŠƒNƒGƒXƒg‘—ŽóM + CCasProxy *pCasProxy = reinterpret_cast(hCard); + if(!pCasProxy)return SCARD_E_READER_UNAVAILABLE; + + DWORD dwRecvLen = pCasProxy->TransmitCommand(pbSendBuffer, cbSendLength, pbRecvBuffer); + if(pcbRecvLength)*pcbRecvLength = dwRecvLen; + + return (dwRecvLen)? SCARD_S_SUCCESS : SCARD_E_TIMEOUT; +} + +LONG SCardReleaseContext(SCARDCONTEXT hContext) +{ + return SCARD_S_SUCCESS; +} +