找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 10756|回复: 22

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

 火... [复制链接]

90

主题

473

回帖

2

精华

钻石会员

积分
3261
发表于 2010-8-9 00:32:43 | 显示全部楼层 |阅读模式
比如我想把100,用vb传给驱动中的一个变量IntVal

我已经在驱动中定义了变量
int IntVal;
未命名.jpg

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 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

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

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-8-9 11:05:12 | 显示全部楼层
本帖最后由 Tesla.Angela 于 2010-8-9 11:07 编辑

不是:
int IntVal;


而是:
long IntVal;


接收部分:
memcpy(&IntVal,输入缓冲区指针,4);

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

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

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-8-9 11:11:04 | 显示全部楼层
我的驱动模板里,输入缓冲区指针和输出缓冲区指针都是pIoBuffer。
也就是说写成:
memcpy(&IntVal,pIoBuffer,4);

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-9 18:59:48 | 显示全部楼层
memcpy(&IntVal,pIoBuffer,4);
的意思是从输入缓冲区里copy 四个字节到IntVal?

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-9 19:07:18 | 显示全部楼层
TA,你看看这样,能行吗?
你给修改一下吧,谢谢了


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


        DriverObject->DriverUnload = Unload;
        return STATUS_SUCCESS;
}

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 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

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-9 19:27:40 | 显示全部楼层
但是,蓝屏了

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-8-9 19:29:54 | 显示全部楼层
伟大的神啊。。。救救我这个无语的人吧。。。
这样肯定是不行的。。。
ok100fen,类似这样的问题你还是问问xiaoly99吧,他的空闲时间多。。。

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-9 19:49:33 | 显示全部楼层
加上这句就蓝
memcpy(&IntVal,pIoBuffer,4);


怎么办?

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 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若赞同鄙人言论,请回复.

评分

参与人数 2水晶币 +4 -1 收起 理由
ok100fen + 2 哈哈,谢谢,我不放弃啊
本网站最菜的人 + 2 -1 不要打击么~~~~~~

查看全部评分

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

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-9 20:01:18 | 显示全部楼层
TA啊,你能不能把你的那个驱动模板注释一下


谢谢啦

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-9 20:28:37 | 显示全部楼层
回复 12# 本网站最菜的人


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




谢谢你

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-8-9 22:55:07 | 显示全部楼层
回复 11# xiaoly99


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

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-8-9 22:55:29 | 显示全部楼层
回复 14# ok100fen


就是用来处理IOCTL的函数

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-8-9 22:58:12 | 显示全部楼层
回复 12# 本网站最菜的人


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

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-8-10 14:50:45 | 显示全部楼层
正式更名为Bound,原因:liangguochang的QQ的昵称叫"Lgc-Xiaoly".
Xiaoly和小力不值得膜拜,因为它们仅仅是已成为历史的名字而已.

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-8-10 16:01:23 | 显示全部楼层
正式更名为Bound,原因:liangguochang的QQ的昵称叫"Lgc-Xiaoly".
Xiaoly和小力不值得膜拜,因为它们仅仅是已 ...
xiaoly99 发表于 2010-8-10 14:50


那就膜拜Bound。

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-8-11 19:37:26 | 显示全部楼层
模糊了!

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-11 19:39:47 | 显示全部楼层
模糊了!
oopww 发表于 2010-8-11 19:37



    oopww兄弟,终于找到你了


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

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-8-26 09:55:57 | 显示全部楼层
看看TA的模块吧!
不要乱改东西··

90

主题

473

回帖

2

精华

钻石会员

积分
3261
 楼主| 发表于 2010-8-26 10:20:24 | 显示全部楼层
解决了·

谢谢
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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