首先,介绍一下问题的背景:我做的是一个播放器,能播放加密后的音视频文件,即这个播放器能对加密后的音视频文件自动解密并播放!且解密后的文件不能被用户所得到!即对这个视频文件起到一个内容保护作用!还有我用的是VC自带控件windows media player 9!    现在遇到的问题是:我在解密完音视频文件后,还得把它另存在特定的路径下,然后用windows media player控件类的SetUrl函数来播放该音视频文件!这样做解密后的文件就可以轻松的被用户得到了,就不能对原始文件进行保护了!     一些代码:
         CFile fileCoded("路径名",CFile::modeCreate|CFile::modeWrite);
fileCoded.Write(data,flen);//data是存储解密后的音视频文件的数据,flen是文件的长度
         fileCoded.Close();
        MediaPlay.SetUrl(“路径名”);    我想要问的问题是:    在写文件的时候,能不能不指定路径名或者说可以隐藏路径名,或者说能写到缓冲区里面而不直接写到硬盘上,这样用户就得不到原始文件了,就起到保护作用了!
     但这样就有一个矛盾,就是不指定路径名,后面的SetUrl函数没法打开音视频文件啊!请各位大侠指点一下,能不能想个两全其美的方法或新方案来同时解决这两个问题!

解决方案 »

  1.   

    1、你可以存放到系统的临时目录中,获取临时目录的API:GetTempPath。文件名可以随机生成,比如8位的字母数字组合。然后将音频文件写入。
    2、可以通过API Hook,将有关文件操作的API,如CreateFile、ReadFile、WriteFile重定向到内存中,也就是将文件内容写到内存中,读取也在内存中读取。