RASDIAL APIS中的按位掩码问题

时间:2012-09-06 16:42:34

标签: c winapi ras dial-up

这个问题与Rasdial和pbk文件有关。 我正在使用“rassetentryproperties”更新pbk文件并通过“rasdialdlg”拨号。

下面的标志决定了pbk文件的参数,这对于拨号连接的属性是可以响应的。 我将标志预设为:

RasEntry.dwfOptions = 0x00000000;
RasEntry.dwfOptions2 = 0x00000000;

尝试按以下步骤设置Flag1和Flag2。

RasEntry.dwfOptions |= (Set Flag1 | Set Flag2) 

但是,我的pbk文件条目实际上并没有设置,正如我在上面设置的那样。

另外,对于相同的代码,Win7 pbk和win xp pbk是不同的。 我哪里错了?

参考代码样本:

BOOL Create_Phone_Book ( LPTSTR DeviceName ) {

    DWORD regError;
    TCHAR DeviceName[100];


    if ( _tcscpy ( DeviceName, DeviceName ) != NULL ) {
        Slog ( TEXT ("Strcpy Success"), APISUCCESS );
    } else {
        Slog ( TEXT ("Strcpy Failed To copy deviceName to DeviceName"), NOLASTERROR);
        return FALSE;
    }

    RASENTRY RasEntry;
    DWORD cb;
    RASDIALPARAMS RasDialParams;

    memset((LPTSTR)&RasEntry, 0, sizeof(RASENTRY)); 

    RasEntry.dwSize = sizeof(RASENTRY);
    cb = sizeof(RASENTRY);
    regError = RasGetEntryProperties (NULL, TEXT (""), &RasEntry, &cb, NULL, NULL);

    if ( regError == ERROR_SUCCESS ) {
        Slog ( TEXT ("RasGetEntryProperties Success"), APISUCCESS );
    } else {
        RAS_ErrorHandler ( regError );
        return FALSE;
    }

    RasEntry.dwfOptions = 0x00000000;
    RasEntry.dwfOptions2 = 0x00000000;


    RasEntry.dwfOptions |= (  RASEO_IpHeaderCompression | RASEO_ModemLights |RASEO_SwCompression | 
    RASEO_ShowDialingProgress | RASEO_NetworkLogon | RASEO_DisableLcpExtensions );



    RasEntry.dwfOptions2 |= ( RASEO2_UseGlobalDeviceSettings | RASEO2_Internet );


    if ( _tcscpy ( RasEntry.szDeviceType,  RASDT_Modem ) != NULL ) {
        Slog ( TEXT ("Strcpy Success"), APISUCCESS );
    } else {
        Slog ( TEXT ("Strcpy Failed copy RASDT_MODEM to RasEntry.szDeviceType"), NOLASTERROR);
        return FALSE;
    }

    if ( _tcscpy ( RasEntry.szDeviceName, DeviceName ) != NULL ) {
        Slog ( TEXT ("Strcpy Success"), APISUCCESS );   
    } else {
        Slog ( TEXT ("Strcpy Failed copy DeviceName to RasEntry.szDeviceName"), NOLASTERROR);
        return FALSE;   
    }

    regError = RasSetEntryProperties( NULL , Dial_Up_Name, &RasEntry, sizeof(RasEntry),NULL, 0);

    if ( regError == ERROR_SUCCESS ) {
        Slog ( TEXT ("RasSetEntryProperties Succeeded"), APISUCCESS);
    } else {
        RAS_ErrorHandler ( regError );
        return FALSE;
    }

    memset((LPTSTR)&RasDialParams, 0, sizeof(RasDialParams));

    RasDialParams.dwSize = sizeof(RASDIALPARAMS);

    if ( _tcscpy (RasDialParams.szEntryName, Dial_Up_Name ) != NULL ) {
        Slog ( TEXT ("Strcpy Success"), APISUCCESS);
    } else {
        Slog ( TEXT ("Strcpy Failed Copy Dial_Up_Name to RasDialParams.szEntryName"), NOLASTERROR);
        return FALSE;
    }
    if ( _tcscpy (RasDialParams.szUserName, TEXT ("")) != NULL ) {
        Slog ( TEXT ("Strcpy Success"), APISUCCESS);    
    } else {
        Slog ( TEXT ("Strcpy Failed Copy "" to RasDialParams.szUserName"), NOLASTERROR);
        return FALSE;   
    }

    if ( _tcscpy (RasDialParams.szPassword, TEXT ("")) != NULL ) {
        Slog ( TEXT ("Strcpy Success"), APISUCCESS);    
    } else {
        Slog ( TEXT ("Strcpy Failed Copy "" to RasDialParams.szPassword"), NOLASTERROR);
        return FALSE;
    }

    regError = RasSetEntryDialParams ( NULL, &RasDialParams, FALSE);
    if ( regError == ERROR_SUCCESS ) {
        Slog ( TEXT ("RasSetEntryDialParams Success"), APISUCCESS );
    } else {
        RAS_ErrorHandler ( regError );
        return FALSE;
    }

return TRUE;

}

更新1: 通常,我需要创建一个拨号连接,因为我喜欢。请查看随附的屏幕截图。

enter image description here

如快照中所示,我必须设置和重置许多参数(连接时设置 - 显示进度,UN和PW的重置 - 提示)。 这两个标志用于通过“或”设置和重置我们想要的任何内容     RasEntry.dwfOptions
    RasEntry.dwfOptions2

所以我在我的代码中做的是:

重置标志:

RasEntry.dwfOptions = 0x00000000;

RasEntry.dwfOptions2 = 0x00000000;

并设置:

 RasEntry.dwfOptions |= (  RASEO_IpHeaderCompression | RASEO_ModemLights  
                           |RASEO_SwCompression | RASEO_ShowDialingProgress |  
                            RASEO_NetworkLogon | RASEO_DisableLcpExtensions );

因此,除上述之外的其余标志将保持未设置状态。

现在的问题是,无论我在上述步骤中设置的是什么,实际上并没有设置拨号连接。换句话说,如果我在代码中设置,则某些参数甚至不会设置。

我该怎么做才能摆脱我的问题?

0 个答案:

没有答案