能力值:
( LV12,RANK:210 )
|
-
-
2 楼
驱动那边可不可以使用s.pid 和s.name啊?我看是驱动和ring3下是公用内存空间,irp->AssociatedIrp.SystemBuffer取出来的是不是结构struct buffer s;
对通信不是很懂啊
|
能力值:
( 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
谁给段参考代码,或者思路?
|
能力值:
( LV6,RANK:80 )
|
-
-
4 楼
是结构,个人见解不一定对。
《windows驱动开发技术详解》书上所说的三种通信方式也许对你有帮助
|
能力值:
( LV12,RANK:210 )
|
-
-
5 楼
困扰我好久的问题啊
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
看%WINDDK%\src\general\ioctl\sys\sioctl.c里的例子啦,4种通信方式,
我觉得驱动里可以也定义下这个结构,然后Irp->AssociatedIrp.SystemBuffer就是传过来的这个结构的指针了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
应用层和驱动层 引用同一个.h文件 定义这些公共的数据结构
然后驱动接到 转换一下就可以了
毕竟传输的都是二进制。
结构仅仅是表现形式。
不过这种方法用来通信的话 效率很低。
建议用共享内存然后用内核事件来通知取数据。
|
能力值:
( 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 方式。
|
|
|