阅读:1588回复:5
求助:关于是否需要绑定CDO?
各位高手,我要做“文件系统过滤加密”的毕业设计,要求只是对特定的“C:”或者“D:”或者一个文件夹等实现过滤,那也应该是针对特定的FS喽!那我还有必要在生成新设备绑定要过滤的Volume之前绑定CDO吗?谢谢指点!
看到的帮忙,正郁闷呢~ |
|
|
沙发#
发布于:2007-04-28 19:39
cdo是用来让你的应用程序和你的驱动通讯用的,如果你没有应用程序,那可以不用
|
|
|
板凳#
发布于: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; } |
|
|
地板#
发布于:2007-04-29 14:05
如果你是要静态邦定(自己枚举盘符来邦定)的话,那就不需要以上这段代码,如果是要按照IFS新的邦定模式的话,那就需要上面这段代码。
上面这段代码的意思是邦定到文件系统设备上,然后再通过过滤IRP_MJ_FILE_SYSTEM_CONTROL来处理卷设备的 邦定。 |
|
|
地下室#
发布于:2007-04-29 16:43
恩恩,谢谢斑竹了哦~
文件系统设备和文件系统控制设备对象(CDO)不是一个意思的哈? ![]() |
|
|
5楼#
发布于:2007-04-30 13:06
引用第1楼znsoft于2007-04-28 21:39发表的“”: 人家说的是File System Control Device Object,相当于controller,负责产生各个FSD DO的。 |
|
|