博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
wince RAS
阅读量:6987 次
发布时间:2019-06-27

本文共 5360 字,大约阅读时间需要 17 分钟。

RAS功能需要引入#include <ras.h>

相关错误信息需要引入#include <Raserror.h>

功能1:枚举所有活动的连接并hangup指定的gprs

 RASCONN entries[25];

//::memset(entries,0,sizeof(RASCONN));
DWORD bufsize=0;
DWORD numEntries=0;
bufsize=25*sizeof(RASCONN);
entries[0].dwSize=sizeof(RASCONN);//必须
RASCONNSTATUS status;//RAS状态在ras.h中可以查找到。
        status.dwSize=sizeof(RASCONNSTATUS);
if(RasEnumConnections(entries,&bufsize,&numEntries)==0)//枚举所有活动的连接
{
for(DWORD i=0;i<numEntries;i++)
{
if(lstrcmp(entries[i].szEntryName,_T("GPRS"))==0 && RasHangUp(entries[i].hrasconn)==0)//挂断名称为gprs的连接
{
while(RasGetConnectStatus(entries[i].hrasconn,&status)==0)//得到连接的状态(能获取得到)
{
Sleep(0);
//Sleep(n)的作用是让当前线程睡眠n毫秒,以便执行其他线程,如果没有其他线程,那睡眠n毫秒后,继续执行。

    //而如果n=0,Sleep(0)是指CPU交出当前线程的执行权,让CPU去执行其他线程。也就是放弃当前线程的时间片,转而执行其他线程。 

}
}
}
}

功能2:枚举所有电话簿(获取本地的gprs名称),对应的注册表为HKEY_CURRENT_USER\Comm\RasBook下的值

RASENTRYNAME *lprasentryname;
DWORD cEntries;
DWORD cb;
lprasentryname=(LPRASENTRYNAME)LocalAlloc(LPTR,sizeof(RASENTRYNAME));
lprasentryname->dwSize=sizeof(RASENTRYNAME);
DWORD nRet;
//首次调用RasEnumEntries函数来获取缓冲区的大小
if((nRet=RasEnumEntries(NULL,NULL,lprasentryname,&cb,&cEntries))==0)
{
::LocalFree(lprasentryname);
lprasentryname=(LPRASENTRYNAME)GlobalAlloc(GPTR,cb);
lprasentryname->dwSize=sizeof(RASENTRYNAME);
}
//再次调用RasEnumEntries函数列举电话簿条目
nRet=RasEnumEntries(NULL,NULL,lprasentryname,&cb,&cEntries);
if(nRet !=ERROR_SUCCESS)
{
printf("aaaaaaaaa\n");
}
else
{
for(int i=0;i<cEntries;i++)
{
printf("%s\n",lprasentryname->szEntryName);
         
lprasentryname++;
}
}

    GlobalFree(lprasentryname); 

 功能3:建立拔号连接

RASDIALPARAMS rdParams;
HRASCONN hRasConn=NULL;
//初始化参数
rdParams.dwSize=sizeof(RASDIALPARAMS);
lstrcpy(rdParams.szEntryName,_T("GPRS"));
lstrcpy(rdParams.szPhoneNumber,_T(""));
lstrcpy(rdParams.szCallbackNumber,_T(""));
       lstrcpy(rdParams.szPhoneNumber,_T(""));
lstrcpy(rdParams.szUserName,_T(""));
lstrcpy(rdParams.szPassword,_T(""));
lstrcpy(rdParams.szDomain,_T(""));
DWORD dwRet;

      // WINCE下GPRS 只支持以下两种拔号方式

//同步建立拔号连接
//dwRet=RasDial(NULL,NULL,&rdParams,NULL,NULL,&hRasConn);//同步
//异步
dwRet=RasDial(NULL,NULL,&rdParams,0xFFFFFFFF,窗体句柄,&hRasConn);//通过给窗体发送WM_RASDIALEVENT消息。
 (RASCONNSTATE) wParam;  = (DWORD) lParam; // error that may have occurred 
