ObReferenceObjectByName蓝屏问题
来源:互联网 发布:邓老师c语言视频教程 编辑:程序博客网 时间:2024/05/16 07:03
在拖了几天,调了快一天之后,问题终于在新年的第一天解决,庆贺一下O(∩_∩)O~
在“北极星2003”的CSDN博客上看到说用ObReferenceObjectByName来输出驱动程序的基本信息,结果我去测试的时候无情的蓝屏了。找了好久,终于发现了原因所在。因为博客上的代码是C++,而ObReferenceObjectByName是NativeAPI,所以需要做一个声明,C++用了extern “C”,而我的是C语言,用了ifdef宏定义,忘了加extern了,结果导致了蓝屏。
用WinDbg调试的时候,已进入ObReferenceObjectByName函数,系统就崩溃了,根本无法继续调试。还好最后发现了问题的所在。下面把代码贴出来
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
#include <ntddk.h> // 注意对于NativeAPI的声明// C语言要加上extern// C++要加上extern "C"extern NTSTATUS ObReferenceObjectByName(IN PUNICODE_STRING ObjectPath,IN ULONG Attributes,IN PACCESS_STATE PassedAccessState OPTIONAL,IN ACCESS_MASK DesiredAccess OPTIONAL,IN POBJECT_TYPE ObjectType,IN KPROCESSOR_MODE AccessMode,IN OUT PVOID ParseContext OPTIONAL,OUT PVOID *ObjectPtr);extern POBJECT_TYPE *IoDeviceObjectType; // 卸载例程VOID DriverUnload(PDRIVER_OBJECT pDriverObject){DbgPrint("--------------------------------\n");} // 获取信息NTSTATUS GetInfo(){NTSTATUSstatus = STATUS_UNSUCCESSFUL;PDRIVER_OBJECTpTestObject = NULL;UNICODE_STRINGuniDriverName;WCHARDriverNameBuffer[] = L"\\Driver\\HelloDDK"; RtlInitUnicodeString(&uniDriverName, DriverNameBuffer);status = ObReferenceObjectByName(&uniDriverName,OBJ_CASE_INSENSITIVE,NULL,0,*IoDeviceObjectType,KernelMode,NULL,&pTestObject);if(!NT_SUCCESS(status)){DbgPrint("ObReferenceObjectByName Failure!\n");return status;} DbgPrint("Driver Name: %wZ\n", &uniDriverName);DbgPrint("Load Address: 0x%08X\n", pTestObject->DriverStart);DbgPrint("Driver Size: %d\n", pTestObject->DriverSize);DbgPrint("Driver Object: 0x%08X\n", pTestObject->DriverExtension->DriverObject);DbgPrint("FastIo Dispatch: 0x%08X\n", pTestObject->FastIoDispatch);DbgPrint("StartIo Entry: 0x%08X\n", pTestObject->DriverStartIo);DbgPrint("Add Device Entry:: 0x%08X\n", pTestObject->DriverExtension->AddDevice);DbgPrint("Unload Routine: 0x%08X\n", pTestObject->DriverUnload); ObDereferenceObject(pTestObject); return status;} NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegistryPath){NTSTATUS status;DbgPrint("--------------------------------\n");pDriverObject->DriverUnload = DriverUnload;;GetInfo(); return STATUS_SUCCESS;}
- ObReferenceObjectByName蓝屏问题
- 蓝屏问题
- ObReferenceObjectByName 函数
- ObReferenceObjectByName 函数
- 解决系统蓝屏问题
- windows蓝屏问题
- 关机蓝屏的问题
- 如何解决蓝屏问题
- 电脑蓝屏问题排查
- 电脑蓝屏问题
- 0x0000000A 蓝屏问题
- 笔记本电脑蓝屏问题处理
- Networx蓝屏问题
- 系统启动时蓝屏问题解释
- windows 蓝屏问题,及错误代码
- T400 装xp蓝屏问题
- proliant安装windows2003x64蓝屏问题
- proliant安装windows2003x64蓝屏问题
- Android如何防止apk程序被反编译
- jquery knockout
- 伪静态的介绍和配置
- Collapsing Margins
- Android APK反编译详解(附图)
- ObReferenceObjectByName蓝屏问题
- 黑马程序员_Java基础-02
- 笔记本搭建无线路由供iPad上网 笔记本共享wifi ,w7共享wifi,w8共享wifi
- htc手机截屏
- 我读《怪诞行为学2》(续)
- HDU2993——MAX Average Problem(斜率优化DP)
- SQL函数- exists函数【鸡蛋】
- 使用IIS发布WCF服务
- layout_weight占一半的屏幕