OSDN Git Service

try Ajax-powered popup window of mp4 files on mode=list
[rec10/rec10-git.git] / b25-remote / BCasCard.h
1 // BcasCard.h: CBcasCard クラスのインターフェイス
2 //
3 //////////////////////////////////////////////////////////////////////
4
5 #pragma once
6
7
8 #include <memory>
9 #include <vector>
10 #include <string>
11 #include <winscard.h>
12
13
14 using std::vector;
15 using std::wstring;
16 using std::string;
17
18
19 // エラーコード
20 #define BCEC_NOERROR                    0x00000000UL    // エラーなし
21 #define BCEC_INTERNALERROR              0x00000001UL    // 内部エラー
22 #define BCEC_NOTESTABLISHED             0x00000002UL    // コンテキスト確立失敗
23 #define BCEC_NOCARDREADERS              0x00000003UL    // カードリーダがない
24 #define BCEC_ALREADYOPEN                0x00000004UL    // 既にオープン済み
25 #define BCEC_CARDOPENERROR              0x00000005UL    // カードオープン失敗
26 #define BCEC_CARDNOTOPEN                0x00000006UL    // カード未オープン
27 #define BCEC_TRANSMITERROR              0x00000007UL    // 通信エラー
28 #define BCEC_BADARGUMENT                0x00000008UL    // 引数が不正
29 #define BCEC_ECMREFUSED                 0x00000009UL    // ECM受付拒否
30
31
32 class CBcasCard
33 {
34 public:
35         CBcasCard();
36         ~CBcasCard();
37
38         const DWORD GetCardReaderNum(void) const;
39         LPCTSTR GetCardReaderName(const DWORD dwIndex = 0UL) const;
40
41         const bool OpenCard(LPCTSTR lpszReader = NULL);
42         void CloseCard(void);
43
44         const BYTE * GetBcasCardID(void);
45         const BYTE * GetInitialCbc(void);
46         const BYTE * GetSystemKey(void);
47         const BYTE * GetKsFromEcm(const BYTE *pEcmData, const DWORD dwEcmSize);
48
49         const DWORD GetLastError(void) const;
50
51 protected:
52         const bool EnumCardReader(void);
53         const bool TransmitCommand(const BYTE *pSendData, const DWORD dwSendSize, BYTE *pRecvData, const DWORD dwMaxRecv, DWORD *pdwRecvSize = NULL);
54         const bool InitialSetting(void);
55
56         SCARDCONTEXT m_ScardContext;
57         SCARDHANDLE m_hBcasCard;
58
59         bool m_bIsEstablish;
60
61 #ifdef _UNICODE 
62         vector<wstring> m_CardReaderArray;
63 #else
64         vector<string> m_CardReaderArray;
65 #endif
66
67         struct TAG_BCASCARDINFO
68         {
69                 BYTE BcasCardID[6];             // Card ID
70                 BYTE SystemKey[32];             // Descrambling system key
71                 BYTE InitialCbc[8];             // Descrambler CBC initial value
72         } m_BcasCardInfo;
73         
74         struct TAG_ECMSTATUS
75         {
76                 DWORD dwLastEcmSize;    // 最後に問い合わせのあったECMサイズ
77                 BYTE LastEcmData[256];  // 最後に問い合わせのあったECMデータ
78                 BYTE KsData[16];                // Ks Odd + Even        
79         } m_EcmStatus;
80         
81         DWORD m_dwLastError;
82
83 private:
84         const bool StoreEcmData(const BYTE *pEcmData, const DWORD dwEcmSize);
85 };