5218|3

97

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

我要做一个光驱过滤驱动,如何禁用写打开操作? [复制链接]

如题,我想要写一个光驱过滤驱动,要实现的功能是禁止刻录光驱刻录光盘,本来我已经写好一个了,是在禁用IRP_MJ_WRITE,在这个IRP的派遣函数里将请求拒绝,这样就不会把数据刻录到光盘上了。

但是现在领导要求我判断是不是写打开,在写打开光驱时禁用。

我想知道这样做是否可行?
如果可行,怎么判断是写打开?

最新回复

楼主的光驱过滤做好了吗?期待。。。。  详情 回复 发表于 2010-6-2 16:53
点赞 关注

回复
举报

82

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
如何禁止刻录光驱刻录呢?

我在注册表{4D36E965-E325-11CE-BFC1-08002BE10318}这个位置挂载一个过滤驱动,
首先尝试禁用IRP_MJ_WRITE,失败。用Nero仍然可以将文件刻录到光盘上。

然后我用Dbgview发现,驱动不断进入IRP_MJ_SCSI,然后我在SCSI的派遣函数理禁用操作码为SCSIOP_WRITE的操作,重新测试,发现还是可以将文件刻录到光盘上。代码如下:
#pragma LOCKEDCODE
NTSTATUS DispatchForSCSI(IN PDEVICE_OBJECT fido, IN PIRP Irp)
{
    KdPrint((DRIVERNAME " - Enter DispatchForSCSI \n"));
        NTSTATUS status;
        PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fido->DeviceExtension;
        status = IoAcquireRemoveLock(&pdx->RemoveLock, Irp);
        if (!NT_SUCCESS(status))
            return CompleteRequest(Irp, status, 0);

    PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation( Irp );
        PSCSI_REQUEST_BLOCK CurSrb = irpStack->Parameters.Scsi.Srb;
        PCDB cdb = (PCDB)CurSrb->Cdb;
        UCHAR opCode = cdb->CDB6GENERIC.OperationCode;

        if(opCode == SCSIOP_WRITE)
        {
        KdPrint((DRIVERNAME " - OperationCode is SCSIOP_WRITE \n"));
                Irp->IoStatus.Status = STATUS_ACCESS_DENIED;
                Irp->IoStatus.Information = 0;
                IoCompleteRequest( Irp, IO_NO_INCREMENT );                               
                IoReleaseRemoveLock(&pdx->RemoveLock, Irp);
            return STATUS_ACCESS_DENIED;
        }

        IoSkipCurrentIrpStackLocation(Irp);
        status = IoCallDriver(pdx->LowerDeviceObject, Irp);
        IoReleaseRemoveLock(&pdx->RemoveLock, Irp);
    return status;
}

在上次刻录时我发现,刻录文件时,反复进入IRP_MJ_SCSI 和 IRP_MJ_DEVICE_CONTROL的派遣函数。
我想知道如何获取IRP_MJ_DEVICE_CONTROL的操作码?

还有,最重要的,有人做过相关的东西吗?该如何禁止刻录光驱刻录光盘?
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
没做过,不过LZ你分析的应该是对的
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼主的光驱过滤做好了吗?期待。。。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表