freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1368回复:8

DeviceIoControl的win98用法?

楼主#
更多 发布于:2004-08-10 15:12
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。。

RED_spring
驱动中牛
驱动中牛
  • 注册日期2002-07-28
  • 最后登录2016-11-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望19点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2004-08-11 18:58
其实是编译器不好,指针只不过都是个地址而已,管他指向人还是鬼,不过要那里面的东西,一般还是要指定的BYTE,WORD,DWORD,其实如果你自己调试下就很清楚了。。。。。。


说明编译器是讲原则的  :D
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2004-08-11 13:10
其实是编译器不好,指针只不过都是个地址而已,管他指向人还是鬼,不过要那里面的东西,一般还是要指定的BYTE,WORD,DWORD,其实如果你自己调试下就很清楚了。。。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
RED_spring
驱动中牛
驱动中牛
  • 注册日期2002-07-28
  • 最后登录2016-11-06
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望19点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2004-08-11 12:31
"搞不清为什么需要转这么多次"

---- 指针的值是数据在内存中的地址。如果你不指明指针的类型,编译器怎么知道你要引用的数据是什么类型? 数据长度是多少? 难道她是你MM,善解人意?
 :D
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2004-08-11 11:27
ft,不小心按了back space,写的东西全没有了

这不是vxd没有学好,而是C没有学好了

revID=*((int*)p->dioc_InBuf);
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-11 10:28
搞定了

int(*(PVOID*).......

搞不清为什么需要转这么多次
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-11 10:19
编译错误

这行出现

error c2100:illegal indirection
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2004-08-11 10:06
myID=(int)(*(p->dioc_Inbuf));
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
freecutelei
驱动牛犊
驱动牛犊
  • 注册日期2003-11-12
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
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;
游客

返回顶部