应用层与驱动层通讯问题

zhlimisspy 2011-08-27 05:31:32
我应用层用DeviceIoControl传递一个结构体A到驱动层,驱动层用的DO_BUFFERED_IO方式,
但是Irp->AssociatedIrp.SystemBuffer的内容始终是0,pLocalStack->Parameters.DeviceIoControl.InputBufferLength的值又是结构体A的实际大小,我确定应用层在传递这个结构体的时候是有值的,请大伙帮忙解释解释。
...全文
224 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
船过水无痕 2011-08-30
  • 打赏
  • 举报
回复
贴代码吧 直接
zhlimisspy 2011-08-30
  • 打赏
  • 举报
回复
就是啊,很简单的一段代码,没什么问题啊,但是结果却不简单。
船过水无痕 2011-08-30
  • 打赏
  • 举报
回复
这段代码没看出有什么问题
woshi_ziyu 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhlimisspy 的回复:]

C/C++ code
// 结构体定义如下
typedef struct tagDISK_ITEM_INFO{
DWORD dwDevIndex;
WCHAR wszFilePath[260];
}DISK_ITEM_INFO, *PDISK_ITEM_INFO;


DISK_ITEM_INFO DiskItemInfo;
DiskItemInfo.dwDevIndex ……
[/Quote]
帮顶
zhlimisspy 2011-08-30
  • 打赏
  • 举报
回复
// 结构体定义如下
typedef struct tagDISK_ITEM_INFO{
DWORD dwDevIndex;
WCHAR wszFilePath[260];
}DISK_ITEM_INFO, *PDISK_ITEM_INFO;


DISK_ITEM_INFO DiskItemInfo;
DiskItemInfo.dwDevIndex = 1;
wcscpy(DiskItemInfo.wszFilePath, L"C:\\test.vfd");


// 传给驱动
DWORD dwBytesReturned;
DeviceIoControl(m_hDriver, IOCTRL_TEST, &DiskItemInfo, sizeof(DISK_ITEM_INFO), NULL, 0, &dwBytesReturned, NULL);


/* ---------------- 下面是驱动层 -------------- */
// 获取当前堆栈
PIO_STACK_LOCATION pLocalStack = IoGetCurrentIrpStackLocation(Irp);
// 获取输入缓冲区大小
ULONG dwInputBuffLen = pLocalStack->Parameters.DeviceIoControl.InputBufferLength;
// 获取输出缓冲区大小
ULONG dwOutputBuffLen = pLocalStack->Parameters.DeviceIoControl.OutputBufferLength;
// 获取控制码
ULONG dwCtrlCode = pLocalStack->Parameters.DeviceIoControl.IoControlCode;

DISK_ITEM_INFO* pDiskItemInfo = NULL;

switch ( dwCtrlCode )
{
case IOCTRL_TEST:
pDiskItemInfo = (DISK_ITEM_INFO*)Irp->AssociatedIrp.SystemBuffer; // 问题就在这里,pDiskItemInfo指向的内存地址值是0,dwInputBuffLen的值等于sizeof(DISK_ITEM_INFO)
break;
...
}
一介布衣萧萧 2011-08-29
  • 打赏
  • 举报
回复
DeviceIoControl传递结构体到驱动层??LZ搞错了吧,DeviceIoControl貌似只能根据输入的参数进行switch case操作。如果你要传递其他数据或结构体到驱动层,应该使用WriteFile的方式才对
shybrian 2011-08-29
  • 打赏
  • 举报
回复
楼主的做法是没问题的,但是最好能贴点代码。呵呵!
zhlimisspy 2011-08-29
  • 打赏
  • 举报
回复
没搞错啊,我就是想把一个结构体递到驱动层去。但是驱动层收到的buffer始终是空的

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