VobFile.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:2k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. #pragma once
  2. #pragma warning(disable : 4200)
  3. #include <atlbase.h>
  4. #include <afxtempl.h>
  5. //#include <winioctl.h> // platform sdk
  6. #include "....includewinddkntddcdvd.h"
  7. class CDVDSession
  8. {
  9. protected:
  10. HANDLE m_hDrive;
  11. DVD_SESSION_ID m_session;
  12. bool BeginSession();
  13. void EndSession();
  14. BYTE m_SessionKey[5];
  15. bool Authenticate();
  16. BYTE m_DiscKey[6], m_TitleKey[6];
  17. bool GetDiscKey();
  18. bool GetTitleKey(int lba, BYTE* pKey);
  19. public:
  20. CDVDSession();
  21. virtual ~CDVDSession();
  22. bool Open(LPCTSTR path);
  23. void Close();
  24. operator HANDLE() {return m_hDrive;}
  25. operator DVD_SESSION_ID() {return m_session;}
  26. bool SendKey(DVD_KEY_TYPE KeyType, BYTE* pKeyData);
  27. bool ReadKey(DVD_KEY_TYPE KeyType, BYTE* pKeyData, int lba = 0);
  28. };
  29. class CLBAFile : private CFile
  30. {
  31. public:
  32. CLBAFile();
  33. virtual ~CLBAFile();
  34. bool IsOpen();
  35. bool Open(LPCTSTR path);
  36. void Close();
  37. int GetLength();
  38. int GetPosition();
  39. int Seek(int lba);
  40. bool Read(BYTE* buff);
  41. };
  42. class CVobFile : public CDVDSession
  43. {
  44. // all files
  45. typedef struct {CString fn; int size;} file_t;
  46. CArray<file_t> m_files;
  47. int m_iFile;
  48. int m_pos, m_size, m_offset;
  49. // currently opened file
  50. CLBAFile m_file;
  51. // attribs
  52. bool m_fDVD, m_fHasDiscKey, m_fHasTitleKey;
  53. public:
  54. CVobFile();
  55. virtual ~CVobFile();
  56. bool IsDVD();
  57. bool HasDiscKey(BYTE* key);
  58. bool HasTitleKey(BYTE* key);
  59. bool Open(CString fn, CList<CString>& files /* out */); // vts ifo
  60. bool Open(CList<CString>& files, int offset = -1); // vts vobs, video vob offset in lba
  61. void Close();
  62. int GetLength();
  63. int GetPosition();
  64. int Seek(int pos);
  65. bool Read(BYTE* buff);
  66. };