Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
阅读:5280回复:9

我的驱动里面怎么使用QueryDosDevice函数

楼主#
更多 发布于:2008-01-10 17:30
不好意思,弄烦我了。
我开始以为不好用,但在驱动网上面搜了一下,发现很多人用QueryDosDevice这个函数的,就是没有说怎么用。
用MmGetSystemRoutineAddress取函数地址有问题,只能去kernel和hal里面定义的。

究竟怎么用,还请牛们赐教了。
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2008-01-11 09:21
不至于不管我吧,
起码说个可以替代的方法啊。
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
galaxay
驱动小牛
驱动小牛
  • 注册日期2004-11-29
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望129点
  • 贡献值0点
  • 好评度129点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-01-11 10:09
搞笑嗦,这是上层的API
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
地板#
发布于:2008-01-11 10:20
搞笑嗦。你说出ZwQueryVolumeInformationFile来呢。
我也知道他是上层的啊。
要不要代码,各位?代会呈上,新鲜得很。
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
地下室#
发布于:2008-01-11 13:20
直接传入设备名阿.不过有时机要求,很容易蓝掉
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
5楼#
发布于:2008-01-11 16:07
各位,我的实现函数如下,是用的ZwQuerySymbolicLinkObject函数。

NTSTATUS ZwMyQueryDosName(wchar_t chLable, wchar_t* strDosName, ULONG* ulSize)
{
    NTSTATUS status;
    UNICODE_STRING tarName;
    UNICODE_STRING symName;
    HANDLE hSymbol = NULL;
    OBJECT_ATTRIBUTES   objectAttributes;
    wchar_t strName[32];
    ULONG nLen = sizeof strName;
    int   bReAllocate = 0;

    try{
        RtlInitUnicodeString(&symName, L"\\??\\C:");
        symName.Buffer[4] = chLable;

        InitializeObjectAttributes( &objectAttributes, &symName,
            OBJ_CASE_INSENSITIVE, NULL, NULL );
        status = ZwOpenSymbolicLinkObject(&hSymbol, GENERIC_READ, &objectAttributes);
        if(!NT_SUCCESS(status))
            return status;

        RtlInitEmptyUnicodeString(&tarName, strName, sizeof strName);
        status = ZwQuerySymbolicLinkObject(hSymbol, &tarName, &nLen);
        if(!NT_SUCCESS(status)){

            if(STATUS_BUFFER_TOO_SMALL == status){

                if(*ulSize < nLen){
                    *ulSize = nLen;
                    return STATUS_BUFFER_TOO_SMALL;
                }

                bReAllocate = 1;
                tarName.Buffer = ExAllocatePool(NonPagedPool, nLen);
                if(NULL == tarName.Buffer)
                    return STATUS_INSUFFICIENT_RESOURCES;

                tarName.MaximumLength = (USHORT)nLen;
                status = ZwQuerySymbolicLinkObject(hSymbol, &tarName, &nLen);
            }
            
            if(!NT_SUCCESS(status)){
                return status;
            }

        }

        // Store the dos device name to input buffer.
        if(*ulSize <nLen){
            *ulSize = nLen;
            return STATUS_BUFFER_TOO_SMALL;
        }
        else{
            *ulSize = nLen;
            wcsncpy(strDosName, (const wchar_t*)tarName.Buffer, tarName.Length/sizeof(wchar_t));
        }
    }finally{
        if(0 != bReAllocate)
            ExFreePool(tarName.Buffer);
        if(NULL != hSymbol)
            ZwClose(hSymbol);
    }

    return status;
}
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-01-11 18:32
IoQueryFileDosDeviceName
RtlVolumeDeviceToDosName
ObQueryNameString
Mount Manger IOs
FSD IOs
...
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
Pegram
论坛版主
论坛版主
  • 注册日期2005-12-03
  • 最后登录2013-08-23
  • 粉丝13
  • 关注5
  • 积分1333分
  • 威望4717点
  • 贡献值1点
  • 好评度78点
  • 原创分0分
  • 专家分2分
7楼#
发布于:2008-01-12 07:12
OK, thanks rayYang2000.
Durig these functions, I have used IoVolumeDeviceToDosName, but got a strange result.
Total these functions should got the FILE_OBJECT object, looks not simple.
There must be mistakes when I use IoVolumeDeviceToDosName. I'll try again.
But ZwMyQueryDosName does operate.
《寒江独钓》与《竹林蹊径》的合作作者。精通USB开发,设计了CY001 USB驱动套件(http://bbs.driverdevelop.com/read.php?tid-119314.html)。
fancylf
驱动牛犊
驱动牛犊
  • 注册日期2007-07-29
  • 最后登录2016-06-21
  • 粉丝1
  • 关注0
  • 积分61分
  • 威望501点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2008-10-12 09:46
You can refer to filemon ,which may help you a lot!
znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
9楼#
发布于:2014-07-25 09:08
这个函数依然可以在minifilter下工作,只是有个小bug要改下,初始化的时候,那个常量放变量中,否则会导致系统错误:不能修改常量。
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
游客

返回顶部