VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 449|回复: 3

[求助] 【第一次写驱动】编译没问题 就是安装失败 加载也失败

[复制链接]
27_avatar_middle
在线会员 2475344481 发表于 2018-9-8 21:08:40 | 显示全部楼层 |阅读模式
3驿站币
可以加载别人的驱动 就是自己的驱动加载不了

  1. #include <ntddk.h>

  2. VOID Unload(
  3.         PDRIVER_OBJECT DriverObject
  4. )
  5. {
  6.         UNICODE_STRING usSymName;
  7.         RtlInitUnicodeString(&usSymName, L"\\??\\FirstDevice");
  8.        
  9.        
  10.         if (DriverObject->DeviceObject != NULL)
  11.         {
  12.                 IoDeleteSymbolicLink(&usSymName);
  13.                 IoDeleteDevice(DriverObject->DeviceObject);
  14.                 KdPrint(("dlete"));
  15.         }

  16. }
  17. NTSTATUS CreateDevice(PDRIVER_OBJECT DriverObject)
  18. {
  19.         NTSTATUS Status; //&#1524;&#812;
  20.         PDEVICE_OBJECT pDevObj;   //Device Object
  21.         UNICODE_STRING usDevName; //Device Name
  22.         UNICODE_STRING usSymName;//SymbolicLink Name
  23.         RtlInitUnicodeString(&usDevName,L"\\Device\\FirstDevice");   //Init Unicode_DeviceName
  24.         Status = IoCreateDevice(
  25.                 DriverObject,                     //DriverObject
  26.             NULL,  //DeviceExtensionSize
  27.                 &usDevName,                                     //DeviceName
  28.                 FILE_DEVICE_UNKNOWN,                 //DeviceType
  29.                 0,                                        //DeviceCharacteristics
  30.                 TRUE,                                    //Exclusive
  31.                 &pDevObj);                        //DeviceObject
  32.         if (!NT_SUCCESS(Status))
  33.         {
  34.                 return Status;
  35.         }
  36.         pDevObj->Flags |= DO_BUFFERED_IO;

  37.         RtlInitUnicodeString(&usSymName, L"\\??\\FirstDevice");

  38.         Status = IoCreateSymbolicLink(&usSymName, &usDevName);   //Create symbolicLink
  39.         if (!NT_SUCCESS(Status))
  40.         {
  41.                 IoDeleteDevice(pDevObj);   //delete Device
  42.         }

  43.         return Status;
  44. }
  45. NTSTATUS CreateCompleteRoutine(PDEVICE_OBJECT DriverObject, PIRP pIrp)
  46. {
  47.         NTSTATUS status;
  48.         status = STATUS_SUCCESS;
  49.         KdPrint(("Create"));
  50.         pIrp->IoStatus.Status = status;
  51.         pIrp->IoStatus.Information = 0;
  52.         IoCompleteRequest(pIrp, IO_NO_INCREMENT);
  53.         return STATUS_SUCCESS;
  54. }
  55. NTSTATUS CloseCompleteRoutine(PDEVICE_OBJECT DriverObject, PIRP pIrp)
  56. {
  57.         NTSTATUS status;
  58.         status = STATUS_SUCCESS;
  59.         KdPrint(("Close"));
  60.         pIrp->IoStatus.Status = status;
  61.         pIrp->IoStatus.Information = 0;
  62.         IoCompleteRequest(pIrp, IO_NO_INCREMENT);
  63.         return STATUS_SUCCESS;
  64. }
  65. NTSTATUS ReadCompleteRoutine(PDEVICE_OBJECT DriverObject, PIRP pIrp)
  66. {
  67.         NTSTATUS status;
  68.         status = STATUS_SUCCESS;
  69.         KdPrint(("Read"));
  70.         pIrp->IoStatus.Status = status;
  71.         pIrp->IoStatus.Information = 0;
  72.         IoCompleteRequest(pIrp, IO_NO_INCREMENT);
  73.         return STATUS_SUCCESS;
  74. }
  75. NTSTATUS WriteCompleteRoutine(PDEVICE_OBJECT DriverObject, PIRP pIrp)
  76. {
  77.         NTSTATUS status;
  78.         status = STATUS_SUCCESS;
  79.         KdPrint(("Write"));
  80.         pIrp->IoStatus.Status = status;
  81.         pIrp->IoStatus.Information = 0;
  82.         IoCompleteRequest(pIrp, IO_NO_INCREMENT);
  83.         return STATUS_SUCCESS;
  84. }

  85. NTSTATUS DriverEntry(PDRIVER_OBJECT  DriverObject,PUNICODE_STRING RegistryPath)
  86. {
  87.         NTSTATUS Status;
  88.         KdPrint(("Driver Entrence"));
  89.         Status = CreateDevice(DriverObject);
  90.         if (!NT_SUCCESS(Status))
  91.         {
  92.                 KdPrint(("Create Device Failed"));
  93.         }
  94.         else
  95.         {
  96.                 KdPrint(("Create Device success"));
  97.                 KdPrint(("&S", RegistryPath->Buffer));
  98.         }
  99.         DriverObject->MajorFunction[IRP_MJ_CREATE] = CreateCompleteRoutine;
  100.         DriverObject->MajorFunction[IRP_MJ_CLOSE] = CloseCompleteRoutine;
  101.         DriverObject->MajorFunction[IRP_MJ_READ] = ReadCompleteRoutine;
  102.         DriverObject->MajorFunction[IRP_MJ_WRITE] = WriteCompleteRoutine;
  103.         DriverObject->DriverUnload = Unload;
  104.         return STATUS_SUCCESS;
  105. }
复制代码


这是驱动的代码 麻烦大佬帮看下





上一篇:看不懂 输出
下一篇:内存释放原理

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-9-8 21:26:56 | 显示全部楼层
加些log输出,看看走到哪一步执行不下去了,这样能比较方便的发现问题和解决问题。
当然是用 debugview 这个工具也可以,还比较方便

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

27_avatar_middle
ico_lz  楼主| 2475344481 发表于 2018-9-11 02:28:03 | 显示全部楼层
Syc 发表于 2018-9-8 21:26
加些log输出,看看走到哪一步执行不下去了,这样能比较方便的发现问题和解决问题。
当然是用 debugview 这 ...

安装没失败 是在加载的时候失败了  之前用vs2013 wdk8.1完全都没事的 用Vs2015 wdk10就有问题了

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

97_avatar_middle
在线会员 gqwzllgzy 发表于 2018-9-11 11:10:56 | 显示全部楼层
加我一起研究  Q32318573

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-11-16 20:49

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表