阅读:977回复:7
上层与驱动程序通讯
我是编写一用于通过上层应用程序DeviceIoControl(。。),将上层一缓冲区的内容传给下层。一直没有成功,请给我一示例,将不胜感激。
|
|
沙发#
发布于:2003-05-01 10:26
在ddk里面随便找一个例子就有
|
|
|
板凳#
发布于:2003-05-02 09:06
我按照ds中的例子作了一个测试程序,但还是死机。请帮忙指点。我已经苦了数天了。
程序的主要目的是,将上层的缓冲区中的内容传给驱动程序。 NTSTATUS DACSHJ1Device::DeviceControl(KIrp I) { NTSTATUS status; PVOID ioBuffer = I.IoctlBuffer(); ULONG ioInSize = I.IoctlInputBufferSize(); ULONG ioOutSize = I.IoctlOutputBufferSize(); I.Information() = 0; t << \"Entering DACSHJ1Device::Device Control, \" << I << EOL; switch (I.IoctlCode()) { case 0x00033://测试语句 { short int* pRead = (short int*)ioBuffer; if(*pRead==5)//测试是否是上层传下来的数据/////但死机 { t <<\"test ok\" << EOL; } status=1; } break; default://缺省情况下 // Unrecognized IOCTL request status = DACSHJ1_IOCTL_800_Handler(I); break; //status = STATUS_INVALID_PARAMETER; //break; } 。。。 } 上层程序为: short int Sinput; Sinput=5; DeviceIoControl(hHello,0x00033,&Sinput, sizeof(Sinput),bufOutput,sizeof(bufOutput),&nOutput, NULL); |
|
地板#
发布于:2003-05-02 10:52
怎么直接是0x00033,为什么不定义ioctrl码,这样系统不知道你的数据缓冲区访问方式,估计是这里的问题 :D
|
|
|
地下室#
发布于:2003-05-02 11:05
怎么直接是0x00033,为什么不定义ioctrl码,这样系统不知道你的数据缓冲区访问方式,估计是这里的问题 :D nod |
|
5楼#
发布于:2003-05-02 11:36
[quote]怎么直接是0x00033,为什么不定义ioctrl码,这样系统不知道你的数据缓冲区访问方式,估计是这里的问题 :D nod [/quote] 蹭分? :D |
|
|
6楼#
发布于:2003-05-02 11:43
被发现了。
|
|
7楼#
发布于:2003-05-02 15:58
十分感谢您对我的帮助,问题正如您所说,得到解决。以后还要麻烦您。再见。
|
|