阅读:1368回复:8
DeviceIoControl的win98用法?
NT/2000下用如下方法传递int值,可以
DeviceIoControl( hDevice, THIS_PROC, &IntId, sizeof(int*), NULL, 0, &bytesReturned, NULL); 在驱动中 int myID; RtlCopyMemory( &myID, InputBuffer, InputBufferLength ); 在win98下DeviceIoControl和nt一样写的,vxd里面 int myID; myID=(int)p->dioc_Inbuf; 怎么myID总是等于6616332啊? 5555。。 |
|
沙发#
发布于:2004-08-11 18:58
其实是编译器不好,指针只不过都是个地址而已,管他指向人还是鬼,不过要那里面的东西,一般还是要指定的BYTE,WORD,DWORD,其实如果你自己调试下就很清楚了。。。。。。 说明编译器是讲原则的 :D |
|
板凳#
发布于:2004-08-11 13:10
其实是编译器不好,指针只不过都是个地址而已,管他指向人还是鬼,不过要那里面的东西,一般还是要指定的BYTE,WORD,DWORD,其实如果你自己调试下就很清楚了。。。。。。
|
|
|
地板#
发布于:2004-08-11 12:31
"搞不清为什么需要转这么多次"
---- 指针的值是数据在内存中的地址。如果你不指明指针的类型,编译器怎么知道你要引用的数据是什么类型? 数据长度是多少? 难道她是你MM,善解人意? :D |
|
地下室#
发布于:2004-08-11 11:27
ft,不小心按了back space,写的东西全没有了
这不是vxd没有学好,而是C没有学好了 revID=*((int*)p->dioc_InBuf); |
|
5楼#
发布于:2004-08-11 10:28
搞定了
int(*(PVOID*)....... 搞不清为什么需要转这么多次 |
|
6楼#
发布于:2004-08-11 10:19
编译错误
这行出现 error c2100:illegal indirection |
|
7楼#
发布于:2004-08-11 10:06
myID=(int)(*(p->dioc_Inbuf));
|
|
|
8楼#
发布于:2004-08-11 10:02
救命啊~~~~
为什么DeviceIoControl传给vxd数据不行呢? 发信站: BBS 水木清华站 (Wed Aug 11 10:01:39 2004), 站内 #define FILETEST_DEVICE_TYPE FILE_DEVICE_UNKNOWN #define FILETEST_IOCTL_INDEX 0x800 #define FILETEST_Reset (ULONG) CTL_CODE( FILETEST_DEVICE_TYPE, FILETEST_IOCTL_INDEX+0, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FILETEST_Attach (ULONG) CTL_CODE( FILETEST_DEVICE_TYPE, FILETEST_IOCTL_INDEX+1, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FILETEST_Detach (ULONG) CTL_CODE( FILETEST_DEVICE_TYPE, FILETEST_IOCTL_INDEX+2, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FILETEST_GetLog (ULONG) CTL_CODE( FILETEST_DEVICE_TYPE, FILETEST_IOCTL_INDEX+3, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FILETEST_GetVer (ULONG) CTL_CODE( FILETEST_DEVICE_TYPE, FILETEST_IOCTL_INDEX+4, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FILETEST_ListDevices (ULONG) CTL_CODE( FILETEST_DEVICE_TYPE, FILETEST_IOCTL_INDEX+5, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FILETEST_GetStats (ULONG) CTL_CODE( FILETEST_DEVICE_TYPE, FILETEST_IOCTL_INDEX+6, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FILETEST_PROC (ULONG) CTL_CODE( FILETEST_DEVICE_TYPE, FILETEST_IOCTL_INDEX+7, METHOD_BUFFERED, FILE_ANY_ACCESS ) #define FILETEST_REDUCEPROC (ULONG) CTL_CODE( FILETEST_DEVICE_TYPE, FILETEST_IOCTL_INDEX+8, METHOD_BUFFERED, FILE_ANY_ACCESS ) int myid=1024; bResult = DeviceIoControl( hDevice, FILETEST_PROC, &myId, sizeof(int*), NULL, 0, &bytesReturned, NULL); vxd端代码: DWORD OnW32Deviceiocontrol(PIOCTLPARAMS p) { DWORD status=0; int revID; switch (p->dioc_IOCtlCode) {case FILETEST_PROC: if(p->dioc_cbInBuf <= 0 || p->dioc_InBuf == NULL) { status = -1; break; } revID=p->dioc_InBuf; 怎么revID始终是6616332,我都快被气死了 status = 0; break; |
|