OSDN Git Service

e79320312b35f7a8fd90426077fd1787754e9a97
[rec10/rec10-git.git] / b25-remote / BCasCard.h
1 // BcasCard.h: CBcasCard \83N\83\89\83X\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\r
2 //\r
3 //////////////////////////////////////////////////////////////////////\r
4 \r
5 #pragma once\r
6 \r
7
8 #include <memory>\r
9 #include <vector>\r
10 #include <string>\r
11 #include <winscard.h>\r
12 \r
13 \r
14 using std::vector;\r
15 using std::wstring;\r
16 using std::string;\r
17 \r
18 \r
19 // \83G\83\89\81[\83R\81[\83h\r
20 #define BCEC_NOERROR                    0x00000000UL    // \83G\83\89\81[\82È\82µ\r
21 #define BCEC_INTERNALERROR              0x00000001UL    // \93à\95\94\83G\83\89\81[\r
22 #define BCEC_NOTESTABLISHED             0x00000002UL    // \83R\83\93\83e\83L\83X\83g\8am\97§\8e¸\94s\r
23 #define BCEC_NOCARDREADERS              0x00000003UL    // \83J\81[\83h\83\8a\81[\83_\82ª\82È\82¢\r
24 #define BCEC_ALREADYOPEN                0x00000004UL    // \8aù\82É\83I\81[\83v\83\93\8dÏ\82Ý\r
25 #define BCEC_CARDOPENERROR              0x00000005UL    // \83J\81[\83h\83I\81[\83v\83\93\8e¸\94s\r
26 #define BCEC_CARDNOTOPEN                0x00000006UL    // \83J\81[\83h\96¢\83I\81[\83v\83\93\r
27 #define BCEC_TRANSMITERROR              0x00000007UL    // \92Ê\90M\83G\83\89\81[\r
28 #define BCEC_BADARGUMENT                0x00000008UL    // \88ø\90\94\82ª\95s\90³\r
29 #define BCEC_ECMREFUSED                 0x00000009UL    // ECM\8eó\95t\8b\91\94Û\r
30 \r
31 \r
32 class CBcasCard\r
33 {\r
34 public:\r
35         CBcasCard();\r
36         ~CBcasCard();\r
37 \r
38         const DWORD GetCardReaderNum(void) const;\r
39         LPCTSTR GetCardReaderName(const DWORD dwIndex = 0UL) const;\r
40 \r
41         const bool OpenCard(LPCTSTR lpszReader = NULL);\r
42         void CloseCard(void);\r
43 \r
44         const BYTE * GetBcasCardID(void);\r
45         const BYTE * GetInitialCbc(void);\r
46         const BYTE * GetSystemKey(void);\r
47         const BYTE * GetKsFromEcm(const BYTE *pEcmData, const DWORD dwEcmSize);\r
48 \r
49         const DWORD GetLastError(void) const;\r
50 \r
51 protected:\r
52         const bool EnumCardReader(void);\r
53         const bool TransmitCommand(const BYTE *pSendData, const DWORD dwSendSize, BYTE *pRecvData, const DWORD dwMaxRecv, DWORD *pdwRecvSize = NULL);\r
54         const bool InitialSetting(void);\r
55 \r
56         SCARDCONTEXT m_ScardContext;\r
57         SCARDHANDLE m_hBcasCard;\r
58 \r
59         bool m_bIsEstablish;\r
60 \r
61 #ifdef _UNICODE \r
62         vector<wstring> m_CardReaderArray;\r
63 #else\r
64         vector<string> m_CardReaderArray;\r
65 #endif\r
66 \r
67         struct TAG_BCASCARDINFO\r
68         {\r
69                 BYTE BcasCardID[6];             // Card ID\r
70                 BYTE SystemKey[32];             // Descrambling system key\r
71                 BYTE InitialCbc[8];             // Descrambler CBC initial value\r
72         } m_BcasCardInfo;\r
73         \r
74         struct TAG_ECMSTATUS\r
75         {\r
76                 DWORD dwLastEcmSize;    // \8dÅ\8cã\82É\96â\82¢\8d\87\82í\82¹\82Ì\82 \82Á\82½ECM\83T\83C\83Y\r
77                 BYTE LastEcmData[256];  // \8dÅ\8cã\82É\96â\82¢\8d\87\82í\82¹\82Ì\82 \82Á\82½ECM\83f\81[\83^\r
78                 BYTE KsData[16];                // Ks Odd + Even        \r
79         } m_EcmStatus;\r
80         \r
81         DWORD m_dwLastError;\r
82 \r
83 private:\r
84         const bool StoreEcmData(const BYTE *pEcmData, const DWORD dwEcmSize);\r
85 };\r