阅读:1156回复:6
菜鸟请教:驱动程序怎么将一个字符串返回给win32程序阿???
各位高手:
我刚刚接触驱动,我在这过程中遇到一个问题: 我在win32程序中调用 char* outbuffer = new char[100];; DWORD BytesReturned; DeviceIoControl( hWdm1, IOCTL_READ_IOPORT_UCHAR, NULL, 0, // Input outbuffer, 100, // Output &BytesReturned, NULL)) 希望驱动可以将某个字符串放入outbuffer中。 驱动程序是这样写的: UCHAR basename[] = \"WMIEXTRA\"; switch( ControlCode) { case IOCTL_READ_IOPORT_UCHAR: DebugPrint(\"Receive read uchar requset!\"); RtlCopyMemory(Irp->AssociatedIrp.SystemBuffer,basename,sizeof (basename)); break; 。。。。。。。。。。。 但是我在应用程序中显示outbuffer总是一串乱码,怎么回事啊, ebugPrint察看过了此时Irp->AssociatedIrp.SystemBuffer中的确是\"WMIEXTRA\";但是应用程序就是接收不到 谢谢各位了 |
|
最新喜欢:lmhhlm... |
沙发#
发布于:2003-07-07 08:50
看看你的 IOCTL_READ_IOPORT_UCHAR 的定义
|
|
|
板凳#
发布于:2003-07-07 14:47
从程序中好象看不出什么不对的地方,怀疑是其他地方干扰的返回值。
|
|
地板#
发布于:2003-07-07 14:54
Irp->IoStatus.Information = //你返回的字节数。
|
|
|
地下室#
发布于:2003-07-07 18:02
谢谢各位了
我知道原因了,就是tigerzd 说的那样。 但是我怎么知道Irp->AssociatedIrp.SystemBuffer中确切的字符个数,因为像IrpStack->Parameters.Write.Length得到的都是应用程序传过来的字符数,并不是实际传递字符串的字符数。 |
|
5楼#
发布于:2003-07-07 18:34
建议你多看看书或DDK。
典型的应用是: irpStack = IoGetCurrentIrpStackLocation (Irp); Irp->IoStatus.Status = STATUS_SUCCESS; Irp->IoStatus.Information = 0; // get pointers and lengths of the caller\'s (user\'s) IO buffer ioBuffer = Irp->AssociatedIrp.SystemBuffer; inputBufferLength = irpStack->Parameters.DeviceIoControl.InputBufferLength; outputBufferLength = irpStack->Parameters.DeviceIoControl.OutputBufferLength; ioControlCode = irpStack->Parameters.DeviceIoControl.IoControlCode; |
|
|
6楼#
发布于:2003-07-07 19:33
谢谢指点
我想你可能将我的疑似理解错了。 我意思是: inputBufferLength只是DeviceIoControl( hWdm1, IOCTL_READ_IOPORT_UCHAR, inbuffer, 100, null, 0, &BytesReturned, NULL) 传入的100这个值,可能我实际inbuffer中只有20个字符,那么我怎样直到inbuffer是20个字符呢? 靠inputBufferLength = irpStack->Parameters.DeviceIoControl.InputBufferLength判断是不行的 |
|