|
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;
}
|
|