if(dwRet !=0)//拔号失败
{

 功能4:删除gprs本地连接 

                  RasDeleteEntry(NULL,_T("GPRS")); //第一个参数为NULL(NULL uses the current default phone-book file)

 功能5:创建gprs本地连接  

DWORD CreateGPRS(const LPWSTR pszEntryName,const LPCTSTR pszUserName,const LPCTSTR pszPassWord)
{
RASENTRY rasEntry;
RASDIALPARAMS rdParams;
DWORD rasEntrySize,dwResult;
/*验证RASENTRY名称是否有效*/
    dwResult = RasValidateEntryName(NULL, pszEntryName);
if(dwResult!=ERROR_SUCCESS)
{
if(dwResult==ERROR_ALREADY_EXISTS)
{
                      return -1;
}
else
{
            return -2;
}
}
   
memset(&rasEntry,0,sizeof(rasEntry));
rasEntrySize=sizeof(rasEntry);
rasEntry.dwSize=rasEntrySize;
    DEVMINICFG tmpsDevConfig;
DWORD tmpsDevConfigLength=sizeof(DEVMINICFG);
    
    
if(RasGetEntryProperties(NULL,_T(""),&rasEntry,&rasEntrySize,(LPBYTE)&tmpsDevConfig,&tmpsDevConfigLength) !=0)
{
          return -2;
}
lstrcpy(rasEntry.szDeviceType,RASDT_Modem);
lstrcpy(rasEntry.szDeviceName, TEXT("COM1 上的 Hayes 兼容调制解调器:"));
lstrcpy(rasEntry.szAreaCode, TEXT("10"));
lstrcpy(rasEntry.szLocalPhoneNumber,_T("*99***1#"));
rasEntry.dwCountryCode=86;//国家代码
tmpsDevConfig.wVersion = 0x30 ;
tmpsDevConfig.dwBaudRate = 115200 ;
tmpsDevConfig.ByteSize = 8 ;
tmpsDevConfig.StopBits = 0;
tmpsDevConfig.Parity = 0 ;
tmpsDevConfig.dwModemOptions = MDM_BLIND_DIAL ;
lstrcpy( tmpsDevConfig.szDialModifier,_T("+CGDCONT=1,\"IP\",\"CMNET\"")) ;
if(RasSetEntryProperties(NULL,pszEntryName,&rasEntry, sizeof(rasEntry),(LPBYTE)(&tmpsDevConfig),tmpsDevConfigLength)!=0)
{
        return -2;
}
    ZeroMemory(&rdParams, sizeof(RASDIALPARAMS));
    rdParams.dwSize = sizeof(RASDIALPARAMS);
/*设置拔号的用户名和密码*/
    lstrcpy(rdParams.szEntryName, pszEntryName);
    lstrcpy(rdParams.szUserName, pszUserName);
    lstrcpy(rdParams.szPassword, pszPassWord);
if(RasSetEntryDialParams(NULL, &rdParams, FALSE)!=0)
{
return -2;
}
return 1;

 DEVMINICFG为记录TAPI相关的配置信息,定义如下:

#ifndef _DEVMINICFG_H_
#define _DEVMINICFG_H_
#define DIAL_MODIFIER_LEN 256
#define MAX_CFG_BLOB  126
#define MAX_NAME_LENGTH   8
// Modem Options
#define MDM_COMPRESSION      0x00000001
#define MDM_ERROR_CONTROL    0x00000002
#define MDM_FORCED_EC        0x00000004
#define MDM_CELLULAR         0x00000008
#define MDM_FLOWCONTROL_HARD 0x00000010
#define MDM_FLOWCONTROL_SOFT 0x00000020
#define MDM_CCITT_OVERRIDE   0x00000040
#define MDM_SPEED_ADJUST     0x00000080
#define MDM_TONE_DIAL        0x00000100
#define MDM_BLIND_DIAL       0x00000200
#define MDM_V23_OVERRIDE     0x00000400
typedef struct  tagDEVMINICFG  { 
    WORD  wVersion; //0
    WORD  wWaitBong;            // DevCfgHdr 2
    
    DWORD dwCallSetupFailTimer;  // CommConfig.ModemSettings 4
    DWORD dwModemOptions;        // CommConfig.ModemSettings 8
// MDM_BLIND_DIAL   MDM_FLOWCONTROL_SOFT 
// MDM_CCITT_OVERRIDE MDM_FORCED_EC 
// MDM_CELLULAR      MDM_SPEED_ADJUST 
// MDM_COMPRESSION    MDM_TONE_DIAL 
// MDM_ERROR_CONTROL  MDM_V23_OVERRIDE 
// MDM_FLOWCONTROL_HARD 
    
    DWORD dwBaudRate;            // DCB 12
    WORD  fwOptions;            // DevCfgHdr 16
// TERMINAL_PRE  TERMINAL_POST 
// MANUAL_DIAL 
    BYTE  ByteSize;              // DCB 18
    BYTE  StopBits;              // DCB 19
    BYTE  Parity;                // DCB 20
    WCHAR szDialModifier[DIAL_MODIFIER_LEN+1];    // Unique to MiniCfg 256+1
    // Dynamic devices configuration 
    WCHAR  wszDriverName[MAX_NAME_LENGTH+1]; //8+1
    BYTE    pConfigBlob[MAX_CFG_BLOB]; //126+1
    HANDLE  hPort; //4
} DEVMINICFG; 

#endif 

 

转载于:https://www.cnblogs.com/fujinliang/archive/2012/11/12/2766344.html

你可能感兴趣的文章
一次小***处理
查看>>
哈希(Hash)与加密(Encrypt)的基本原理、区别及工程应用
查看>>
电子商务系统的设计与实现(八):前端商城系统功能细化
查看>>
深入理解 Kubernetes CPU Mangager
查看>>
java web中过滤敏感词汇的简单方法
查看>>
Nginx配置文件nginx.conf中文详解
查看>>
linux anaconda kickstart基础
查看>>
DITA vs DocBook
查看>>
调整Outlook 2010的pst文件大小
查看>>
python笔记二 基础
查看>>
nohup /dev/null 2>&1 含义详解
查看>>
Micropython教程之TPYBoard DIY超声波测距仪实例演示
查看>>
我的友情链接
查看>>
Android切近实战(六)
查看>>
mysqlbinlog 使用
查看>>
RHCS中GFS2共享存储扩容
查看>>
Excel如何把非打印区域设置成灰色
查看>>
条件语句整理
查看>>
Office365 SKU-1
查看>>
汉语国际传播思索
查看>>