根据句柄获得对象指针,并且引用计数增加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使对象引用计数减一
使用的是对象名字,非符号链接名,使用符号链接,获得的是符号链接对象