首页
社区
课程
招聘
[求助]驱动与应用程序通信
发表于: 2009-12-22 21:37 4019

[求助]驱动与应用程序通信

2009-12-22 21:37
4019
驱动
NTSTATUS ICOL(IN PDEVICE_OBJECT pDevObj,IN PIRP Irp)
{
	NTSTATUS status = STATUS_SUCCESS;
	PIO_STACK_LOCATION	irpStack;
	PVOID InputBuffer;
	PVOID OutputBuffer;
	ULONG InputBufferLength;
	ULONG OutputBufferLength;

	Irp->IoStatus.Status = status;
	irpStack=IoGetCurrentIrpStackLocation(Irp);
	Irp->IoStatus.Information=0;
	InputBuffer= OutputBuffer = Irp->AssociatedIrp.SystemBuffer;
    InputBufferLength = irpStack->Parameters.DeviceIoControl.InputBufferLength;
    OutputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength;

	switch (irpStack->Parameters.DeviceIoControl.IoControlCode)
	{
		case IOCTL_TS_PRONAME:
			DbgPrint((PCHAR)InputBuffer);
			RtlCopyMemory(OutputBuffer,InputBuffer,OutputBufferLength);
			Irp->IoStatus.Information=OutputBufferLength;
			break;
		default:
			status = STATUS_INVALID_PARAMETER;
			break;
	}
	IoCompleteRequest(Irp, IO_NO_INCREMENT);
	return status;
}


程序
var
junk:DWORD;
inData:array[0..1023] of char;
outData:array[0..1023] of char;
begin
  inData:='kiss';
  DeviceIoControl(hDev,2050,@inData,Length(inData) ,@outData,Length(outData),junk,nil);
  ShowMessage(outData);
end;


驱动能收到传进的的值,但是程序却拿不到返回值,也就是outData什么东西都没有,为什么,请各位大牛帮帮小菜

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
各位大哥帮帮忙啊
2009-12-23 10:14
0
雪    币: 206
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你是不是用的缓冲区模式呢?缓冲区模式,传入的地址和传出的地址是复用的,你这样写似乎会有问题。
2009-12-23 15:02
0
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个得看你IOCTL_TS_PRONAME是怎么定义的
2009-12-23 18:09
0
雪    币: 3
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
一个问题在多个地方发,不要这样刷屏啦,你在新手区的那个贴我说清楚了
2009-12-23 20:08
0
游客
登录 | 注册 方可回帖
返回
//