ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3857回复:25

关于过滤驱动程序

楼主#
更多 发布于:2002-04-02 09:19
因应用需要,我要为一个硬件厂商提供的驱动程序写一个过滤驱动程序,以便能够在系统核心层对其控制。但我从未写过类似程序,不知能否对任何驱动程序写过滤驱动,来截取发送给它的IRP?我用IoGetDevicePointer,想获得另一个驱动程序的设备对象的指针,但结果不对。获得的DeviceObject的属性与目标DeviceObject完全不符。哪位大侠开发过过滤驱动程序,请指点一二

最新喜欢:

xhzxlqtxhzxlq... IammeIamme
没有你,我不知道怎么办...
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-04-11 14:11
Re:Jame.z
-----------------------------------------------------
你那种情况,我认为IoAttachDevice函数可以帮你,我曾经试过,他在成功加载了设备并Attach后把目标设备的指针关掉(调用Close),你试试看,行不行,行了告诉大家一下~
-------------------------------------------------------
谢谢Jame.z,给我提了一个好idea。 我试过了,真的能够同时打开过滤驱动和应用程序。It\'s so fabulous!

我看了一下IoAttachDevice和IoAttachDeviceToDeviceStack的DDK文档,除了在调用上有区别之外,它们在功能方面的说明可以说完全一致。不知Jame.z兄知不知道这两个函数在实现上的差异?

问题解决了,希望大家都能通过我的案例得到提高。
没有你,我不知道怎么办...
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2002-04-11 11:36
你的目标设备类型是什么?
HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Class的对应CLSID下,在UPPERFILTER里加上你的SERVICE名就可以了.

这样一来,HOOK是由OS替你做的,REFERENCE不会增加.
但这种方式对FILTER的要求比较高.
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-04-11 11:07
你那种情况,我认为IoAttachDevice函数可以帮你,我曾经试过,他在成功加载了设备并Attach后把目标设备的指针关掉(调用Close),你试试看,行不行,行了告诉大家一下~
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-04-11 11:06
Congradulations !!!
Tom_lyd
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-04-11 10:59
我知道为什么我的过滤驱动和应用程序不能同时打开目标设备了。我用同样的名字写了一个目标设备的驱动,替换了原来的驱动程序,就能够同时启动过滤驱动和应用程序。若将创建目标设备的函数IoCreateDevice得倒数第二个参数BOOLEAN Exclusive改为TRUE,表示不允许多个线程同时打开该设备。结果出现了原来的那种现象,即过滤驱动和应用程序不能同时打开目标设备。我想,应该是这个原因了。
没有你,我不知道怎么办...
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-04-08 08:43
------------------------------------------------
我看不懂了
你不是要写过滤驱动吗?
不是先获得了目标设备的指针,又连接好了
不是已经可以过滤到IRP了吗?
怎么还用ZwCreateFile打开设备做什么???

另:你的这个厂商的设备是不是只能独占访问啊?
-------------------------------------------------
用ZwCreateFile是采用File monitor的做法,把目标设备当作一个文件对象来打开,也可以获得目标设备的指针,与IoGetDeviceObjectPointer效果相同。

