首页
社区
课程
招聘
[求助]驱动通信
发表于: 2009-6-10 17:33 6910

[求助]驱动通信

2009-6-10 17:33
6910
我在ring3定义一个结构
struct  buffer
{
    ulong  pid;
   char name[16];
};
想把这个结构发送到驱动(驱动那边也有这个个定义),然后驱动在那边往里面填数据不知道可不可以?
struct buffer  s;

DeviceIoControl(hDevice,code,0,NULL,OutBuffer,OutBufferSize,&dwReturn,NULL);这个要怎么写呢?

我这边发送这个结构过去,驱动那边往里面填数据,然后我在取出来用,不知道可不可以?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
2
驱动那边可不可以使用s.pid 和s.name啊?我看是驱动和ring3下是公用内存空间,irp->AssociatedIrp.SystemBuffer取出来的是不是结构struct buffer s;
对通信不是很懂啊
2009-6-10 17:36
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
struct buffer      
{
        ULONG addr;            //进程对象指针,指向EPROCESS
        ULONG pid;             //进程PID
        UCHAR name[16];        //进程名
        UCHAR Path[256];      //进程全路径
        ULONG flag;           //进程隐藏标志,1表示隐藏,否则为0
};
r3定义下面的结构,r0往里面塞数据,然后发送出去这个buffer
谁给段参考代码,或者思路?
2009-6-10 17:52
0
雪    币: 107
活跃值: (1693)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
是结构,个人见解不一定对。
《windows驱动开发技术详解》书上所说的三种通信方式也许对你有帮助
2009-6-10 18:24
0
雪    币: 170
活跃值: (90)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
5
困扰我好久的问题啊
2009-6-10 19:38
0
雪    币: 125
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
看%WINDDK%\src\general\ioctl\sys\sioctl.c里的例子啦,4种通信方式,
我觉得驱动里可以也定义下这个结构,然后Irp->AssociatedIrp.SystemBuffer就是传过来的这个结构的指针了
2009-6-11 01:30
0
雪    币: 215
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
应用层和驱动层 引用同一个.h文件 定义这些公共的数据结构
然后驱动接到 转换一下就可以了
毕竟传输的都是二进制。
结构仅仅是表现形式。
不过这种方法用来通信的话 效率很低。
建议用共享内存然后用内核事件来通知取数据。
2009-6-12 09:42
0
雪    币: 362
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
typedef struct tagProcInfo
{
    DWORD  dwPId;
    char        name[16];
} PROC_INFO, *LPPROC_INFO;
#define  PROC_INFO_LEN  sizeof (PROC_INFO)

PROC_INFO  piInfo = {0} ;
DWORD        dwCode = ??? ;    // Init it.
DWORD        dwRet    = 0 ;
HANDLE        hDevice  = ??? ;   

DeviceIoControl (hDevice, dwCode , NULL, 0, piInfo, PROC_INFO_LEN, &dwRet, NULL) ;

最好使用  METHOD_BUFFERED  方式。
2009-6-12 14:26
0
游客
登录 | 注册 方可回帖
返回
//