获取内核对象指针的一些方法

    技术2025-09-14  118

    ObReferenceObjectByHandle

    根据句柄获得对象指针,并且引用计数增加1,所以不用的时候需要调用ObDereferenceObject使对象引用计数减一

     

     

    句柄为 CreateProcess,CreateThread,CreateEvent等获取的内核对象句柄

    PKEVENT pEvent;//注意对象类型的一致

    ObReferenceObjectByHandle(hUserEvent,EVENT_MODIFY_STATE,*ExEventObjectType,KernelMode,(PVOID*)&pEvent,NULL);

     

     

    打开的设备也属于句柄,获取的对象是与之关联的文件对象

    PFILE_OBJECT FileObject;

    ObReferenceObjectByHandle(hDevice,EVENT_MODIFY_STATE,*ExEventObjectType,KernelMode,(PVOID*)&FileObject,NULL);

     

     

    ObReferenceObjectByPointer

    增加对象引用计数

     

     

    IoGetBaseFileSystemDeviceObjectIoGetRelatedDeviceObject

    根据文件对象指针获得设备对象指针,IoGetRelatedDeviceObject获取的是顶层设备对象的指针

     

     

    IoGetDeviceObjectPointer

    根据设备名获取文件对象指针,引用计数加一,需要调用ObDereferenceObject使文件对象引用计数减一

     

    会根绝设备名打开设备,并会创建IRP_MJ_CREATE传递到派遣函数中.可以获得设备对象指针和与设备关联的文件对象指针

    (没有对设备对象的引用计数加一)

     

     

     

     

    ObReferenceObjectByName

    非文档函数,根据对象名字获取对象指针,增加对象引用计数,需要调用ObDereferenceObject使对象引用计数减一

     

    使用的是对象名字,非符号链接名,使用符号链接,获得的是符号链接对象

     

     

    最新回复(0)