• 获得FDO by name


        NTSTATUS            ntStatus = STATUS_SUCCESS;  
        PDEVICE_OBJECT  DeviceObject = NULL;  
        PFILE_OBJECT        FileObject = NULL;    
        ntStatus = IoGetDeviceObjectPointer(pObjectName,FILE_ALL_ACCESS,&FileObject,&DeviceObject);  
        if(!NT_SUCCESS(ntStatus))  
        {  
            KdPrint(("IoGetDeviceObjectPointer Failed,ntStatus = 0x%08lX\n",ntStatus));  
            goto _EXIT0_;  
        }  
        KdPrint(("IoGetDeviceObjectPointer succeed!\n"));  
     
        DeviceObject = IoGetLowerDeviceObject(DeviceObject);  
        if(!DeviceObject)  
        {  
            KdPrint(("IoGetLowerDeviceObject Failed,ntStatus = 0x%08lX!\n",ntStatus));  
            ntStatus = STATUS_UNSUCCESSFUL;  
            goto _EXIT1_;  
        }  
     
        while(!(DeviceObject->Flags & DO_BUS_ENUMERATED_DEVICE))  
        {  
            ObDereferenceObject(DeviceObject);  
            DeviceObject = IoGetLowerDeviceObject(DeviceObject);  
            if(!DeviceObject)  
            {  
                ObDereferenceObject(FileObject);  
                ntStatus = STATUS_UNSUCCESSFUL;  
                goto _EXIT1_;  
            }   
        }

    照例pdo设备都会在Flags中设置DO_BUS_ENUMERATED_DEVICE,这也是判断PDO和FDO的标准之一

    The IoGetLowerDeviceObject routine returns a pointer to the next-lower-level device object on the driver stack.

    Ntifs.h (include Ntifs.h)

    <= DISPATCH_LEVEL

  • 相关阅读:
    CentOS+Phpstudy安装Sqli-Labs
    机器学习中的偏差与方差
    DVWA学习之SQL注入
    【转】EDNS
    【转】个人总结-网络安全学习和CTF必不可少的一些网站
    信息安全书单
    全球信息安全会议 Top 50
    【转】Linux编程之UDP SOCKET全攻略
    网络协议栈学习之重要的数据结构
    网络协议栈学习(二)创建 socket
  • 原文地址:https://www.cnblogs.com/ahuo/p/2011449.html
Copyright © 2020-2023  润新知