当前位置: 代码迷 >> 驱动开发 >> DriverStudio开发IRP_MJ_DEVICE_CONTROL的routine时设置OutBuffer的有关问题
  详细解决方案

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

热度:46   发布时间:2016-04-28 11:11:55.0
DriverStudio开发IRP_MJ_DEVICE_CONTROL的routine时设置OutBuffer的问题
请问,我在写自定义的某个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;
}


------解决方案--------------------
问一下楼主,你在安装完DriverStudio后,编译库文件时没出现,关于wdm.h文件的相关错误吗?
你用的是DriverStudio那个版本2.5,2.6,3.2??

------解决方案--------------------
帮顶