ok100fen 发表于 2010-8-9 00:32:43

我想用vb把一个数值,传递到驱动的一个变量中,怎么能做到?

比如我想把100,用vb传给驱动中的一个变量IntVal

我已经在驱动中定义了变量
int IntVal;

ok100fen 发表于 2010-8-9 00:45:03

Private Sub Command1_Click()
On Error Resume Next
Dim PID As Long, PIDpos As Long
PID = CLng(Text1.Text)
With DrvController
      Call .IoControl(.CTL_CODE_GEN(&H801), VarPtr(PID), 4, 0, 0)
End With
End Sub

这是发送的部分刚刚找到了,但是驱动接收的部分怎么写?

Tesla.Angela 发表于 2010-8-9 11:05:12

本帖最后由 Tesla.Angela 于 2010-8-9 11:07 编辑

不是:

int IntVal;


而是:

long IntVal;


接收部分:

memcpy(&IntVal,输入缓冲区指针,4);

IntVal=*(PLONG)输入缓冲区指针;

IntVal=*(long *)输入缓冲区指针;

Tesla.Angela 发表于 2010-8-9 11:11:04

我的驱动模板里,输入缓冲区指针和输出缓冲区指针都是pIoBuffer。
也就是说写成:
memcpy(&IntVal,pIoBuffer,4);

ok100fen 发表于 2010-8-9 18:59:48

memcpy(&IntVal,pIoBuffer,4);
的意思是从输入缓冲区里copy 四个字节到IntVal?

ok100fen 发表于 2010-8-9 19:07:18

TA,你看看这样,能行吗?
你给修改一下吧,谢谢了


#include <ntddk.h>
PVOID pIoBuffer;
ULONG IntVal;
VOID Unload(IN PDRIVER_OBJECT DriverObject)
{
}
NTSTATUSDriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)
{
          memcpy(&IntVal,pIoBuffer,4);
         DbgPrint("传入的值: %ld",IntVal);


        DriverObject->DriverUnload = Unload;
        return STATUS_SUCCESS;
}

ok100fen 发表于 2010-8-9 19:25:53

VB里的代码:


Dim c_drv As New cls_Driver

Private Sub cmdTerminate_Click()
    Dim pid As Long
    pid = Val(Text1.Text)
    Call c_drv.IoControl(c_drv.CTL_CODE_GEN(&H801), VarPtr(pid), 4, 0, 0)

   
End Sub

Private Sub Form_Load()
    With c_drv
      .szDrvFilePath = App.Path & "\ok100fen.sys"
      .szDrvLinkName = "ok100fen"
      .szDrvSvcName = "ok100fen"
      .szDrvDisplayName = "ok100fen"
      .InstDrv
      .StartDrv
      .OpenDrv
    End With
End Sub

Private Sub Form_Unload(Cancel As Integer)
    With c_drv
      .StopDrv
      .DelDrv
    End With
End Sub

ok100fen 发表于 2010-8-9 19:27:40

但是,蓝屏了

Tesla.Angela 发表于 2010-8-9 19:29:54

伟大的神啊。。。救救我这个无语的人吧。。。
这样肯定是不行的。。。
ok100fen,类似这样的问题你还是问问xiaoly99吧,他的空闲时间多。。。

ok100fen 发表于 2010-8-9 19:49:33

加上这句就蓝
memcpy(&IntVal,pIoBuffer,4);


怎么办?

xiaoly99 发表于 2010-8-9 19:53:01

1.在DriverEntry里......
2.默认PVOID是NULL的吧,等于RtlCopyMemory(&IntVal,0,4),你在VB里试VB都会崩溃......
3.ULONG的"IntVal",取这种变量名真是让人想骂......
4."%ld","%u"吧......
5.全局变量......“IntVal”做全局变量还行,pIoBuffer做全局变量......除非你像我当初学驱动,搞个ULONG RawLong = 1234,然后PVOID pIoBuffer = (PVOID)&RawLong,然后就可以像在DriverIoctl里一样处理了,不过这么做对于您太难了......
6."cmdTerminate_Click"看到这个,难道您是想做一个驱动结束进程吗?我劝您放弃这种想法,连这样都......您还是不要学驱动了吧......
Tesla.Angela若赞同鄙人言论,请回复.

本网站最菜的人 发表于 2010-8-9 20:00:42

ok100fen 发表于 2010-8-9 20:01:18

TA啊,你能不能把你的那个驱动模板注释一下


谢谢啦

ok100fen 发表于 2010-8-9 20:28:37

回复 12# 本网站最菜的人


兄弟,DispatchIoctl这是个什么函数?
我的msdn里没有




谢谢你

Tesla.Angela 发表于 2010-8-9 22:55:07

回复 11# xiaoly99


我无语,不过只是希望ok100fen花20天看完谭浩强的《C语言程序设计》再玩驱动。
另外,对新手要注意言辞,不要打击他们的自信心。

Tesla.Angela 发表于 2010-8-9 22:55:29

回复 14# ok100fen


就是用来处理IOCTL的函数

Tesla.Angela 发表于 2010-8-9 22:58:12

回复 12# 本网站最菜的人


以后我就免膜拜了,膜拜小力倒是真的。

xiaoly99 发表于 2010-8-10 14:50:45

正式更名为Bound,原因:liangguochang的QQ的昵称叫"Lgc-Xiaoly".
Xiaoly和小力不值得膜拜,因为它们仅仅是已成为历史的名字而已.

Tesla.Angela 发表于 2010-8-10 16:01:23

正式更名为Bound,原因:liangguochang的QQ的昵称叫"Lgc-Xiaoly".
Xiaoly和小力不值得膜拜,因为它们仅仅是已 ...
xiaoly99 发表于 2010-8-10 14:50 http://www.m5home.com/bbs/images/common/back.gif

那就膜拜Bound。

oopww 发表于 2010-8-11 19:37:26

模糊了!

ok100fen 发表于 2010-8-11 19:39:47

模糊了!
oopww 发表于 2010-8-11 19:37 http://www.m5home.com/bbs/images/common/back.gif


    oopww兄弟,终于找到你了


我在vbgood看到你,好像你已经解决了这个问题
介绍一下经验啊

oopww 发表于 2010-8-26 09:55:57

看看TA的模块吧!
不要乱改东西··

ok100fen 发表于 2010-8-26 10:20:24

解决了·

谢谢
页: [1]
查看完整版本: 我想用vb把一个数值,传递到驱动的一个变量中,怎么能做到?