另:你说的独占访问是什么意思?我怀疑它打开设备的时候是独占方式。这样我就一点办法没有了。:(


Re:TonyHuyan
----------------------------------------------------------
你怎么确信你的Filter已经Hook到该设备上?
Filter必须支持下层驱动的所有IRP_MJ_Functions,open失败,应该是你的IRP_MJ_CREATE有问题,对于启动下层驱动的IRP_MJ_CREATE,必须递下去(如何区分启动下层驱动还是启动你自己,参考File Monitor)。
----------------------------------------------
根据Art Baker的《Windows NT设备驱动程序设计指南》,我写了一个PassThrough, 将所有我没有重载的IRP命令,直接发给目标设备了。应该不是那个问题。

我相信我hook到目标设备上了,因为我的Filter启动之后,它的open函数失败了。我的驱动对它由直接的影响。

----------------------------------------
关于你前面的问题,没太明白你的意思,不过
一般在调用 IoGetDeviceObjectPointer 之后,
需要调用 ObReferenceObjectByPointer 以增加
其引用计数。

另: File Monitor 的做法是好的!
-----------------------------------------
我调用了。

另:为什么file monitor 的做法是好的?它和IoGetDeviceObjectPointer方法有什么不同?
没有你,我不知道怎么办...
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-04-07 01:57
to yavv:

关于你前面的问题,没太明白你的意思,不过
一般在调用 IoGetDeviceObjectPointer 之后,
需要调用 ObReferenceObjectByPointer 以增加
其引用计数。

另: File Monitor 的做法是好的!
写驱动不如买足彩!!
SharpShooter
驱动小牛
驱动小牛
  • 注册日期2002-04-07
  • 最后登录2013-07-05
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-04-07 01:49
多谢各位倾囊相助,我终于“先做下去再说了”,已经能够截获发到另一个驱动程序的IRP。“万里长征刚走完了第一步”

接下来要做的是为一个厂商提供的硬件驱动程序写过滤驱动,我已经hook到它的设备上,但不知道如何控制它。我用它提供的应用程序编程接口来调用它,本想发现接口关系。但出现了一个问题:如果先启动过滤驱动程序,它的open函数返回失败。但如果先调用open,成功,但过滤驱动程序的IoGetDeviceObjectPointer返回失败。这下我又被卡住了。

怎样才能既启动过滤驱动程序,又能用App编程函数调用它呢?这回跟MaskMode有关吗?我用了File_Share_Read, 不行。
 

你怎么确信你的Filter已经Hook到该设备上?
Filter必须支持下层驱动的所有IRP_MJ_Functions,open失败,应该是你的IRP_MJ_CREATE有问题,对于启动下层驱动的IRP_MJ_CREATE,必须递下去(如何区分启动下层驱动还是启动你自己,参考File Monitor)。
写驱动不如买足彩!!
Iamme
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2005-10-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-04-05 16:31
我看不懂了
你不是要写过滤驱动吗?
不是先获得了目标设备的指针,又连接好了
不是已经可以过滤到IRP了吗?
怎么还用ZwCreateFile打开设备做什么???

另:你的这个厂商的设备是不是只能独占访问啊?
Go,go ahead
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-04-04 15:25
-----------------------------------------------------
采用File monitor中的方法试试看,如下
1.ZwCreateFile打开到目标驱动程序的连接,返回设备句柄。在此之前要初始化一个OBJCT_ATTRIBUTES 结构变量。
2.将句柄转化为设备对象指针。ObReferenceObjectByHandle
3.IoGetRelatedObjectDevice得到可能的顶层过滤设备。(这里是你自己的设备对象,设备栈深度应该为1,即传入参数和返回应该为同一值)。
4.创建你的过滤设备对象,并挂接到设备栈。IoCreateDevice(),IoAttachDeviceToDeviceStack().

这样做,或许有用,至少可以试试。
----------------------------------------------------
Re:Tom_lyd

我试过了,和IoGetDeviceObjectPointer效果相同,没有改进。若我先调用应用程序的open函数,过滤驱动程序的ZwCreateFile返回STATUS_ACCESS_DENIED,若先启动过滤驱动程序,open函数失败。

Now, what should I do?
没有你,我不知道怎么办...
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-04-04 14:15
多谢大家,只可惜分太少了,不好意思。:(

我检查到了过滤驱动程序的一个bug,现在过滤我自己的另一个驱动程序,走a步骤能够成功,即1>. 先启动目标设备驱动程序
2>. 启动过滤驱动程序
3>. 应用程序获得目标设备的句柄

但是我对于厂家提供的驱动程序,启动过滤驱动程序后,它的open函数仍返回失败。应用程序和驱动程序获得设备的句柄或指针,是否是同一原理?能否讲讲理论上的关系?

Re: Tom_lyd

File monitor采用的方法和IoGetDeviceObjectPointer有什么不一样吗?不过我会试一试的。
没有你,我不知道怎么办...
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-04-04 08:36
这是Filemonitor中的挂接到目标驱动的源码,你可以参考一下。
相关源码:
BOOLEAN
HookDrive(
    IN ULONG Drive,
    IN PDRIVER_OBJECT DriverObject
    )
{
    IO_STATUS_BLOCK     ioStatus;
    HANDLE              ntFileHandle;  
    OBJECT_ATTRIBUTES   objectAttributes;
    PDEVICE_OBJECT      fileSysDevice; //lower device object
    PDEVICE_OBJECT      hookDevice; //our own device object
    UNICODE_STRING      fileNameUnicodeString;
    PFILE_FS_ATTRIBUTE_INFORMATION fileFsAttributes;
    ULONG               fileFsAttributesSize;
    WCHAR               filename[] = L\"\\\\DosDevices\\\\A:\\\\\"; //??shoule be link name or internal name ?
    NTSTATUS            ntStatus;
    ULONG               i;
    PFILE_OBJECT        fileObject;
    PDEVICE_EXTENSION   hookExtension;
    

fileFsAttributes;
    //----------------------------------------------------
    // Is it a legal drive letter?
    //----------------------------------------------------
    if( Drive >= 26 )  
{
        return FALSE;
    }

    //----------------------------------------------------
    // Has this drive already been hooked?
    //----------------------------------------------------
    if( DriveHookDevices[Drive] == NULL ) //have not been hooked
{
        //----------------------------------------------------
        // Frob the name to make it refer to the drive
//specified in the input parameter.
        //----------------------------------------------------
        filename[12] = (CHAR) (\'A\'+Drive);

        //-----------------------------------------------------
        // We have to figure out what device to hook
// first open the volume\'s root directory
        //----------------------------------------------------

        RtlInitUnicodeString( &fileNameUnicodeString, filename );
        InitializeObjectAttributes( &objectAttributes, &fileNameUnicodeString,
                                    OBJ_CASE_INSENSITIVE, NULL, NULL );
        ntStatus = ZwCreateFile( &ntFileHandle, //output file handle
SYNCHRONIZE|FILE_ANY_ACCESS,
&objectAttributes,
&ioStatus, //output status of result
NULL, //pallocate size
0, //file attributes
FILE_SHARE_READ|FILE_SHARE_WRITE, //share access
FILE_OPEN, //create disposition
FILE_SYNCHRONOUS_IO_NONALERT|FILE_DIRECTORY_FILE, //create options
NULL, //EA buffer
0
);
        if( !NT_SUCCESS( ntStatus ) )
{
            DbgPrint((\"Filemon: Could not open drive %c: %x\\n\", \'A\'+Drive, ntStatus ));
            return FALSE;
        }

        DbgPrint((\"Filemon:  opened the root directory!!! handle: %x\\n\", ntFileHandle));  

        //----------------------------------------------------------------------
        // Got the file handle, so now look-up the file-object it refers to
        //----------------------------------------------------------------------
        ntStatus = ObReferenceObjectByHandle( ntFileHandle,
FILE_READ_DATA,
NULL,
KernelMode,
&fileObject,
NULL
);
        if( !NT_SUCCESS( ntStatus ))
{
            DbgPrint((\"Filemon: Could not get fileobject from handle: %c\\n\", \'A\'+Drive ));
            ZwClose( ntFileHandle );
            return FALSE;
        }

        //  ----------------------------------------------------------------------
        // Next, find out what device is associated with the file object by
// getting its related device object
        //----------------------------------------------------------------------
        fileSysDevice = IoGetRelatedDeviceObject( fileObject );
        if( ! fileSysDevice )
{
            DbgPrint((\"Filemon: Could not get related device object: %c\\n\", \'A\'+Drive ));
            ObDereferenceObject( fileObject );
            ZwClose( ntFileHandle );
            return FALSE;
        }
        //----------------------------------------------------------------------  
        // Check the device list to see if we\'ve already attached to this
// particular device. This can happen when more than one drive letter is
// being handled by the same network redirecter
        //----------------------------------------------------------------------  
        for( i = 0; i < 26; i++ )
{
            if( DriveHookDevices == fileSysDevice )
{
                //----------------------------------------------------------------------
                // If we\'re already watching it, associate this drive letter
                // with the others that are handled by the same network driver. This
                // enables us to intelligently update the hooking menus when the user
                // specifies that one of the group should not be watched -we mark all
                // of the related drives as unwatched as well
                //----------------------------------------------------------------------
                ObDereferenceObject( fileObject );
                ZwClose( ntFileHandle );
                DriveHookDevices[ Drive ] = fileSysDevice; //share the same filteror
                return TRUE;
            }
        }

        //----------------------------------------------------------------------
        // The file system\'s device hasn\'t been hooked already, so make a
// hooking device  object that will be attached to it.
        //----------------------------------------------------------------------

        ntStatus = IoCreateDevice( DriverObject,
                                   sizeof(DEVICE_EXTENSION),
                                   NULL,
                                   fileSysDevice->DeviceType,
                                   0,
                                   FALSE, //not exclusive
                                   &hookDevice );
        if( !NT_SUCCESS(ntStatus) )
{
            DbgPrint((\"Filemon: failed to create associated device: %c\\n\", \'A\'+Drive ));  
            ObDereferenceObject( fileObject );
            ZwClose( ntFileHandle );
            return FALSE;
        }
        //----------------------------------------------------------------------
        //
        // Clear the initialize flag in device object\'s flag field
//
        //----------------------------------------------------------------------
        hookDevice->Flags &= ~DO_DEVICE_INITIALIZING;

        //----------------------------------------------------------------------
        // Setup the device extensions. The drive letter and file system
//  object are stored in the extension.
        //----------------------------------------------------------------------
        hookExtension = (PDEVICE_EXTENSION)hookDevice->DeviceExtension;
        hookExtension->LogicalDrive = \'A\'+Drive;
        hookExtension->FileSystem   = fileSysDevice;
        hookExtension->Hooked       = TRUE;
        hookExtension->Type         = STANDARD;

        //----------------------------------------------------------------------
        //
        // Attach my device object to the top level of target device object
//
        //----------------------------------------------------------------------
        ntStatus = IoAttachDeviceByPointer( hookDevice, fileSysDevice );
        if( !NT_SUCCESS(ntStatus) )  {

            //----------------------------------------------------------------------
            // Couldn\' attach for some reason
            //----------------------------------------------------------------------
            DbgPrint((\"Filemon: Connect with Filesystem failed: %c (%x) =>%x\\n\",
                      \'A\'+Drive, fileSysDevice, ntStatus ));

            //----------------------------------------------------------------------
            // Derefence the object and get out
            //----------------------------------------------------------------------
            ObDereferenceObject( fileObject );
            ZwClose( ntFileHandle );
            return FALSE;
        } else {
            //----------------------------------------------------------------------
            // Make a new drive group for the device,l if it does not have one
            // already
            //----------------------------------------------------------------------
            DbgPrint((\"Filemon: Successfully connected to Filesystem device %c\\n\", \'A\'+Drive ));
        }

        //----------------------------------------------------------------------
        // Determine if this is a NTFS drive
        //----------------------------------------------------------------------

        fileFsAttributesSize = sizeof( FILE_FS_ATTRIBUTE_INFORMATION) + MAXPATHLEN;
        hookExtension->FsAttributes =
(PFILE_FS_ATTRIBUTE_INFORMATION) ExAllocatePool(NonPagedPool,
fileFsAttributesSize
);
//------------------------------------------------------
// IoQueryVolumeInformation is documented in ifs kit
// it\'s prototype is declared in ntifs.h file
//------------------------------------------------------
        if( hookExtension->FsAttributes &&
            !NT_SUCCESS( IoQueryVolumeInformation( fileObject,
FileFsAttributeInformation,
fileFsAttributesSize,
hookExtension->FsAttributes,
       &fileFsAttributesSize
 )
 ))
{
            //---------------------------------------------------------------------------
            // On failure, we just don\'t have attributes for this file system
            //---------------------------------------------------------------------------
            ExFreePool( hookExtension->FsAttributes );
            hookExtension->FsAttributes = NULL;
        }

        //---------------------------------------------------------------------------
        // Close the file and update the hooked drive list by entering a
        // pointer to the hook device object in it.
        //---------------------------------------------------------------------------
        ObDereferenceObject( fileObject );

        ZwClose( ntFileHandle );

        DriveHookDevices[Drive] = hookDevice; //new created filteror
        
    } else { //If I have been hooked it,only confirm the Hooked flag in extension

        hookExtension = DriveHookDevices[Drive]->DeviceExtension;
        hookExtension->Hooked = TRUE;
    }
    return TRUE;
}
Tom_lyd
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-04-04 08:34
函数IoGetDeviceObjectPointer返回失败,有下面几种情况:

AccessMask为FILE_READ_DATA或FILE_READ_ACCESS
  a.
    1>. 先启动目标设备驱动程序
    2>. 启动过滤驱动程序
    3>. 应用程序试图获得目标设备的句柄,返回失败
  b.
    1> 启动目标设备驱动程序
    2> 应用程序获得目标设备的句柄
    3> 启动过滤驱动程序,IoGetDeviceObjectPointer返回失败,STATUS_SHARING_VIOLATION

若将AccessMask设为FILE_ANY_ACCESS,IoGetDeviceObjectPointer返回STATUS_INVALID_DEVICE_REQUEST

应该将AccessMask设为什么呢?


采用File monitor中的方法试试看,如下
    1.ZwCreateFile打开到目标驱动程序的连接,返回设备句柄。在此之前要初始化一个OBJCT_ATTRIBUTES 结构变量。
    2.将句柄转化为设备对象指针。ObReferenceObjectByHandle
    3.IoGetRelatedObjectDevice得到可能的顶层过滤设备。(这里是你自己的设备对象,设备栈深度应该为1,即传入参数和返回应该为同一值)。
    4.创建你的过滤设备对象,并挂接到设备栈。IoCreateDevice(),IoAttachDeviceToDeviceStack().

    这样做,或许有用,至少可以试试。
Best regards !
Tom_lyd
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-04-03 23:47
一般都是进行A的步骤,我觉得是你的过滤驱动程序有问题
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-04-03 21:48
函数IoGetDeviceObjectPointer返回失败,有下面几种情况:

AccessMask为FILE_READ_DATA或FILE_READ_ACCESS
  a.
    1>. 先启动目标设备驱动程序
    2>. 启动过滤驱动程序
    3>. 应用程序试图获得目标设备的句柄,返回失败
  b.
    1> 启动目标设备驱动程序
    2> 应用程序获得目标设备的句柄
    3> 启动过滤驱动程序,IoGetDeviceObjectPointer返回失败,STATUS_SHARING_VIOLATION

若将AccessMask设为FILE_ANY_ACCESS,IoGetDeviceObjectPointer返回STATUS_INVALID_DEVICE_REQUEST

应该将AccessMask设为什么呢?
没有你,我不知道怎么办...
Iamme
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2005-10-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-04-03 18:07
//如果先启动过滤驱动程序,它的open函数返回失败

一定是你的过滤驱动有问题
过滤驱动不应该影响到应用的
Go,go ahead
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-04-03 16:17
多谢各位倾囊相助,我终于“先做下去再说了”,已经能够截获发到另一个驱动程序的IRP。“万里长征刚走完了第一步”

接下来要做的是为一个厂商提供的硬件驱动程序写过滤驱动,我已经hook到它的设备上,但不知道如何控制它。我用它提供的应用程序编程接口来调用它,本想发现接口关系。但出现了一个问题:如果先启动过滤驱动程序,它的open函数返回失败。但如果先调用open,成功,但过滤驱动程序的IoGetDeviceObjectPointer返回失败。这下我又被卡住了。

怎样才能既启动过滤驱动程序,又能用App编程函数调用它呢?这回跟MaskMode有关吗?我用了File_Share_Read, 不行。
没有你,我不知道怎么办...
Iamme
驱动小牛
驱动小牛
  • 注册日期2001-03-23
  • 最后登录2005-10-11
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2002-04-03 09:46
1.能否对任何设备对象写过滤驱动程序来截取它的IRP包?
应该是这样的
2.IoGetDeviceObjectPointer得到的是否就是目标设备对象?
是的
3.得到目标设备对象后还有什么操作?
对于过滤驱动那肯定要用IoAttachDeviceToDeviceStack连接
到设备栈喽
然后就可以过滤到信息喽

另:跟maskmode应该没什么关系

你应该先做下去,先看看能不能达到你的目的再说
Go,go ahead
ymvv
驱动牛犊
驱动牛犊
  • 注册日期2001-11-30
  • 最后登录2005-05-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2002-04-03 08:59
sorry, email: ymvivian@sian.com
没有你,我不知道怎么办...
上一页
游客

返回顶部