aaronjie
驱动牛犊
驱动牛犊
  • 注册日期2009-01-09
  • 最后登录2012-07-18
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望91点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1475回复:3

小弟初学,请教sfilter中不明白的地方!

楼主#
更多 发布于:2012-05-10 17:10
看sfilter,在DriverEntry函数里,首先创建了一个DeviceObject,这个是做什么用的?另外我看Filemon的源码并没有创建类似的DeviceObject,很不明白。
aaronjie
驱动牛犊
驱动牛犊
  • 注册日期2009-01-09
  • 最后登录2012-07-18
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望91点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2012-05-10 17:11
RtlInitUnicodeString( &nameString, L"\\FileSystem\\Filters\\SFilter" );

    status = IoCreateDevice( DriverObject,
                             0,                      //has no device extension
                             &nameString,
                             FILE_DEVICE_DISK_FILE_SYSTEM,
                             FILE_DEVICE_SECURE_OPEN,
                             FALSE,
                             &gSFilterControlDeviceObject );

    if (status == STATUS_OBJECT_PATH_NOT_FOUND) {

        //
        //  This must be a version of the OS that doesn't have the Filters
        //  path in its namespace.  This was added in Windows XP.
        //
        //  We will try just putting our control device object in the \FileSystem
        //  portion of the object name space.
        //

        RtlInitUnicodeString( &nameString, L"\\FileSystem\\SFilterCDO" );

        status = IoCreateDevice( DriverObject,
                                 0,                      //has no device extension
                                 &nameString,
                                 FILE_DEVICE_DISK_FILE_SYSTEM,
                                 FILE_DEVICE_SECURE_OPEN,
                                 FALSE,
                                 &gSFilterControlDeviceObject );

        if (!NT_SUCCESS( status )) {
          
            KdPrint(( "SFilter!DriverEntry: Error creating control device object \"%wZ\", status=%08x\n", &nameString, status ));
            return status;
        }
        
    }
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
板凳#
发布于:2012-05-15 07:07
这是控制设备对象(CDO),用于你的驱动和应用程序通讯。

任何io都需要一个设备,你的这个设备对象,就是用于应用程序向驱动发送命令用。
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
aaronjie
驱动牛犊
驱动牛犊
  • 注册日期2009-01-09
  • 最后登录2012-07-18
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望91点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2012-05-22 11:44
回 znsoft 的帖子
znsoft:这是控制设备对象(CDO),用于你的驱动和应用程序通讯。

任何io都需要一个设备,你的这个设备对象,就是用于应用程序向驱动发送命令用。
(2012-05-15 07:07)

哦,明白了,多谢前辈指点啊
游客

返回顶部