Ring0打开其他设备对象三种方式整理

1.通过ZwCreateFile打开其他设备的Handle,此函数只能得到句柄。ZwCreateFile与NtCreateFile区别在于NtCreateFile更加底层,ZwCreateFile是基于NtCreateFile的,但ZwCreateFile需要通过SSDT

 

2.通过IoGetDeviceObjectPointer打开其他设备,此函数得到PDEVICE_OBJECT,即设备的指针。

 

3.通过未公开函数ObReferenceObjectByName获取其他设备指针

 

IoGetDeviceObjectPointer和ObReferenceObjectByName在最后都需要调用ObDereferenceObject来释放设备指针,使设备引用计数加一,但IoGetDeviceObjectPointer会对目标设备对象发送,IRP_MJ_CREATE的IRP,IoGetDeviceObjectPointer除了获得设备对象指针,还获取了设备相关的文件对象句柄,最后释放文件对象句柄时,也会发送IRP_MJ_CLOSE的IRP。

posted @ 2015-06-25 15:16  银翼的魔术师  阅读(352)  评论(0编辑  收藏  举报