DriverStudio开发IRP_MJ_DEVICE_CONTROL的routine时设置OutBuffer的问题

sproll 2007-04-22 10:11:35
请问,我在写自定义的某个IRP_MJ_DEVICE_CONTROL的CODE的时候,采用了METHOD_BUFFERED的方式,发现设置不了输出缓冲中的内容。书上说BUFFERED方式输出缓冲与输入缓冲都是IO MANAGER分配的系统内存,传进来的时候是in buffer,传出动是out buffer,但是我改了这个缓冲中的数据,外部的SDK函数DeviceIoControl的调用结果显示out buffer内容没有被修改。请问如何才能成功完成对out buffer的存取操作?
代码如下,
NTSTATUS IoCtrlSmpDevice::IOCTL_BUFFER_IO_Handler(KIrp I)
{
T.Trace(TraceInfo, __FUNCTION__"++. IRP %p\n", I);

NTSTATUS status = STATUS_SUCCESS;

ULONG inputSize = I.IoctlInputBufferSize();
ULONG outputSize = I.IoctlOutputBufferSize();

PVOID inputBuffer = I.IoctlBuffer();
PVOID outputBuffer = I.IoctlBuffer();

if (FALSE)
{
status = STATUS_INVALID_PARAMETER;
I.Information() = 0;
}
else
{
if (inputSize == 4)
{
T.Trace(TraceInfo, "IOCTL_BUFFER_IO input: %d.\n", *(int*)I.IoctlBuffer());//输出in buffer的内容
(*(int*)I.IoctlBuffer())++;//out buffer加1
T.Trace(TraceInfo, "IOCTL_BUFFER_IO input: %d.\n", *(int*)I.IoctlBuffer());//输出out buffer的内容
}
else
{
T.Trace(TraceInfo, "IOCTL_BUFFER_IO input buffer size wrong: %d!\n", inputSize);
}

I.Information() = 0;
}

T.Trace(NT_SUCCESS(status)?TraceInfo:TraceWarning, __FUNCTION__"--. IRP %p, STATUS %x\n", I, status);

return status;
}
...全文
409 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
sproll 2007-05-02
  • 打赏
  • 举报
回复
管理页面显示已给分,这儿显示未给分,昏翻……
sproll 2007-05-02
  • 打赏
  • 举报
回复
没人回答,只好结贴了。
大不了偶只用DIRECT IO,谁怕谁啊!
DB_xiaogangpao 2007-04-28
  • 打赏
  • 举报
回复
帮顶
sproll 2007-04-27
  • 打赏
  • 举报
回复
没 有。先编译的3.2版本DS的库没问题
zhf_0468 2007-04-25
  • 打赏
  • 举报
回复
问一下楼主,你在安装完DriverStudio后,编译库文件时没出现,关于wdm.h文件的相关错误吗?
你用的是DriverStudio那个版本2.5,2.6,3.2??

21,594

社区成员

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

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