cccdq
驱动牛犊
驱动牛犊
  • 注册日期2006-03-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:2019回复:1

怪事,用IoGetDeviceObjectPointer会蓝屏死机是怎么回事

楼主#
更多 发布于:2007-06-16 23:34
我在任一个武安河的例子里加入获取设备对象的语句,在加载驱动的时候就会死机,是怎么回事啊,代码应该没有错啊,请各位大虾帮我看看。

NTSTATUS DMASample::AddDevice(PDEVICE_OBJECT Pdo)
{

    NTSTATUS    status = STATUS_SUCCESS;
    PUNICODE_STRING name = NULL;
    PFILE_OBJECT file = NULL;
    PDEVICE_OBJECT MyDevice = NULL;

    RtlInitUnicodeString(name,L"\\device\\COM1");

    status = IoGetDeviceObjectPointer ( name,                                       FILE_ALL_ACCESS,
                                        &file,
                                        &MyDevice);


......
                     ObDereferenceObject(file);
    return status;

把这段代码注释掉就好了,另外我应该什么时候调用ObDereferenceObject(file)呢,在AddDevice返回之前吗?
cccdq
驱动牛犊
驱动牛犊
  • 注册日期2006-03-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-29 17:25
查出来了,是字符串指针惹得祸,PUNICODE_STRING是一个指针类型,所以name变量没有取得内存空间就被赋值和使用了,当然会死机。改为
UNICODE_STRING name ;



RtlInitUnicodeString(&name,L"\\device\\COM1");
就好了
游客

返回顶部