软件实现加密光驱的几个问题

lzuzbb 2016-11-12 11:16:31
最近在跟进一个加密光驱的项目,我采用的是附加在CDROM.sys上一个上层过滤驱动,根据查阅的相关论文和浏览的相关论坛,我采取的是过滤IOCTL_SCSI_PASS_THROUGH_DIRECT这个IO控制码。具体的步骤如下:
(1)获取Irp->AssociatedIrp.SystemBuffer并强制类型转换为SCSI_PASS_THROUGH_DIRECT结构体类型
(2)SCSI_PASS_THROUGH_DIRECT结构体中包含成员CDB[16]
(3)如果CDB[0] == 0x2a,即WRITE信号,我们会将SCSI_PASS_THROUGH_DIRECT结构体成员DataBuffer做^(异或)加密操作。这里我发现有时候针对光盘的同一块LBA,WRITE命令会下发两次,为此我维持了一个LIST_ENTRY来记录已经加密的LBA,即针对同一块LBA的第二次WRITE命令,我会直接放过(IoSkipCurrentIrpStackLocation + IoCallDriver)。
(4)如果CDB[0] == 0x28,即READ信号,我也会维持一个LIST_ENTRY链表记录已经读取的LBA。如果是首次读一块LBA,则会建立相应的完成例程,在完成例程中对SCSI_PASS_THROUGH_DIRECT结构体成员DataBuffer进行解密^操作。如果是针对同一块LBA的第二次READ命令,则直接放过。
(5)针对其余的CDB操作码,一律直接放过。

运行我的过滤驱动代码,发现刻录过程中没有出现问题,可以顺利刻录完,但是刻录完成后打开光盘发现没有文件,但是在光盘的属性中可以发现确实存在一个文件,问题:我的整个处理方法或者说处理流程是否存在问题?是不是我在对同一块LBA第二次WRITE或者READ命令的处理上出了问题(即不应该直接放过)?,希望高手能给予一定的指点,非常感谢
...全文
579 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