qihuiling_0304
驱动牛犊
驱动牛犊
  • 注册日期2007-03-18
  • 最后登录2010-11-15
  • 粉丝0
  • 关注0
  • 积分662分
  • 威望68点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
阅读:1588回复:5

求助:关于是否需要绑定CDO?

楼主#
更多 发布于:2007-04-28 18:19
各位高手,我要做“文件系统过滤加密”的毕业设计,要求只是对特定的“C:”或者“D:”或者一个文件夹等实现过滤,那也应该是针对特定的FS喽!那我还有必要在生成新设备绑定要过滤的Volume之前绑定CDO吗?谢谢指点!

看到的帮忙,正郁闷呢~
~要有追求卓越的执著~
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
沙发#
发布于:2007-04-28 19:39
cdo是用来让你的应用程序和你的驱动通讯用的,如果你没有应用程序,那可以不用
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
qihuiling_0304
驱动牛犊
驱动牛犊
  • 注册日期2007-03-18
  • 最后登录2010-11-15
  • 粉丝0
  • 关注0
  • 积分662分
  • 威望68点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-04-29 09:58
那我看了楚狂人的第5节名字就叫“绑定FS CDO,文件系统识别器,设备扩展”。有这样的一段:
其中“生成新的设备,准备绑定目标设备”之前的那个函数是干什么用的哦?我不用吗?
NTSTATUS
SfAttachToFileSystemDevice (
IN PDEVICE_OBJECT DeviceObject,
IN PUNICODE_STRING DeviceName
)
{
PDEVICE_OBJECT newDeviceObject;
PSFILTER_DEVICE_EXTENSION devExt;
UNICODE_STRING fsrecName;
NTSTATUS status;
UNICODE_STRING fsName;
WCHAR tempNameBuffer[MAX_DEVNAME_LENGTH];
PAGED_CODE();
// 检查设备类型
if (!IS_DESIRED_DEVICE_TYPE(DeviceObject->DeviceType)) {
return STATUS_SUCCESS;
}
RtlInitEmptyUnicodeString( &fsName,
tempNameBuffer,
sizeof(tempNameBuffer) );
// 根据我们是否要绑定识别器
if (!FlagOn(SfDebug,SFDEBUG_ATTACH_TO_FSRECOGNIZER)) {
// 否则跳过识别器的绑定
RtlInitUnicodeString( &fsrecName, L"\\FileSystem\\Fs_Rec" );
SfGetObjectName( DeviceObject->DriverObject, &fsName );
if (RtlCompareUnicodeString( &fsName, &fsrecName, TRUE ) == 0) {
return STATUS_SUCCESS;
}
}
// 生成新的设备,准备绑定目标设备
status = IoCreateDevice( gSFilterDriverObject,
sizeof( SFILTER_DEVICE_EXTENSION ),
NULL,
DeviceObject->DeviceType,
0,
FALSE,
&newDeviceObject );
if (!NT_SUCCESS( status )) {
return status;
}
// 复制各种标志
if ( FlagOn( DeviceObject->Flags, DO_BUFFERED_IO )) {
SetFlag( newDeviceObject->Flags, DO_BUFFERED_IO );
}
if ( FlagOn( DeviceObject->Flags, DO_DIRECT_IO )) {
SetFlag( newDeviceObject->Flags, DO_DIRECT_IO );
}
if ( FlagOn( DeviceObject->Characteristics, FILE_DEVICE_SECURE_OPEN ) ) {
SetFlag( newDeviceObject->Characteristics, FILE_DEVICE_SECURE_OPEN );
}
devExt = newDeviceObject->DeviceExtension;
// 使用我们上一节提供的函数进行绑定
status = SfAttachDeviceToDeviceStack( newDeviceObject,
DeviceObject,
&devExt->AttachedToDeviceObject );
if (!NT_SUCCESS( status )) {
goto ErrorCleanupDevice;
}
// 记录设备名字
RtlInitEmptyUnicodeString( &devExt->DeviceName,
devExt->DeviceNameBuffer,
sizeof(devExt->DeviceNameBuffer) );
RtlCopyUnicodeString( &devExt->DeviceName, DeviceName );
ClearFlag( newDeviceObject->Flags, DO_DEVICE_INITIALIZING );
ErrorCleanupDevice:
IoDeleteDevice( newDeviceObject );
return status;
}
~要有追求卓越的执著~
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
地板#
发布于:2007-04-29 14:05
如果你是要静态邦定(自己枚举盘符来邦定)的话,那就不需要以上这段代码,如果是要按照IFS新的邦定模式的话,那就需要上面这段代码。
上面这段代码的意思是邦定到文件系统设备上,然后再通过过滤IRP_MJ_FILE_SYSTEM_CONTROL来处理卷设备的
邦定。
人总在矛盾中徘徊。。。
qihuiling_0304
驱动牛犊
驱动牛犊
  • 注册日期2007-03-18
  • 最后登录2010-11-15
  • 粉丝0
  • 关注0
  • 积分662分
  • 威望68点
  • 贡献值0点
  • 好评度66点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-04-29 16:43
恩恩,谢谢斑竹了哦~
文件系统设备和文件系统控制设备对象(CDO)不是一个意思的哈?
~要有追求卓越的执著~
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-04-30 13:06
引用第1楼znsoft2007-04-28 21:39发表的“”:
cdo是用来让你的应用程序和你的驱动通讯用的,如果你没有应用程序,那可以不用


人家说的是File System Control Device Object,相当于controller,负责产生各个FSD DO的。
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部