Advertisement
Guest User

Untitled

a guest
Sep 17th, 2016
1,941
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 17.30 KB | None | 0 0
  1. diff --git a/softcas.vcxproj b/softcas.vcxproj
  2. --- a/softcas.vcxproj
  3. +++ b/softcas.vcxproj
  4. @@ -90,6 +90,7 @@
  5.        <GenerateDebugInformation>true</GenerateDebugInformation>
  6.        <SubSystem>Windows</SubSystem>
  7.        <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
  8. +      <ModuleDefinitionFile>winscard.def</ModuleDefinitionFile>
  9.      </Link>
  10.    </ItemDefinitionGroup>
  11.    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
  12. @@ -104,6 +105,7 @@
  13.        <GenerateDebugInformation>true</GenerateDebugInformation>
  14.        <SubSystem>Windows</SubSystem>
  15.        <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
  16. +      <ModuleDefinitionFile>winscard.def</ModuleDefinitionFile>
  17.      </Link>
  18.    </ItemDefinitionGroup>
  19.    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
  20. @@ -120,6 +122,7 @@
  21.        <EnableCOMDATFolding>true</EnableCOMDATFolding>
  22.        <OptimizeReferences>true</OptimizeReferences>
  23.        <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
  24. +      <ModuleDefinitionFile>winscard.def</ModuleDefinitionFile>
  25.      </Link>
  26.    </ItemDefinitionGroup>
  27.    <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
  28. @@ -135,6 +138,7 @@
  29.        <EnableCOMDATFolding>true</EnableCOMDATFolding>
  30.        <OptimizeReferences>true</OptimizeReferences>
  31.        <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
  32. +      <ModuleDefinitionFile>winscard.def</ModuleDefinitionFile>
  33.      </Link>
  34.    </ItemDefinitionGroup>
  35.    <ItemGroup>
  36. @@ -147,6 +151,9 @@
  37.      <ClInclude Include="Keys.h" />
  38.      <ClInclude Include="Keyset.h" />
  39.    </ItemGroup>
  40. +  <ItemGroup>
  41. +    <None Include="winscard.def" />
  42. +  </ItemGroup>
  43.    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  44.    <ImportGroup Label="ExtensionTargets">
  45.    </ImportGroup>
  46. diff --git a/softcas.vcxproj.filters b/softcas.vcxproj.filters
  47. --- a/softcas.vcxproj.filters
  48. +++ b/softcas.vcxproj.filters
  49. @@ -36,4 +36,9 @@
  50.        <Filter>Header Files</Filter>
  51.      </ClInclude>
  52.    </ItemGroup>
  53. +  <ItemGroup>
  54. +    <None Include="winscard.def">
  55. +      <Filter>Source Files</Filter>
  56. +    </None>
  57. +  </ItemGroup>
  58.  </Project>
  59. \ No newline at end of file
  60. diff --git a/winscard.cpp b/winscard.cpp
  61. --- a/winscard.cpp
  62. +++ b/winscard.cpp
  63. @@ -3,111 +3,113 @@
  64.  //      Keys.cpp, Keys.h, Keyset.cpp, Keyset.h
  65.  //  You should modify "Size" in Decoder-ECM.cpp l42 to "Size-3"
  66.  
  67. -#include <Windows.h>
  68. +/*
  69. +[64bit]
  70. +  x86_64-w64-mingw32-g++ -O2 -shared -o WinSCard.dll winscard.def winscard.cpp -lshlwapi
  71. +
  72. +[32bit]
  73. +  i686-w64-mingw32-g++ -O2 -shared -o WinSCard.dll winscard.def winscard.cpp -lshlwapi -Wl,--enable-stdcall-fixup
  74. +*/
  75. +
  76. +#define g_rgSCardT0Pci  _REMOVE_g_rgSCardT0Pci
  77. +#define g_rgSCardT1Pci  _REMOVE_g_rgSCardT1Pci
  78. +#define g_rgSCardRawPci _REMOVE_g_rgSCardRawPci
  79. +#include <winscard.h>
  80. +#undef g_rgSCardT0Pci
  81. +#undef g_rgSCardT1Pci
  82. +#undef g_rgSCardRawPci
  83. +
  84.  #include <stdio.h>
  85. +#include <ctype.h>
  86.  #include <tchar.h>
  87.  #define htons htons_
  88.  #define ntohs ntohs_
  89. +#include <shlwapi.h>
  90. +#ifdef _MSC_VER
  91. +#pragma comment(lib, "shlwapi.lib")
  92. +#endif
  93. +#include <algorithm>
  94.  #include "Crypto.cpp"
  95.  #include "Decoder-ECM.cpp"
  96.  //#include "Keys.cpp"
  97.  #include "Keyset.cpp"
  98. -#ifdef _WIN64
  99. -#pragma comment(linker,"/EXPORT:SCardEstablishContext=SCardEstablishContext_")
  100. -#pragma comment(linker,"/EXPORT:SCardListReadersA=SCardListReadersA_")
  101. -#pragma comment(linker,"/EXPORT:SCardListReadersW=SCardListReadersW_")
  102. -#pragma comment(linker,"/EXPORT:SCardConnectA=SCardConnectA_")
  103. -#pragma comment(linker,"/EXPORT:SCardConnectW=SCardConnectW_")
  104. -#pragma comment(linker,"/EXPORT:SCardTransmit=SCardTransmit_")
  105. -#pragma comment(linker,"/EXPORT:SCardDisconnect=SCardDisconnect_")
  106. -#pragma comment(linker,"/EXPORT:SCardFreeMemory=SCardFreeMemory_")
  107. -#pragma comment(linker,"/EXPORT:SCardGetStatusChangeA=SCardGetStatusChangeA_")
  108. -#pragma comment(linker,"/EXPORT:SCardGetStatusChangeW=SCardGetStatusChangeW_")
  109. -#pragma comment(linker,"/EXPORT:SCardReleaseContext=SCardReleaseContext_")
  110. -#pragma comment(linker,"/EXPORT:SCardReconnect=SCardReconnect_")
  111. -#pragma comment(linker,"/EXPORT:SCardAccessStartedEvent=SCardAccessStartedEvent_")
  112. -#pragma comment(linker,"/EXPORT:SCardReleaseStartedEvent=SCardReleaseStartedEvent_")
  113. -#pragma comment(linker,"/EXPORT:SCardCancel=SCardCancel_")
  114. -#pragma comment(linker,"/EXPORT:g_rgSCardT1Pci=g_rgSCardT1Pci_")
  115. -#pragma comment(linker,"/EXPORT:SCardIsValidContext=SCardIsValidContext_")
  116. -#pragma comment(linker,"/EXPORT:SCardStatusA=SCardStatusA_")
  117. -#pragma comment(linker,"/EXPORT:SCardStatusW=SCardStatusW_")
  118. -#else
  119. -#pragma comment(linker,"/EXPORT:SCardEstablishContext=_SCardEstablishContext_@16")
  120. -#pragma comment(linker,"/EXPORT:SCardListReadersA=_SCardListReadersA_@16")
  121. -#pragma comment(linker,"/EXPORT:SCardListReadersW=_SCardListReadersW_@16")
  122. -#pragma comment(linker,"/EXPORT:SCardConnectA=_SCardConnectA_@24")
  123. -#pragma comment(linker,"/EXPORT:SCardConnectW=_SCardConnectW_@24")
  124. -#pragma comment(linker,"/EXPORT:SCardTransmit=_SCardTransmit_@28")
  125. -#pragma comment(linker,"/EXPORT:SCardDisconnect=_SCardDisconnect_@8")
  126. -#pragma comment(linker,"/EXPORT:SCardFreeMemory=_SCardFreeMemory_@8")
  127. -#pragma comment(linker,"/EXPORT:SCardGetStatusChangeA=_SCardGetStatusChangeA_@16")
  128. -#pragma comment(linker,"/EXPORT:SCardGetStatusChangeW=_SCardGetStatusChangeW_@16")
  129. -#pragma comment(linker,"/EXPORT:SCardReleaseContext=_SCardReleaseContext_@4")
  130. -#pragma comment(linker,"/EXPORT:SCardReconnect=_SCardReconnect_@20")
  131. -#pragma comment(linker,"/EXPORT:SCardAccessStartedEvent=_SCardAccessStartedEvent_@0")
  132. -#pragma comment(linker,"/EXPORT:SCardReleaseStartedEvent=_SCardReleaseStartedEvent_@0")
  133. -#pragma comment(linker,"/EXPORT:SCardCancel=_SCardCancel_@4")
  134. -#pragma comment(linker,"/EXPORT:g_rgSCardT1Pci=_g_rgSCardT1Pci_")
  135. -#pragma comment(linker,"/EXPORT:SCardIsValidContext=_SCardIsValidContext_@4")
  136. -#pragma comment(linker,"/EXPORT:SCardStatusA=_SCardStatusA_@28")
  137. -#pragma comment(linker,"/EXPORT:SCardStatusW=_SCardStatusW_@28")
  138. -#endif
  139.  static HANDLE g_SCardStartedEvent_ = NULL;
  140.  static const INT DummyHandle = 0x35313239;
  141.  static const CHAR READER_NAME_A[] = "@OishiiSlurper\0";
  142.  static const WCHAR READER_NAME_W[] = L"@OishiiSlurper\0";
  143. -static HINSTANCE hModule;
  144. -
  145. -static void ProfileKeyset0(LPCTSTR ss, LPCTSTR ns, Key_t &k, LPCTSTR ini)
  146. -{
  147. -  TCHAR szBuff[64] = _T("");
  148. -  TCHAR d[64] = _T("");
  149. -  u8 v[9];
  150. -
  151. -  ::GetPrivateProfileString(ss, ns, _T("00 00 00 00 00 00 00 00 00"), szBuff, 64, ini);
  152. -  _stscanf_s(szBuff, _T("%hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx %hhx"),&v[0],&v[1],&v[2],&v[3],&v[4],&v[5],&v[6],&v[7],&v[8]);
  153. -  k.WorkKeyID = v[0];
  154. -  memcpy(&k.Key[0], &v[1], 8);
  155. +
  156. +static bool PickupHex(u8 *out, int bytes, const TCHAR **pp) {
  157. +  int n = 2 * bytes;
  158. +  int i = 0;
  159. +  u8 x = 0;
  160. +  LPCTSTR p = *pp;
  161. +
  162. +  while (*p && n > 0) {
  163. +    int c = *p++;
  164. +    if (!isxdigit(c))
  165. +      continue;
  166. +
  167. +    c |= 'a' - 'A'; /* to lower case */
  168. +    c -= '0';
  169. +    if (c > 9)
  170. +      c -= 'a' - ('0' + 10);
  171. +
  172. +    x <<= 4, x |= c;
  173. +    out[i++ / 2] = x;
  174. +
  175. +    n--;
  176. +  }
  177. +
  178. +  *pp = p;
  179. +
  180. +  return n == 0;
  181.  }
  182.  
  183. -static void ProfileKeyset(LPCTSTR ss, LPCTSTR ini)
  184. +static bool ParseKey(Key_t *key, const TCHAR **pp)
  185.  {
  186. -  Keyset_t Keyset;
  187. -  TCHAR szBuff[8] = _T("");
  188. -  u8 v[1];
  189. +  return PickupHex(&key->WorkKeyID, 1, pp) &&
  190. +         PickupHex(&key->Key[0]   , 8, pp);
  191. +}
  192.  
  193. -  ::GetPrivateProfileString(ss, _T("BID"), _T("00"), szBuff, 8, ini);
  194. -  _stscanf_s(szBuff, _T("%hhx"),&v[0]);
  195. -  Keyset.BroadcastGroupID = v[0];
  196. +static void ProfileKeyset(LPCTSTR ini, u8 bid)
  197. +{
  198. +  TCHAR KeyName[16];
  199. +  TCHAR Line[256];
  200.  
  201. -  ProfileKeyset0(ss, _T("KW0"), Keyset.Keys[0], ini);
  202. -  ProfileKeyset0(ss, _T("KW1"), Keyset.Keys[1], ini);
  203. +  _stprintf_s(KeyName, _T("kw%02x"), bid);
  204. +  if (GetPrivateProfileString(_T("keys"), KeyName, _T(""), Line, _ARRAYSIZE(Line), ini) == 0)
  205. +    return;
  206. +
  207. +  Keyset_t Keyset;
  208. +  Keyset.BroadcastGroupID = bid;
  209. +
  210. +  const TCHAR *p = Line;
  211. +  for (int i = 0; i < 2; i++) {
  212. +    if (!ParseKey(&Keyset.Keys[i], &p))
  213. +      return;
  214. +  }
  215. +
  216. +  const u8 even = Keyset.Keys[0].WorkKeyID;
  217. +  const u8 odd  = Keyset.Keys[1].WorkKeyID;
  218. +  if (((odd ^ even) & 1) == 0)
  219. +    return; // bad pair
  220. +
  221. +  if ((even & 1) != 0)
  222. +    std::swap(Keyset.Keys[0], Keyset.Keys[1]); // correct order
  223.  
  224.    BCAS::Keyset::Register (&Keyset);
  225.  }
  226.  
  227. -static void GetPrivateProfile()
  228. +static void GetPrivateProfile(HINSTANCE hModule)
  229.  {
  230. -  TCHAR szDllPath[_MAX_PATH] = _T("");
  231. -  if(::GetModuleFileName(hModule, szDllPath, _MAX_PATH) == 0)
  232. +  TCHAR szIniPath[_MAX_PATH];
  233. +  if (GetModuleFileName(hModule, szIniPath, _ARRAYSIZE(szIniPath)) == 0)
  234.      return;
  235. -  
  236. -  TCHAR szDrive[_MAX_DRIVE];
  237. -  TCHAR szDir[_MAX_DIR];
  238. -  TCHAR szFName[_MAX_FNAME];
  239. -  _tsplitpath_s(szDllPath, szDrive, _MAX_DRIVE, szDir, _MAX_DIR, szFName, _MAX_FNAME, NULL, 0);
  240. +  PathRemoveExtension(szIniPath);
  241. +  PathAddExtension(szIniPath, _T(".ini"));
  242.  
  243. -  TCHAR szIniPath[_MAX_PATH] = _T("");
  244. -  _tmakepath_s(szIniPath, _MAX_PATH, szDrive, szDir, szFName, _T("ini"));
  245. -  
  246. -  ProfileKeyset(_T("WOWOW"),                  szIniPath);
  247. -  ProfileKeyset(_T("Star Channel HD"),        szIniPath);
  248. -  ProfileKeyset(_T("SkyPerfecTV E2 / 110CS"), szIniPath);
  249. -  ProfileKeyset(_T("Safenet"),                szIniPath);
  250. -  ProfileKeyset(_T("NHK"),                    szIniPath);
  251. -  ProfileKeyset(_T("Email"),                  szIniPath);
  252. -  ProfileKeyset(_T("NHK_Email"),              szIniPath);
  253. +  for (u8 bid = 0; bid < 32; bid++)
  254. +    ProfileKeyset(szIniPath, bid);
  255.  }
  256.  
  257.  BOOL WINAPI
  258. @@ -119,8 +121,7 @@ DllMain (HINSTANCE hinstDLL, DWORD fdwRe
  259.        g_SCardStartedEvent_ = CreateEvent (NULL, TRUE, TRUE, NULL);
  260.  
  261.        // ini
  262. -      hModule = hinstDLL;
  263. -      GetPrivateProfile();
  264. +      GetPrivateProfile(hinstDLL);
  265.  
  266.        //BCAS::Keys::RegisterAll ();
  267.      }
  268. @@ -134,13 +135,13 @@ DllMain (HINSTANCE hinstDLL, DWORD fdwRe
  269.  
  270.  extern "C"
  271.  {
  272. -  LONG WINAPI SCardEstablishContext_ (DWORD, LPCVOID, LPCVOID,
  273. +  LONG WINAPI SCardEstablishContext (DWORD, LPCVOID, LPCVOID,
  274.                       LPSCARDCONTEXT phContext)
  275.    {
  276.      *phContext = (SCARDCONTEXT) DummyHandle;
  277.      return SCARD_S_SUCCESS;
  278.    }
  279. -  LONG WINAPI SCardListReadersA_ (SCARDCONTEXT, LPCTSTR, LPSTR mszReaders,
  280. +  LONG WINAPI SCardListReadersA (SCARDCONTEXT, LPCSTR, LPSTR mszReaders,
  281.                   LPDWORD pcchReaders)
  282.    {
  283.      if (mszReaders)
  284. @@ -152,7 +153,7 @@ extern "C"
  285.      return SCARD_S_SUCCESS;
  286.    }
  287.  
  288. -  LONG WINAPI SCardListReadersW_ (SCARDCONTEXT, LPCTSTR, LPWSTR mszReaders,
  289. +  LONG WINAPI SCardListReadersW (SCARDCONTEXT, LPCWSTR, LPWSTR mszReaders,
  290.                   LPDWORD pcchReaders)
  291.    {
  292.      if (mszReaders)
  293. @@ -163,21 +164,21 @@ extern "C"
  294.      *pcchReaders = sizeof (READER_NAME_W) / sizeof (READER_NAME_W[0]);
  295.      return SCARD_S_SUCCESS;
  296.    }
  297. -  LONG WINAPI SCardConnectA_ (SCARDCONTEXT, LPCTSTR, DWORD, DWORD,
  298. +  LONG WINAPI SCardConnectA (SCARDCONTEXT, LPCSTR, DWORD, DWORD,
  299.                   LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)
  300.    {
  301.      *phCard = (SCARDHANDLE) DummyHandle;
  302.      *pdwActiveProtocol = SCARD_PROTOCOL_T1;
  303.      return SCARD_S_SUCCESS;
  304.    }
  305. -  LONG WINAPI SCardConnectW_ (SCARDCONTEXT, LPCTSTR, DWORD, DWORD,
  306. +  LONG WINAPI SCardConnectW (SCARDCONTEXT, LPCWSTR, DWORD, DWORD,
  307.                   LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)
  308.    {
  309.      *phCard = (SCARDHANDLE) DummyHandle;
  310.      *pdwActiveProtocol = SCARD_PROTOCOL_T1;
  311.      return SCARD_S_SUCCESS;
  312.    }
  313. -  LONG WINAPI SCardTransmit_ (SCARDHANDLE, LPCSCARD_IO_REQUEST,
  314. +  LONG WINAPI SCardTransmit (SCARDHANDLE, LPCSCARD_IO_REQUEST,
  315.                   LPCBYTE pbSendBuffer, DWORD cbSendLength,
  316.                   LPSCARD_IO_REQUEST, LPBYTE pbRecvBuffer,
  317.                   LPDWORD pcbRecvLength)
  318. @@ -186,9 +187,10 @@ extern "C"
  319.        {
  320.        case 0x30:
  321.     {
  322. +     static const
  323.       BYTE r[] = {
  324. -       0x00, 0x39, 0x00, 0x00, 0x21, 0x00, 0x00, 0x05, 0xc0, 0xff, 0xee,
  325. -       0xc0, 0xff, 0xee, 0x01, 0x50,
  326. +       0x00, 0x39, 0x00, 0x00, 0x21, 0x00, 0x00, 0x05, 0x01, 0x02, 0x03,
  327. +       0x04, 0x05, 0x06, 0x01, 0x50,
  328.         0x36, 0x31, 0x04, 0x66, 0x4b, 0x17, 0xea, 0x5c, 0x32, 0xdf, 0x9c,
  329.         0xf5, 0xc4, 0xc3, 0x6c, 0x1b,
  330.         0xec, 0x99, 0x39, 0x21, 0x68, 0x9d, 0x4b, 0xb7, 0xb7, 0x4e, 0x40,
  331. @@ -200,11 +202,12 @@ extern "C"
  332.       *pcbRecvLength = sizeof r;
  333.       break;
  334.     }
  335. -      case 0x32:
  336. +      case 0x32: // 0011-0815-2157-4460-1792
  337.     {
  338. +     static const
  339.       BYTE r[] = {
  340. -       0x00, 0x0f, 0x00, 0x00, 0x21, 0x00, 0x01, 0x54, 0x02, 0x00, 0x00,
  341. -       0x00, 0x00, 0x00, 0x00, 0x00,
  342. +       0x00, 0x0f, 0x00, 0x00, 0x21, 0x00, 0x01, 0x54, 0x02, 0x01, 0x02,
  343. +       0x03, 0x04, 0x05, 0x06, 0x07,
  344.         0x00, 0x90, 0x00
  345.       };
  346.       memcpy (pbRecvBuffer, r, sizeof r);
  347. @@ -213,13 +216,14 @@ extern "C"
  348.     }
  349.        case 0x34:
  350.     {
  351. +     static const
  352.       BYTE r[] = {
  353.         0x00, 0x15, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  354.         0x00, 0x00, 0x00, 0x00, 0x00,
  355.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00
  356.       };
  357. -     s32 rc = BCAS::Decoder::DecodeECM (pbSendBuffer + 5, pbSendBuffer[4], r + 6, NULL);
  358.       memcpy (pbRecvBuffer, r, sizeof r);
  359. +     s32 rc = BCAS::Decoder::DecodeECM (pbSendBuffer + 5, pbSendBuffer[4], pbRecvBuffer + 6, NULL);
  360.       if (rc == -2) {
  361.           pbRecvBuffer[4] = 0xa1;
  362.           pbRecvBuffer[5] = 0x03;
  363. @@ -233,6 +237,7 @@ extern "C"
  364.     }
  365.        default:
  366.     {
  367. +     static const
  368.       BYTE r[] = {
  369.         0x00, 0x04, 0x00, 0x00, 0xa1, 0xfe, 0x90, 0x00
  370.       };
  371. @@ -242,36 +247,17 @@ extern "C"
  372.     }
  373.        }
  374.  
  375. -    if (pbRecvBuffer)
  376. -      {
  377. -   // Response corrections
  378. -   // "Card ID Information Acquire Response"
  379. -   if (cbSendLength == 5 && pbSendBuffer[0] == 0x90
  380. -       && pbSendBuffer[1] == 0x32 && pbSendBuffer[2] == 0x00
  381. -       && pbSendBuffer[3] == 0x00 && pbSendBuffer[4] == 0x00)
  382. -     {
  383. -       // Empty "Card ID"
  384. -       if (*pcbRecvLength >= 19 && !pbRecvBuffer[9] && !pbRecvBuffer[10]
  385. -       && !pbRecvBuffer[11] && !pbRecvBuffer[12] && !pbRecvBuffer[13]
  386. -       && !pbRecvBuffer[14])
  387. -         {
  388. -       static const BYTE bCardID[6] = { 1, 2, 3, 4, 5, 6 };
  389. -       ::CopyMemory (pbRecvBuffer + 9, bCardID, 6);
  390. -         }
  391. -     }
  392. -      }
  393. -
  394.      return SCARD_S_SUCCESS;
  395.    }
  396. -  LONG WINAPI SCardDisconnect_ (SCARDHANDLE, DWORD)
  397. +  LONG WINAPI SCardDisconnect (SCARDHANDLE, DWORD)
  398.    {
  399.      return SCARD_S_SUCCESS;
  400.    }
  401. -  LONG WINAPI SCardFreeMemory_ (SCARDCONTEXT, LPCVOID)
  402. +  LONG WINAPI SCardFreeMemory (SCARDCONTEXT, LPCVOID)
  403.    {
  404.      return SCARD_S_SUCCESS;
  405.    }
  406. -  LONG WINAPI SCardGetStatusChangeA_ (SCARDCONTEXT, DWORD dwTimeout,
  407. +  LONG WINAPI SCardGetStatusChangeA (SCARDCONTEXT, DWORD dwTimeout,
  408.                       LPSCARD_READERSTATEA rgReaderStates,
  409.                       DWORD)
  410.    {
  411. @@ -287,7 +273,7 @@ extern "C"
  412.      Sleep (dwTimeout);
  413.      return SCARD_E_TIMEOUT;
  414.    }
  415. -  LONG WINAPI SCardGetStatusChangeW_ (SCARDCONTEXT, DWORD dwTimeout,
  416. +  LONG WINAPI SCardGetStatusChangeW (SCARDCONTEXT, DWORD dwTimeout,
  417.                       LPSCARD_READERSTATEW rgReaderStates,
  418.                       DWORD)
  419.    {
  420. @@ -303,21 +289,21 @@ extern "C"
  421.      Sleep (dwTimeout);
  422.      return SCARD_E_TIMEOUT;
  423.    }
  424. -  LONG WINAPI SCardReleaseContext_ (SCARDCONTEXT)
  425. +  LONG WINAPI SCardReleaseContext (SCARDCONTEXT)
  426.    {
  427.      return SCARD_S_SUCCESS;
  428.    }
  429. -  LONG WINAPI SCardReconnect_ (SCARDHANDLE, DWORD, DWORD, DWORD,
  430. +  LONG WINAPI SCardReconnect (SCARDHANDLE, DWORD, DWORD, DWORD,
  431.                    LPDWORD pdwActiveProtocol)
  432.    {
  433.      *pdwActiveProtocol = SCARD_PROTOCOL_T1;
  434.      return SCARD_S_SUCCESS;
  435.    }
  436. -  LONG WINAPI SCardIsValidContext_ (SCARDCONTEXT hContext)
  437. +  LONG WINAPI SCardIsValidContext (SCARDCONTEXT hContext)
  438.    {
  439.      return hContext ? SCARD_S_SUCCESS : ERROR_INVALID_HANDLE;
  440.    }
  441. -  LONG WINAPI SCardStatusA_ (SCARDHANDLE hCard, LPSTR mszReaderNames,
  442. +  LONG WINAPI SCardStatusA (SCARDHANDLE hCard, LPSTR mszReaderNames,
  443.                  LPDWORD pcchReaderLen, LPDWORD pdwState,
  444.                  LPDWORD pdwProtocol, LPBYTE pbAtr,
  445.                  LPDWORD pcbAtrLen)
  446. @@ -343,7 +329,7 @@ extern "C"
  447.        }
  448.      return SCARD_S_SUCCESS;
  449.    }
  450. -  LONG WINAPI SCardStatusW_ (SCARDHANDLE hCard, LPWSTR mszReaderNames,
  451. +  LONG WINAPI SCardStatusW (SCARDHANDLE hCard, LPWSTR mszReaderNames,
  452.                  LPDWORD pcchReaderLen, LPDWORD pdwState,
  453.                  LPDWORD pdwProtocol, LPBYTE pbAtr,
  454.                  LPDWORD pcbAtrLen)
  455. @@ -369,16 +355,16 @@ extern "C"
  456.        }
  457.      return SCARD_S_SUCCESS;
  458.    }
  459. -  HANDLE WINAPI SCardAccessStartedEvent_ (void)
  460. +  HANDLE WINAPI SCardAccessStartedEvent (void)
  461.    {
  462.      return g_SCardStartedEvent_;
  463.    }
  464. -  void WINAPI SCardReleaseStartedEvent_ (void)
  465. +  void WINAPI SCardReleaseStartedEvent (void)
  466.    {
  467.    }
  468. -  LONG WINAPI SCardCancel_ (SCARDCONTEXT)
  469. +  LONG WINAPI SCardCancel (SCARDCONTEXT)
  470.    {
  471.      return SCARD_S_SUCCESS;
  472.    }
  473. -  SCARD_IO_REQUEST g_rgSCardT1Pci_;
  474. +  SCARD_IO_REQUEST g_rgSCardT1Pci;
  475.  }
  476. diff --git a/winscard.def b/winscard.def
  477. new file mode 100644
  478. --- /dev/null
  479. +++ b/winscard.def
  480. @@ -0,0 +1,21 @@
  481. +EXPORTS
  482. +  SCardEstablishContext
  483. +  SCardListReadersA
  484. +  SCardListReadersW
  485. +  SCardConnectA
  486. +  SCardConnectW
  487. +  SCardTransmit
  488. +  SCardDisconnect
  489. +  SCardFreeMemory
  490. +  SCardGetStatusChangeA
  491. +  SCardGetStatusChangeW
  492. +  SCardReleaseContext
  493. +  SCardReconnect
  494. +  SCardAccessStartedEvent
  495. +  SCardReleaseStartedEvent
  496. +  SCardCancel
  497. +  g_rgSCardT1Pci DATA
  498. +  SCardIsValidContext
  499. +  SCardStatusA
  500. +  SCardStatusW
  501. +
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement