IMSI也就是SIM卡号,是用户的唯一标识,IMSI号码结构为:
MCC------------- MNC------------------ MSIN
MCC=移动国家号码,由3位数字组成,唯一地识别移动客户所属的国家。我国为460。
MNC=移动网号,由2位数字组成,用于识别移动客户所归属的移动网。邮电部门GSM PLMN网为00,“中国联通公司”GSMPLMN网为0l。
MSIN=移动客户识别码,采用等长11位数字构成。唯一地识别国内GSM移动通信网中移动客户。
获取IMSI可以用ExTAPI中的lineGetGeneralInfo,它会将各种硬件信息返回到它的第二个结构成员中,即LINEGENERALINFO结构中。
这个结构定义如下:
typedef struct linegeneralinfo_tag {
DWORD dwTotalSize;
DWORD dwNeededSize;
DWORD dwUsedSize;
DWORD dwManufacturerSize;
DWORD dwManufacturerOffset;
DWORD dwModelSize;
DWORD dwModelOffset;
DWORD dwRevisionSize;
DWORD dwRevisionOffset;
DWORD dwSerialNumberSize;
DWORD dwSerialNumberOffset;
DWORD dwSubscriberNumberSize;
DWORD dwSubscriberNumberOffset;
} LINEGENERALINFO, * LPLINEGENERALINFO;
里面的信息都很清晰了,比如说要获得IMSI,则就这个结构的首地址再加上这个dwSubscriberNumberOffset所指示的偏移。即:
LPTSTR lstr = (TCHAR*)((BYTE*)pLineDevCaps+pLineDevCaps->dwLineNameOffset);
要使用lineGetGeneralInfo,也要按照使用tapi的顺序对程序进行初始化,做一些必要的操作才能调用lineGetGeneralInfo。
要使用tapi,大概的顺序为:
lineInitializeEx
lineNegotiateAPIVersion
lineOpen
这几个函