/[tivodecode]/tivocom/trunk/CTivoDecode.cpp
ViewVC logotype

Diff of /tivocom/trunk/CTivoDecode.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 253 by jeremyd2019, Fri Aug 31 05:27:21 2007 UTC revision 254 by jeremyd2019, Sun Sep 9 23:26:20 2007 UTC
# Line 4  Line 4 
4  #include "CTivoDecode.h"  #include "CTivoDecode.h"
5  #include "CTivoFile.h"  #include "CTivoFile.h"
6  #include "hasher.h"  #include "hasher.h"
7    #include "FileStream.h"
8    
9  namespace  namespace
10  {  {
# Line 90  STDMETHODIMP CTivoDecode::get_mak(BSTR* pVal) Line 91  STDMETHODIMP CTivoDecode::get_mak(BSTR* pVal)
91  {  {
92          try          try
93          {          {
                 CRegKey reg;  
94                  DataBlobRAII<void (WINAPI*)(LPVOID)> crypted_data (CoTaskMemFree);                  DataBlobRAII<void (WINAPI*)(LPVOID)> crypted_data (CoTaskMemFree);
95                  DataBlobRAII<HLOCAL (WINAPI*)(HLOCAL)> uncrypted_data (LocalFree);                  DataBlobRAII<HLOCAL (WINAPI*)(HLOCAL)> uncrypted_data (LocalFree);
96    
97                  _com_util::CheckError(AtlHresultFromWin32(                  try
98                          reg.Open(HKEY_CURRENT_USER, TIVO_SHARINGKEYS_REGKEY, KEY_READ)                  {
99                  ));                          CRegKey reg;
100                            _com_util::CheckError(AtlHresultFromWin32(
101                                    reg.Open(HKEY_CURRENT_USER, TIVO_SHARINGKEYS_REGKEY, KEY_READ)
102                            ));
103    
104                  _com_util::CheckError(AtlHresultFromWin32(                          _com_util::CheckError(AtlHresultFromWin32(
105                          reg.QueryBinaryValue(TIVO_MEDIAKEY_REGVALUE, NULL, &crypted_data.cbData)                                  reg.QueryBinaryValue(TIVO_MEDIAKEY_REGVALUE, NULL, &crypted_data.cbData)
106                  ));                          ));
107    
108                  crypted_data.pbData = (BYTE*)CoTaskMemAlloc(crypted_data.cbData);                          crypted_data.pbData = (BYTE*)CoTaskMemAlloc(crypted_data.cbData);
109    
110                  if (crypted_data.pbData == NULL)                          if (crypted_data.pbData == NULL)
111                          _com_raise_error(E_OUTOFMEMORY);                                  _com_raise_error(E_OUTOFMEMORY);
112    
113                  _com_util::CheckError(AtlHresultFromWin32(                          _com_util::CheckError(AtlHresultFromWin32(
114                          reg.QueryBinaryValue(TIVO_MEDIAKEY_REGVALUE, crypted_data.pbData, &crypted_data.cbData)                                  reg.QueryBinaryValue(TIVO_MEDIAKEY_REGVALUE, crypted_data.pbData, &crypted_data.cbData)
115                  ));                          ));
116                    }
117                    catch (const _com_error & ex)
118                    {
119                            if (ex.Error() == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
120                                    return Error(OLESTR("MAK not found"), GUID_NULL, ex.Error());
121                            else
122                                    throw;
123                    }
124    
125                  try                  try
126                  {                  {
# Line 249  STDMETHODIMP CTivoDecode::put_mak(BSTR newVal) Line 260  STDMETHODIMP CTivoDecode::put_mak(BSTR newVal)
260          return S_OK;          return S_OK;
261  }  }
262    
263  STDMETHODIMP CTivoDecode::OpenTivoFile(BSTR bstrFileName, ITivoFile** pTivoFile)  STDMETHODIMP CTivoDecode::OpenTivoFile(BSTR bstrFileName, BSTR bstrMAK, ITivoFile** pTivoFile)
264  {  {
265            try
266            {
267                    IStream * pFileStm;
268                    CComPtr<IStream> pStm;
269                    _com_util::CheckError(FileStream::OpenFile(OLE2CW(bstrFileName), &pFileStm, FALSE));
270                    pStm.Attach(pFileStm);
271                    _com_util::CheckError(this->OpenTivoStream(pStm, bstrMAK, pTivoFile));
272            }
273            catch (const _com_error & ex)
274            {
275                    return ex.Error();
276            }
277    
278            return S_OK;
279    }
280    
281    STDMETHODIMP CTivoDecode::OpenTivoStream(IStream* pStm, BSTR bstrMAK, ITivoFile** pTivoFile)
282    {
283          USES_CONVERSION;          USES_CONVERSION;
284          try          try
285          {          {
286                  CComObject<CTivoFile>* tivoFileClass = new CComObject<CTivoFile> ();                  CComObject<CTivoFile>* tivoFileClass = new CComObject<CTivoFile> ();
287                  CComPtr<ITivoFile> ref (tivoFileClass);                  CComPtr<ITivoFile> ref (tivoFileClass);
288                  CComBSTR mak;                  CComBSTR mak (bstrMAK);
289                  try                  if (mak == OLESTR(""))
290                  {                  {
291                            mak.Empty();
292                          _com_util::CheckError(this->get_mak(&mak));                          _com_util::CheckError(this->get_mak(&mak));
293                  }                  }
294                  catch (...)                  _com_util::CheckError(tivoFileClass->Init(mak, pStm));
                 {  
                         mak = "";  
                         /* nothing */  
                 }  
                 _com_util::CheckError(tivoFileClass->Init(OLE2CA(mak), bstrFileName));  
295                  _com_util::CheckError(ref.CopyTo(pTivoFile));                  _com_util::CheckError(ref.CopyTo(pTivoFile));
296          }          }
297          catch (const _com_error & ex)          catch (const _com_error & ex)

Legend:
Removed from v.253  
changed lines
  Added in v.254

cvs@jdrake.com
ViewVC Help
Powered by ViewVC 1.1.13