RasEnumConnections返回错误为632的分析

RasEnumConnections返回错误为632的分析

按照MSDN调用RasEnumConnections的例子写成的代码如下:
  RASCONN RasConn;
  DWORD cb;
  DWORD Connections = 0;

  RasConn.dwSize = cb = sizeof(RASCONN);
  DWORD nRet = RasEnumConnections(&RasConn, &cb, &Connections);
 
当时一运行,总是返回ERROR_INVALID_SIZE(632)。于是google了一下,CodeProject有人说了这个问题,要把RasConn.dwSize写成0x53c,试了一下不行。在另外一个网站说,要写成0x19c,试了一下居然可以。但是不明白为什么?又MSDN了一下,得到的解释是对于运行在不同版本的Windows,都要按照该版本重新定义WINVER,再重头编译。

在RAS.h中找到了RASCONN的定义,
RASCONNA
{
    DWORD    dwSize;
    HRASCONN hrasconn;
    CHAR     szEntryName[ RAS_MaxEntryName + 1 ];

#if (WINVER >= 0x400)
    CHAR     szDeviceType[ RAS_MaxDeviceType + 1 ];
    CHAR     szDeviceName[ RAS_MaxDeviceName + 1 ];
#endif
#if (WINVER >= 0x401)
    CHAR     szPhonebook [ MAX_PATH ];
    DWORD    dwSubEntry;
#endif
#if (WINVER >= 0x500)
    GUID     guidEntry;
#endif
#if (WINVER >= 0x501)
 DWORD dwFlags;
 LUID    luid;
#endif
};

然后分别把不同WINVER的大小数了一下,
WINDOWSNT4.0(0x400) 0x19c
WINDOWS9x/me        0x2A4
WINDOWS2k           0x2B4
WINDOWSxp/2003      0x2C0

再把Win2k的RasEnumConnections代码整出来,可以处理大小为0x2B4和0x19c,对于其他大小就返回632的错误。Win2003的RasEnumConnections代码,可以处理这四种大小,非以上四种大小才返回632的错误。

现在回想我的问题,全部明白了。我是用VS2003编译的程序,没有定义WINVER,编译器默认就给你定义为0x501,这样sizeof(RASCONN)=0x2c0,而我又是在2k下运行的程序,就得到了632的错误。因此如果不是需要取后面版本的信息,就直接把RasConn.dwSize写成0x19c,就可以做到通用了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值