-// MllMain.cpp : DLL \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\83G\83\93\83g\83\8a \83|\83C\83\93\83g\82ð\92è\8b`\82µ\82Ü\82·\81B\r
-//\r
+// MllMain.cpp : DLL アプリケーションのエントリ ポイントを定義します。
+//
#include <winscard.h>
-#include <stdio.h>\r
-#include "CasProxy.h"\r
-#include "W2L.h"\r
+#include <stdio.h>
+#include "CasProxy.h"
+#include "W2L.h"
#ifndef SCARD_AUTOALLOCATE
#define SCARD_AUTOALLOCATE (DWORD)(-1) /**< see SCardFreeMemory() */
-#endif\r
-
-//////////////////////////////////////////////////////////////////////\r
-// WinSCard\83t\83b\83N\r
-//////////////////////////////////////////////////////////////////////\r
-LONG SCardConnect(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)\r
-{\r
- // \83v\83\8d\83L\83V\83C\83\93\83X\83^\83\93\83X\90¶\90¬\r
- CCasProxy *pCasProxy = new CCasProxy();\r
-
- // \83T\81[\83o\82É\90Ú\91±\r
- if(!pCasProxy->Connect()){\r
- delete pCasProxy;\r
- *phCard = NULL;\r
- return SCARD_E_READER_UNAVAILABLE;\r
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// WinSCardフック
+//////////////////////////////////////////////////////////////////////
+LONG SCardConnect(SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)
+{
+ // プロキシインスタンス生成
+ CCasProxy *pCasProxy = new CCasProxy();
+
+ // サーバに接続
+ if(!pCasProxy->Connect()){
+ delete pCasProxy;
+ *phCard = NULL;
+ return SCARD_E_READER_UNAVAILABLE;
}
-\r
- // \83n\83\93\83h\83\8b\82É\96\84\82ß\8d\9e\82Þ\r
- *phCard = reinterpret_cast<SCARDHANDLE>(pCasProxy);\r
- if(pdwActiveProtocol)*pdwActiveProtocol = SCARD_PROTOCOL_T1;\r
-\r
- return SCARD_S_SUCCESS;\r
-}\r
-\r
-LONG SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition)\r
-{\r
- // \83T\81[\83o\82©\82ç\90Ø\92f\r
- CCasProxy *pCasProxy = reinterpret_cast<CCasProxy *>(hCard);\r
- if(pCasProxy)delete pCasProxy;\r
-\r
- return SCARD_S_SUCCESS;\r
-}\r
-\r
-LONG SCardEstablishContext(DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext)\r
+
+ // ハンドルに埋め込む
+ *phCard = reinterpret_cast<SCARDHANDLE>(pCasProxy);
+ if(pdwActiveProtocol)*pdwActiveProtocol = SCARD_PROTOCOL_T1;
+
+ return SCARD_S_SUCCESS;
+}
+
+LONG SCardDisconnect(SCARDHANDLE hCard, DWORD dwDisposition)
+{
+ // サーバから切断
+ CCasProxy *pCasProxy = reinterpret_cast<CCasProxy *>(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)
+{
+ // サーバにリクエスト送受信
+ CCasProxy *pCasProxy = reinterpret_cast<CCasProxy *>(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;\r
-}\r
-\r
-LONG SCardFreeMemory(SCARDCONTEXT hContext, LPCVOID pvMem)\r
-{\r
- return SCARD_S_SUCCESS;\r
-}\r
-\r
-LONG SCardListReaders(SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders)\r
-{\r
- const char szReaderName[] = "BonCasLink Proxy Card Reader\0";\r
-\r
- if(pcchReaders){\r
- if((*pcchReaders == SCARD_AUTOALLOCATE) && mszReaders){\r
- *((LPCSTR *)mszReaders) = szReaderName; \r
- return SCARD_S_SUCCESS;\r
- }\r
- else{\r
- *pcchReaders = sizeof(szReaderName);\r
- }\r
- }\r
-\r
- if(mszReaders) memcpy(mszReaders, szReaderName, sizeof(szReaderName));\r
-\r
- return SCARD_S_SUCCESS;\r
-}\r
-\r
-LONG SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength)\r
-{\r
- // \83T\81[\83o\82É\83\8a\83N\83G\83X\83g\91\97\8eó\90M\r
- CCasProxy *pCasProxy = reinterpret_cast<CCasProxy *>(hCard);\r
- if(!pCasProxy)return SCARD_E_READER_UNAVAILABLE;\r
-\r
- DWORD dwRecvLen = pCasProxy->TransmitCommand(pbSendBuffer, cbSendLength, pbRecvBuffer);\r
- if(pcbRecvLength)*pcbRecvLength = dwRecvLen;\r
-\r
- return (dwRecvLen)? SCARD_S_SUCCESS : SCARD_E_TIMEOUT;\r
-}\r
-\r
-LONG SCardReleaseContext(SCARDCONTEXT hContext)\r
-{\r
- return SCARD_S_SUCCESS;\r
-}\r
+ return SCARD_S_SUCCESS;
+}