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。