找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 8587|回复: 10

换种方式,继续请教,谢谢

 火.. [复制链接]

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-8-10 22:00:43 | 显示全部楼层 |阅读模式
现在有个驱动代码,
没有错误,但是,怎么用VB,来与它通信?
麻烦那些大牛,给个VB代码
也就是说,如何根据驱动的参数来写VB的代码
我想领会一下驱动通信
谢谢大家



  1. #include "ntddk.h"
  2. #define IOCTL_TEST1 CTL_CODE(\
  3. FILE_DEVICE_UNKNOWN, \
  4. 0x800, \
  5. METHOD_BUFFERED, \
  6. FILE_ANY_ACCESS)
  7. VOID Unload(IN PDRIVER_OBJECT pDriverObject)
  8. {
  9. UNICODE_STRING symLinkName;
  10. RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDK");
  11. IoDeleteSymbolicLink(&symLinkName);
  12. IoDeleteDevice(pDriverObject->DeviceObject);
  13. KdPrint(("Device Delete Success\n"));
  14. }
  15. NTSTATUS MyDispatch(IN PDEVICE_OBJECT device,IN PIRP irp)
  16. {
  17. PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(irp);

  18. irp->IoStatus.Status = STATUS_SUCCESS;
  19. irp->IoStatus.Information = 0;

  20. if (stack->MajorFunction==IRP_MJ_CREATE)
  21. {
  22.   KdPrint(("IRP_MJ_CREATE\n"));
  23. }
  24. if (stack->MajorFunction==IRP_MJ_CLOSE)
  25. {
  26.   KdPrint(("IRP_MJ_CLOSE\n"));
  27. }

  28. IoCompleteRequest( irp, IO_NO_INCREMENT );

  29. return STATUS_SUCCESS;
  30. }
  31. NTSTATUS CreateDevice (
  32.         IN PDRIVER_OBJECT pDriverObject)
  33. {
  34. NTSTATUS status;
  35. PDEVICE_OBJECT pDevObj;

  36. //创建设备名称
  37. UNICODE_STRING devName;
  38. UNICODE_STRING symLinkName;

  39. RtlInitUnicodeString(&devName,L"\\Device\\MyDDKDevice");
  40. RtlInitUnicodeString(&symLinkName,L"\\??\\HelloDDK");

  41. //创建设备
  42. status = IoCreateDevice( pDriverObject,
  43.         0,
  44.         &devName,
  45.         FILE_DEVICE_UNKNOWN,
  46.         0, TRUE,
  47.         &pDevObj );
  48. if (!NT_SUCCESS(status))
  49. {
  50.   return status;
  51. }
  52. pDevObj->Flags |= DO_BUFFERED_IO;
  53. //创建符号链接

  54. status = IoCreateSymbolicLink( &symLinkName,&devName );
  55. if (!NT_SUCCESS(status))
  56. {
  57.   IoDeleteDevice( pDevObj );
  58.   return status;
  59. }
  60. return STATUS_SUCCESS;
  61. }
  62. NTSTATUS MyIOCTL(IN PDEVICE_OBJECT pDevObj,
  63.          IN PIRP pIrp)
  64. {
  65. NTSTATUS status = STATUS_SUCCESS;
  66. UCHAR* InputBuffer=NULL;
  67. ULONG i=0;
  68. //得到当前堆栈
  69. PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(pIrp);
  70. //得到输入缓冲区大小
  71. ULONG cbin = stack->Parameters.DeviceIoControl.InputBufferLength;
  72. //得到IOCTL码
  73. ULONG code = stack->Parameters.DeviceIoControl.IoControlCode;
  74. switch (code)
  75. {      // process request
  76.   case IOCTL_TEST1:
  77.   {
  78.    KdPrint(("IOCTL_TEST1\n"));
  79.    //缓冲区方式IOCTL
  80.    //显示输入缓冲区数据
  81.    InputBuffer = (UCHAR*)pIrp->AssociatedIrp.SystemBuffer;
  82.    for (i=0;i<cbin;i++)
  83.    {
  84.     KdPrint(("%X\n",InputBuffer[i]));
  85.    }
  86.    break;
  87.   }
  88.   default:
  89.    status = STATUS_INVALID_VARIANT;
  90. }
  91. // 完成IRP
  92. pIrp->IoStatus.Status = status;
  93. pIrp->IoStatus.Information = 0; // bytes xfered
  94. IoCompleteRequest( pIrp, IO_NO_INCREMENT );
  95. return status;
  96. }
  97. NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject,IN PUNICODE_STRING theRegistryPath)
  98. {
  99. pDriverObject->DriverUnload = Unload;

  100. pDriverObject->MajorFunction[IRP_MJ_CREATE] = MyDispatch;
  101. pDriverObject->MajorFunction[IRP_MJ_CLOSE] = MyDispatch;
  102. pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = MyIOCTL;
  103. CreateDevice(pDriverObject);
  104. return STATUS_SUCCESS;
复制代码

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-10 22:44:37 | 显示全部楼层
附上VB代码
希望小李同学给我改改

VB代码.rar

9.57 KB, 下载次数: 7427

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-8-10 22:55:12 | 显示全部楼层
我看xiaoly被你气糊涂了

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-10 23:09:22 | 显示全部楼层
呵呵,那就TA帮帮忙吧

向小李老师道歉~

俺太菜了~

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2010-8-10 23:57:45 | 显示全部楼层
这个我也不会,你还是用回我给你的模板吧。

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-11 00:02:17 | 显示全部楼层
模板的VB部分那句代码填写什么?

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-11 00:13:10 | 显示全部楼层
TA兄弟,
把你的那个模板的VB代码补上吧

还有,我以前用你提供的工具能成功编译你的那个模板
后来我有装了一个ddk,编译你的模板,就出错
不知道什么原因呢

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-8-11 19:56:49 | 显示全部楼层
你那个代码,用四个字来说,就是"垃圾代码".
你这个修改好的压缩包都要389KB,而我的Dew也只有247KB.
我已经修改好了,把完整的垃圾代码传上来.
还有,不是我打击OK大哥.您这份驱动代码应该不是您写的吧.您说过只提一个问题,现在不断的提问题,提问题,提了多少个问题?您却还是搞不懂Ioctl,连最起码的Ioctl Code都搞不懂.连字符串都......不说了,不然又要被某些"Zzzianses"说打击新手了.

MyDDKDevice-Scr.rar

389.95 KB, 下载次数: 10

售价: 1 水晶币  [记录]

变态的垃圾代码

评分

参与人数 1水晶币 +40 +40 收起 理由
Tesla.Angela + 40 + 40 给郁闷的小力加点分

查看全部评分

本网站最菜的人 该用户已被删除
发表于 2010-8-11 22:24:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-11 22:52:45 | 显示全部楼层
DbgPrint("输入缓冲数据内容:%u 输入缓冲数据长度:%u",*(PULONG)pIrp->AssociatedIrp.SystemBuffer,cbin);


红色的地方还是不明白怎么回事
呵呵,高手,解释一下
谢谢

1

主题

2

回帖

0

精华

初来乍到

积分
1
发表于 2010-8-19 10:22:23 | 显示全部楼层
谢谢xiaoly99 分享!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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