Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/softcas.vcxproj b/softcas.vcxproj
- --- a/softcas.vcxproj
- +++ b/softcas.vcxproj
- @@ -90,6 +90,7 @@
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Windows</SubSystem>
- <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
- + <ModuleDefinitionFile>winscard.def</ModuleDefinitionFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
- @@ -104,6 +105,7 @@
- <GenerateDebugInformation>true</GenerateDebugInformation>
- <SubSystem>Windows</SubSystem>
- <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
- + <ModuleDefinitionFile>winscard.def</ModuleDefinitionFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
- @@ -120,6 +122,7 @@
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
- + <ModuleDefinitionFile>winscard.def</ModuleDefinitionFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
- @@ -135,6 +138,7 @@
- <EnableCOMDATFolding>true</EnableCOMDATFolding>
- <OptimizeReferences>true</OptimizeReferences>
- <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
- + <ModuleDefinitionFile>winscard.def</ModuleDefinitionFile>
- </Link>
- </ItemDefinitionGroup>
- <ItemGroup>
- @@ -147,6 +151,9 @@
- <ClInclude Include="Keys.h" />
- <ClInclude Include="Keyset.h" />
- </ItemGroup>
- + <ItemGroup>
- + <None Include="winscard.def" />
- + </ItemGroup>
- <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
- <ImportGroup Label="ExtensionTargets">
- </ImportGroup>
- diff --git a/softcas.vcxproj.filters b/softcas.vcxproj.filters
- --- a/softcas.vcxproj.filters
- +++ b/softcas.vcxproj.filters
- @@ -36,4 +36,9 @@
- <Filter>Header Files</Filter>
- </ClInclude>
- </ItemGroup>
- + <ItemGroup>
- + <None Include="winscard.def">
- + <Filter>Source Files</Filter>
- + </None>
- + </ItemGroup>
- </Project>
- \ No newline at end of file
- diff --git a/winscard.cpp b/winscard.cpp
- --- a/winscard.cpp
- +++ b/winscard.cpp
- @@ -3,111 +3,113 @@
- // Keys.cpp, Keys.h, Keyset.cpp, Keyset.h
- // You should modify "Size" in Decoder-ECM.cpp l42 to "Size-3"
- -#include <Windows.h>
- +/*
- +[64bit]
- + x86_64-w64-mingw32-g++ -O2 -shared -o WinSCard.dll winscard.def winscard.cpp -lshlwapi
- +
- +[32bit]
- + i686-w64-mingw32-g++ -O2 -shared -o WinSCard.dll winscard.def winscard.cpp -lshlwapi -Wl,--enable-stdcall-fixup
- +*/
- +
- +#define g_rgSCardT0Pci _REMOVE_g_rgSCardT0Pci
- +#define g_rgSCardT1Pci _REMOVE_g_rgSCardT1Pci
- +#define g_rgSCardRawPci _REMOVE_g_rgSCardRawPci
- +#include <winscard.h>
- +#undef g_rgSCardT0Pci
- +#undef g_rgSCardT1Pci
- +#undef g_rgSCardRawPci
- +
- #include <stdio.h>
- +#include <ctype.h>
- #include <tchar.h>
- #define htons htons_
- #define ntohs ntohs_
- +#include <shlwapi.h>
- +#ifdef _MSC_VER
- +#pragma comment(lib, "shlwapi.lib")
- +#endif
- +#include <algorithm>
- #include "Crypto.cpp"
- #include "Decoder-ECM.cpp"
- //#include "Keys.cpp"
- #include "Keyset.cpp"
- -#ifdef _WIN64
- -#pragma comment(linker,"/EXPORT:SCardEstablishContext=SCardEstablishContext_")
- -#pragma comment(linker,"/EXPORT:SCardListReadersA=SCardListReadersA_")
- -#pragma comment(linker,"/EXPORT:SCardListReadersW=SCardListReadersW_")
- -#pragma comment(linker,"/EXPORT:SCardConnectA=SCardConnectA_")
- -#pragma comment(linker,"/EXPORT:SCardConnectW=SCardConnectW_")
- -#pragma comment(linker,"/EXPORT:SCardTransmit=SCardTransmit_")
- -#pragma comment(linker,"/EXPORT:SCardDisconnect=SCardDisconnect_")
- -#pragma comment(linker,"/EXPORT:SCardFreeMemory=SCardFreeMemory_")
- -#pragma comment(linker,"/EXPORT:SCardGetStatusChangeA=SCardGetStatusChangeA_")
- -#pragma comment(linker,"/EXPORT:SCardGetStatusChangeW=SCardGetStatusChangeW_")
- -#pragma comment(linker,"/EXPORT:SCardReleaseContext=SCardReleaseContext_")
- -#pragma comment(linker,"/EXPORT:SCardReconnect=SCardReconnect_")
- -#pragma comment(linker,"/EXPORT:SCardAccessStartedEvent=SCardAccessStartedEvent_")
- -#pragma comment(linker,"/EXPORT:SCardReleaseStartedEvent=SCardReleaseStartedEvent_")
- -#pragma comment(linker,"/EXPORT:SCardCancel=SCardCancel_")
- -#pragma comment(linker,"/EXPORT:g_rgSCardT1Pci=g_rgSCardT1Pci_")
- -#pragma comment(linker,"/EXPORT:SCardIsValidContext=SCardIsValidContext_")
- -#pragma comment(linker,"/EXPORT:SCardStatusA=SCardStatusA_")
- -#pragma comment(linker,"/EXPORT:SCardStatusW=SCardStatusW_")
- -#else
- -#pragma comment(linker,"/EXPORT:SCardEstablishContext=_SCardEstablishContext_@16")
- -#pragma comment(linker,"/EXPORT:SCardListReadersA=_SCardListReadersA_@16")
- -#pragma comment(linker,"/EXPORT:SCardListReadersW=_SCardListReadersW_@16")
- -#pragma comment(linker,"/EXPORT:SCardConnectA=_SCardConnectA_@24")
- -#pragma comment(linker,"/EXPORT:SCardConnectW=_SCardConnectW_@24")
- -#pragma comment(linker,"/EXPORT:SCardTransmit=_SCardTransmit_@28")
- -#pragma comment(linker,"/EXPORT:SCardDisconnect=_SCardDisconnect_@8")
- -#pragma comment(linker,"/EXPORT:SCardFreeMemory=_SCardFreeMemory_@8")
- -#pragma comment(linker,"/EXPORT:SCardGetStatusChangeA=_SCardGetStatusChangeA_@16")
- -#pragma comment(linker,"/EXPORT:SCardGetStatusChangeW=_SCardGetStatusChangeW_@16")
- -#pragma comment(linker,"/EXPORT:SCardReleaseContext=_SCardReleaseContext_@4")
- -#pragma comment(linker,"/EXPORT:SCardReconnect=_SCardReconnect_@20")
- -#pragma comment(linker,"/EXPORT:SCardAccessStartedEvent=_SCardAccessStartedEvent_@0")
- -#pragma comment(linker,"/EXPORT:SCardReleaseStartedEvent=_SCardReleaseStartedEvent_@0")
- -#pragma comment(linker,"/EXPORT:SCardCancel=_SCardCancel_@4")
- -#pragma comment(linker,"/EXPORT:g_rgSCardT1Pci=_g_rgSCardT1Pci_")
- -#pragma comment(linker,"/EXPORT:SCardIsValidContext=_SCardIsValidContext_@4")
- -#pragma comment(linker,"/EXPORT:SCardStatusA=_SCardStatusA_@28")
- -#pragma comment(linker,"/EXPORT:SCardStatusW=_SCardStatusW_@28")
- -#endif
- static HANDLE g_SCardStartedEvent_ = NULL;
- static const INT DummyHandle = 0x35313239;
- static const CHAR READER_NAME_A[] = "@OishiiSlurper\0";
- static const WCHAR READER_NAME_W[] = L"@OishiiSlurper\0";
- -static HINSTANCE hModule;
- -
- -static void ProfileKeyset0(LPCTSTR ss, LPCTSTR ns, Key_t &k, LPCTSTR ini)
- -{
- - TCHAR szBuff[64] = _T("");
- - TCHAR d[64] = _T("");
- - u8 v[9];
- -
- - ::GetPrivateProfileString(ss, ns, _T("00 00 00 00 00 00 00 00 00"), szBuff, 64, ini);
- - _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]);
- - k.WorkKeyID = v[0];
- - memcpy(&k.Key[0], &v[1], 8);
- +
- +static bool PickupHex(u8 *out, int bytes, const TCHAR **pp) {
- + int n = 2 * bytes;
- + int i = 0;
- + u8 x = 0;
- + LPCTSTR p = *pp;
- +
- + while (*p && n > 0) {
- + int c = *p++;
- + if (!isxdigit(c))
- + continue;
- +
- + c |= 'a' - 'A'; /* to lower case */
- + c -= '0';
- + if (c > 9)
- + c -= 'a' - ('0' + 10);
- +
- + x <<= 4, x |= c;
- + out[i++ / 2] = x;
- +
- + n--;
- + }
- +
- + *pp = p;
- +
- + return n == 0;
- }
- -static void ProfileKeyset(LPCTSTR ss, LPCTSTR ini)
- +static bool ParseKey(Key_t *key, const TCHAR **pp)
- {
- - Keyset_t Keyset;
- - TCHAR szBuff[8] = _T("");
- - u8 v[1];
- + return PickupHex(&key->WorkKeyID, 1, pp) &&
- + PickupHex(&key->Key[0] , 8, pp);
- +}
- - ::GetPrivateProfileString(ss, _T("BID"), _T("00"), szBuff, 8, ini);
- - _stscanf_s(szBuff, _T("%hhx"),&v[0]);
- - Keyset.BroadcastGroupID = v[0];
- +static void ProfileKeyset(LPCTSTR ini, u8 bid)
- +{
- + TCHAR KeyName[16];
- + TCHAR Line[256];
- - ProfileKeyset0(ss, _T("KW0"), Keyset.Keys[0], ini);
- - ProfileKeyset0(ss, _T("KW1"), Keyset.Keys[1], ini);
- + _stprintf_s(KeyName, _T("kw%02x"), bid);
- + if (GetPrivateProfileString(_T("keys"), KeyName, _T(""), Line, _ARRAYSIZE(Line), ini) == 0)
- + return;
- +
- + Keyset_t Keyset;
- + Keyset.BroadcastGroupID = bid;
- +
- + const TCHAR *p = Line;
- + for (int i = 0; i < 2; i++) {
- + if (!ParseKey(&Keyset.Keys[i], &p))
- + return;
- + }
- +
- + const u8 even = Keyset.Keys[0].WorkKeyID;
- + const u8 odd = Keyset.Keys[1].WorkKeyID;
- + if (((odd ^ even) & 1) == 0)
- + return; // bad pair
- +
- + if ((even & 1) != 0)
- + std::swap(Keyset.Keys[0], Keyset.Keys[1]); // correct order
- BCAS::Keyset::Register (&Keyset);
- }
- -static void GetPrivateProfile()
- +static void GetPrivateProfile(HINSTANCE hModule)
- {
- - TCHAR szDllPath[_MAX_PATH] = _T("");
- - if(::GetModuleFileName(hModule, szDllPath, _MAX_PATH) == 0)
- + TCHAR szIniPath[_MAX_PATH];
- + if (GetModuleFileName(hModule, szIniPath, _ARRAYSIZE(szIniPath)) == 0)
- return;
- -
- - TCHAR szDrive[_MAX_DRIVE];
- - TCHAR szDir[_MAX_DIR];
- - TCHAR szFName[_MAX_FNAME];
- - _tsplitpath_s(szDllPath, szDrive, _MAX_DRIVE, szDir, _MAX_DIR, szFName, _MAX_FNAME, NULL, 0);
- + PathRemoveExtension(szIniPath);
- + PathAddExtension(szIniPath, _T(".ini"));
- - TCHAR szIniPath[_MAX_PATH] = _T("");
- - _tmakepath_s(szIniPath, _MAX_PATH, szDrive, szDir, szFName, _T("ini"));
- -
- - ProfileKeyset(_T("WOWOW"), szIniPath);
- - ProfileKeyset(_T("Star Channel HD"), szIniPath);
- - ProfileKeyset(_T("SkyPerfecTV E2 / 110CS"), szIniPath);
- - ProfileKeyset(_T("Safenet"), szIniPath);
- - ProfileKeyset(_T("NHK"), szIniPath);
- - ProfileKeyset(_T("Email"), szIniPath);
- - ProfileKeyset(_T("NHK_Email"), szIniPath);
- + for (u8 bid = 0; bid < 32; bid++)
- + ProfileKeyset(szIniPath, bid);
- }
- BOOL WINAPI
- @@ -119,8 +121,7 @@ DllMain (HINSTANCE hinstDLL, DWORD fdwRe
- g_SCardStartedEvent_ = CreateEvent (NULL, TRUE, TRUE, NULL);
- // ini
- - hModule = hinstDLL;
- - GetPrivateProfile();
- + GetPrivateProfile(hinstDLL);
- //BCAS::Keys::RegisterAll ();
- }
- @@ -134,13 +135,13 @@ DllMain (HINSTANCE hinstDLL, DWORD fdwRe
- extern "C"
- {
- - LONG WINAPI SCardEstablishContext_ (DWORD, LPCVOID, LPCVOID,
- + LONG WINAPI SCardEstablishContext (DWORD, LPCVOID, LPCVOID,
- LPSCARDCONTEXT phContext)
- {
- *phContext = (SCARDCONTEXT) DummyHandle;
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardListReadersA_ (SCARDCONTEXT, LPCTSTR, LPSTR mszReaders,
- + LONG WINAPI SCardListReadersA (SCARDCONTEXT, LPCSTR, LPSTR mszReaders,
- LPDWORD pcchReaders)
- {
- if (mszReaders)
- @@ -152,7 +153,7 @@ extern "C"
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardListReadersW_ (SCARDCONTEXT, LPCTSTR, LPWSTR mszReaders,
- + LONG WINAPI SCardListReadersW (SCARDCONTEXT, LPCWSTR, LPWSTR mszReaders,
- LPDWORD pcchReaders)
- {
- if (mszReaders)
- @@ -163,21 +164,21 @@ extern "C"
- *pcchReaders = sizeof (READER_NAME_W) / sizeof (READER_NAME_W[0]);
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardConnectA_ (SCARDCONTEXT, LPCTSTR, DWORD, DWORD,
- + LONG WINAPI SCardConnectA (SCARDCONTEXT, LPCSTR, DWORD, DWORD,
- LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)
- {
- *phCard = (SCARDHANDLE) DummyHandle;
- *pdwActiveProtocol = SCARD_PROTOCOL_T1;
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardConnectW_ (SCARDCONTEXT, LPCTSTR, DWORD, DWORD,
- + LONG WINAPI SCardConnectW (SCARDCONTEXT, LPCWSTR, DWORD, DWORD,
- LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol)
- {
- *phCard = (SCARDHANDLE) DummyHandle;
- *pdwActiveProtocol = SCARD_PROTOCOL_T1;
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardTransmit_ (SCARDHANDLE, LPCSCARD_IO_REQUEST,
- + LONG WINAPI SCardTransmit (SCARDHANDLE, LPCSCARD_IO_REQUEST,
- LPCBYTE pbSendBuffer, DWORD cbSendLength,
- LPSCARD_IO_REQUEST, LPBYTE pbRecvBuffer,
- LPDWORD pcbRecvLength)
- @@ -186,9 +187,10 @@ extern "C"
- {
- case 0x30:
- {
- + static const
- BYTE r[] = {
- - 0x00, 0x39, 0x00, 0x00, 0x21, 0x00, 0x00, 0x05, 0xc0, 0xff, 0xee,
- - 0xc0, 0xff, 0xee, 0x01, 0x50,
- + 0x00, 0x39, 0x00, 0x00, 0x21, 0x00, 0x00, 0x05, 0x01, 0x02, 0x03,
- + 0x04, 0x05, 0x06, 0x01, 0x50,
- 0x36, 0x31, 0x04, 0x66, 0x4b, 0x17, 0xea, 0x5c, 0x32, 0xdf, 0x9c,
- 0xf5, 0xc4, 0xc3, 0x6c, 0x1b,
- 0xec, 0x99, 0x39, 0x21, 0x68, 0x9d, 0x4b, 0xb7, 0xb7, 0x4e, 0x40,
- @@ -200,11 +202,12 @@ extern "C"
- *pcbRecvLength = sizeof r;
- break;
- }
- - case 0x32:
- + case 0x32: // 0011-0815-2157-4460-1792
- {
- + static const
- BYTE r[] = {
- - 0x00, 0x0f, 0x00, 0x00, 0x21, 0x00, 0x01, 0x54, 0x02, 0x00, 0x00,
- - 0x00, 0x00, 0x00, 0x00, 0x00,
- + 0x00, 0x0f, 0x00, 0x00, 0x21, 0x00, 0x01, 0x54, 0x02, 0x01, 0x02,
- + 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x00, 0x90, 0x00
- };
- memcpy (pbRecvBuffer, r, sizeof r);
- @@ -213,13 +216,14 @@ extern "C"
- }
- case 0x34:
- {
- + static const
- BYTE r[] = {
- 0x00, 0x15, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x90, 0x00
- };
- - s32 rc = BCAS::Decoder::DecodeECM (pbSendBuffer + 5, pbSendBuffer[4], r + 6, NULL);
- memcpy (pbRecvBuffer, r, sizeof r);
- + s32 rc = BCAS::Decoder::DecodeECM (pbSendBuffer + 5, pbSendBuffer[4], pbRecvBuffer + 6, NULL);
- if (rc == -2) {
- pbRecvBuffer[4] = 0xa1;
- pbRecvBuffer[5] = 0x03;
- @@ -233,6 +237,7 @@ extern "C"
- }
- default:
- {
- + static const
- BYTE r[] = {
- 0x00, 0x04, 0x00, 0x00, 0xa1, 0xfe, 0x90, 0x00
- };
- @@ -242,36 +247,17 @@ extern "C"
- }
- }
- - if (pbRecvBuffer)
- - {
- - // Response corrections
- - // "Card ID Information Acquire Response"
- - if (cbSendLength == 5 && pbSendBuffer[0] == 0x90
- - && pbSendBuffer[1] == 0x32 && pbSendBuffer[2] == 0x00
- - && pbSendBuffer[3] == 0x00 && pbSendBuffer[4] == 0x00)
- - {
- - // Empty "Card ID"
- - if (*pcbRecvLength >= 19 && !pbRecvBuffer[9] && !pbRecvBuffer[10]
- - && !pbRecvBuffer[11] && !pbRecvBuffer[12] && !pbRecvBuffer[13]
- - && !pbRecvBuffer[14])
- - {
- - static const BYTE bCardID[6] = { 1, 2, 3, 4, 5, 6 };
- - ::CopyMemory (pbRecvBuffer + 9, bCardID, 6);
- - }
- - }
- - }
- -
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardDisconnect_ (SCARDHANDLE, DWORD)
- + LONG WINAPI SCardDisconnect (SCARDHANDLE, DWORD)
- {
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardFreeMemory_ (SCARDCONTEXT, LPCVOID)
- + LONG WINAPI SCardFreeMemory (SCARDCONTEXT, LPCVOID)
- {
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardGetStatusChangeA_ (SCARDCONTEXT, DWORD dwTimeout,
- + LONG WINAPI SCardGetStatusChangeA (SCARDCONTEXT, DWORD dwTimeout,
- LPSCARD_READERSTATEA rgReaderStates,
- DWORD)
- {
- @@ -287,7 +273,7 @@ extern "C"
- Sleep (dwTimeout);
- return SCARD_E_TIMEOUT;
- }
- - LONG WINAPI SCardGetStatusChangeW_ (SCARDCONTEXT, DWORD dwTimeout,
- + LONG WINAPI SCardGetStatusChangeW (SCARDCONTEXT, DWORD dwTimeout,
- LPSCARD_READERSTATEW rgReaderStates,
- DWORD)
- {
- @@ -303,21 +289,21 @@ extern "C"
- Sleep (dwTimeout);
- return SCARD_E_TIMEOUT;
- }
- - LONG WINAPI SCardReleaseContext_ (SCARDCONTEXT)
- + LONG WINAPI SCardReleaseContext (SCARDCONTEXT)
- {
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardReconnect_ (SCARDHANDLE, DWORD, DWORD, DWORD,
- + LONG WINAPI SCardReconnect (SCARDHANDLE, DWORD, DWORD, DWORD,
- LPDWORD pdwActiveProtocol)
- {
- *pdwActiveProtocol = SCARD_PROTOCOL_T1;
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardIsValidContext_ (SCARDCONTEXT hContext)
- + LONG WINAPI SCardIsValidContext (SCARDCONTEXT hContext)
- {
- return hContext ? SCARD_S_SUCCESS : ERROR_INVALID_HANDLE;
- }
- - LONG WINAPI SCardStatusA_ (SCARDHANDLE hCard, LPSTR mszReaderNames,
- + LONG WINAPI SCardStatusA (SCARDHANDLE hCard, LPSTR mszReaderNames,
- LPDWORD pcchReaderLen, LPDWORD pdwState,
- LPDWORD pdwProtocol, LPBYTE pbAtr,
- LPDWORD pcbAtrLen)
- @@ -343,7 +329,7 @@ extern "C"
- }
- return SCARD_S_SUCCESS;
- }
- - LONG WINAPI SCardStatusW_ (SCARDHANDLE hCard, LPWSTR mszReaderNames,
- + LONG WINAPI SCardStatusW (SCARDHANDLE hCard, LPWSTR mszReaderNames,
- LPDWORD pcchReaderLen, LPDWORD pdwState,
- LPDWORD pdwProtocol, LPBYTE pbAtr,
- LPDWORD pcbAtrLen)
- @@ -369,16 +355,16 @@ extern "C"
- }
- return SCARD_S_SUCCESS;
- }
- - HANDLE WINAPI SCardAccessStartedEvent_ (void)
- + HANDLE WINAPI SCardAccessStartedEvent (void)
- {
- return g_SCardStartedEvent_;
- }
- - void WINAPI SCardReleaseStartedEvent_ (void)
- + void WINAPI SCardReleaseStartedEvent (void)
- {
- }
- - LONG WINAPI SCardCancel_ (SCARDCONTEXT)
- + LONG WINAPI SCardCancel (SCARDCONTEXT)
- {
- return SCARD_S_SUCCESS;
- }
- - SCARD_IO_REQUEST g_rgSCardT1Pci_;
- + SCARD_IO_REQUEST g_rgSCardT1Pci;
- }
- diff --git a/winscard.def b/winscard.def
- new file mode 100644
- --- /dev/null
- +++ b/winscard.def
- @@ -0,0 +1,21 @@
- +EXPORTS
- + SCardEstablishContext
- + SCardListReadersA
- + SCardListReadersW
- + SCardConnectA
- + SCardConnectW
- + SCardTransmit
- + SCardDisconnect
- + SCardFreeMemory
- + SCardGetStatusChangeA
- + SCardGetStatusChangeW
- + SCardReleaseContext
- + SCardReconnect
- + SCardAccessStartedEvent
- + SCardReleaseStartedEvent
- + SCardCancel
- + g_rgSCardT1Pci DATA
- + SCardIsValidContext
- + SCardStatusA
- + SCardStatusW
- +
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement