Click here to Skip to main content
Click here to Skip to main content

RasEnumConnections and "632" Error

, 7 Apr 2005
Rate this:
Please Sign up or sign in to vote.
Why RasEnumConnections fails on Win2k and how to fix it.

Introduction

Recently I was working on a small application that was dealing with active dial-up connections. Dial-up networking is provided by the Windows Remote Access Service (RAS) and primarily used for connecting to the Internet by a modem. I tried to use the RasEnumConnections function to enumerate the active dial-up connections to obtain a connection handle for further processing. Unfortunately, no matter what my compiler settings were, on Win2k Professional, the function persistently returned 632, which means “Invalid size of the RASCONN structure”. Searching through the Internet and CodeProject pages I figured out that many people noticed the same effect and so far no solution has been published. The focus of this article is to provide a fix for this annoying error.

In order to figure out why the function always failed, I went step-by-step through the internals of this function and noticed that the function expects different sizes of the RASCONN structure (i.e. versions of the structure) but there was nothing like the value provided by sizeof(RASCONN). The closest match was 0x53c. I tried to cheat the function by supplying 0x53c as the size of the RASCONN structure. It worked! The code shown below represents a program that enumerates a live dial-up connection and hangs it up.

#include "stdafx.h"
/*make sure to define _UNICODE, UNICODE, _WIN32_WINNT = 0x0500 */
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    DWORD iNumBytes = 0x53c;
    DWORD iRcvd;
    RASCONN rsc[1];
    rsc[0].dwSize = 0x53c;
 
    int iErr = RasEnumConnections(rsc, &iNumBytes, &iRcvd);
    if(!iErr && iRcvd)
        RasHangUp(rsc[0].hrasconn);
    return 0;
}

The trick is to make dwSize equal to 0x53c. Note that 0x53c is smaller than sizeof(RASCONN), therefore the function will not corrupt the memory.

Enjoy RAS.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Dr. APo
Other University of Washington
United States United States
I was born in Moscow, USSR. In 1998, I earned Master’s degree in Chemistry from the Moscow State University. In 2000, I moved to Germany to pursue a PhD degree in Genetics. Currently I live with my family in the United States.
I have been always involved is a multidisciplinary research side-by-side with biologists. The research involves physical chemistry, bioinformatics and electrical engineering.

Comments and Discussions

 
Generalanother reason... Pinmembermoze2-Jan-12 5:54 
GeneralRASCONNSTATUS size Pinmemberangel_of_light14-Apr-10 0:40 
GeneralRe: RASCONNSTATUS size Pinmemberpozhit23-May-12 21:29 
GeneralOne of the reason for this error. Pinmemberanand choubey31-Jul-09 6:55 
GeneralThanks! PinmemberbongoMaster2-Mar-07 0:38 
AnswerRe: Thanks! Pinmemberpozhit2-Mar-07 3:11 
QuestionWhat about more than one connection? PinmemberReallyLongNameThatNooneIsUsing28-Jun-06 10:31 
My problem often has two connections active at the same time. The problem is, if it is an array of RASCONN, every RASCONN after the first will have some funky data, because it will be offset by the difference between sizeof(RASCONN) and the size you pass to RasEnumConnections. I ended up using 692 for a size on Win2k and 704 on XP, but I had to use memory address, offsets and casting. (If anyone would like to see the code, speak up) RasEnumConnections is supposed to return the needed buffersize in the second parameter, but I guess it doesn't work. It was returning 704 to me, even on win2k. I'd like to know if there is a cleaner solution then mine. I took a peek at ras.h and it seems that win2k is the highest version referenced. I wonder why XP is different.
AnswerRe: What about more than one connection? PinmemberScipius16-Apr-07 1:58 
GeneralDoing something similar in C# for Win2K and XP Pinmemberjinksk19-Apr-05 4:53 
GeneralRe: Doing something similar in C# for Win2K and XP PinsussAnonymous19-Apr-05 5:13 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web04 | 2.8.140721.1 | Last Updated 7 Apr 2005
Article Copyright 2005 by Dr. APo
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid