zoukankan      html  css  js  c++  java
  • 获得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

  • 相关阅读:
    Spring学习8- SSH需要的jar包
    Spring学习8-SSH+Log4j黄金整合
    Spring学习8-Spring事务管理(注解式声明事务管理)
    dbvisualizer客户端执行创建存储过程或自定义函数语句的方法
    jvm的组成入门
    java的反射机制
    oracle排序子句的特殊写法与ORA-01785错误
    javascript的数据类型检测
    jsp的el表达式
    javascript模块化编程的cmd规范(sea.js)
  • 原文地址:https://www.cnblogs.com/ahuo/p/2011449.html
Copyright © 2011-2022 走看看