skh2006
驱动牛犊
驱动牛犊
  • 注册日期2008-03-15
  • 最后登录2008-04-29
  • 粉丝1
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:2614回复:4

IoCreateFileSpecifyDeviceObjectHint的疑问?

楼主#
更多 发布于:2008-03-31 12:35
minifilter里的post create,为了解决irp重入,使用了这个函数:IoCreateFileSpecifyDeviceObjectHint

代码如下:
  OBJECT_ATTRIBUTES ObjectAttributes;
    UNICODE_STRING ObjectName;
    WCHAR fileName[MAX_PATH] = L"\\??\\C:\\test.txt";

    RtlInitUnicodeString(&ObjectName, fileName);
    
    InitializeObjectAttributes(&ObjectAttributes,
        &ObjectName,
        OBJ_KERNEL_HANDLE,
        NULL,
        NULL
        );
    status = IoCreateFileSpecifyDeviceObjectHint(
                     &Handle,
                     FILE_READ_DATA,
                     &ObjectAttributes,
                     &IoStatus,
                     NULL,
                     FILE_ATTRIBUTE_NORMAL,
                     FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
                     FILE_OPEN,
                     FILE_NON_DIRECTORY_FILE,
                     NULL,
                     0,
                     CreateFileTypeNone,
                     NULL,
                     IO_IGNORE_SHARE_ACCESS_CHECK,
                     FltObjects->FileObject->DeviceObject->AttachedDevice );

但老是返回错误:
STATUS_INVALID_DEVICE_OBJECT_PARAMETER
STATUS_MOUNT_POINT_NOT_RESOLVED
STATUS_OBJECT_PATH_SYNTAX_BAD

真的很晕,三个错误都返回了,objectname应该没错,就是搞不清minifilter里到底该传给IoCreateFileSpecifyDeviceObjectHint哪个DeviceObject(最后一个参数)

而传入DeviceObject = IoGetRelatedDeviceObject( FltObjects->FileObject ); 时老是蓝屏。。

特向各位大虾请教!
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
沙发#
发布于:2008-03-31 13:06
在minifilter的世界里不要老是惦记着Legacy驱动里的东西,
FltCreateFile(Ex)完全替代IoCreateFileSpecifyDeviceObjectHint
人总在矛盾中徘徊。。。
skh2006
驱动牛犊
驱动牛犊
  • 注册日期2008-03-15
  • 最后登录2008-04-29
  • 粉丝1
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-03-31 15:27
赞devia  3Q~
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2008-03-31 16:37
IoCreateFileSpecifyDeviceObjectHint可以使用,因为FltCreateFile(Ex)其实也是调用这个函数,关键最后那个DEVICEOBJERCT不对,要用的话,建议你反汇编下FLTMGR,他把DEVICEOBJERCT封装他自己内部的一个结构里了,你也可以获得他,不过既然都帮你封好了,又何必自找麻烦呢???
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
skh2006
驱动牛犊
驱动牛犊
  • 注册日期2008-03-15
  • 最后登录2008-04-29
  • 粉丝1
  • 关注0
  • 积分290分
  • 威望30点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-03-31 19:28
谢谢wowocock的回复

xp下我用:
status = FltCreateFile( Globals.Filter,
        FltObjects->Instance,
        &Handle,
        FILE_READ_DATA,
        &ObjectAttributes,
        &IoStatus,
        NULL,
        FILE_ATTRIBUTE_NORMAL,
        FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
        FILE_OPEN,
        FILE_NON_DIRECTORY_FILE,
        NULL,
        0,
        IO_IGNORE_SHARE_ACCESS_CHECK);
现在已经解决问题了,没想到minifilter有这些专用的封装函数。
游客

返回顶部