⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sccardinfo.cpp

📁 agsm a gsm sim manager for browsing, managing, and manipulating the phonebook,SMS on the SIM card. I
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	BYTE ResData[255];
	RESAPDU resApdu;
	resApdu.data = ResData;
	resApdu.len = sizeof(ResData);
	CPcScCtrl &ScReader = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_SCReader;

	try{
		ScReader.m_bGetRes = FALSE;
		ScReader.Select(0x3f00,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x7f20,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f46,resApdu);
		ScReader.m_bGetRes = TRUE;
	
		resApdu.len = 17 + 2;
		ScReader.ReadBinary(0,0,resApdu);
		CString str = Helper::Gsm11EncStrToCStr(ResData+1,16);
		TRACE(_T("SPN:%s\n"),str);
		int nItem = m_listInfo.GetItemCount();
		m_listInfo.AddItem(nItem,0,_T("SPN"));
		m_listInfo.AddItem(nItem,1,str);
		m_listInfo.AddItem(nItem,2,_T("Service Provider Name"));
	}catch(LONG e)
	{
		if((e & 0xfffff000) == 0x6000 || (e & 0xfffff000) == 0x9000)
			;//AfxMessageBox(ScReader.FormatErrMsg(e));
		else
			Helper::ShowLastError(e);
	}
}

void CScCardInfo::UpdateMF()
{
	static LPCTSTR const ClockStopStr[] = {
		_T("Clock stop not allow"),
		_T("Clock stop not allowed,unless at low level"),
		_T("Clock stop not allowed,unless at high level"),
		_T(""),
		_T("Clock stop allowed,no preferred level"),
		_T("Clock stop allowed,low level preferred"),
		_T("Clock stop allowed,high level preferred")
	};

	BYTE m_MFData[255];
	RESAPDU resApdu;
	resApdu.data = m_MFData;
	resApdu.len = sizeof(m_MFData);
	CPcScCtrl &ScReader = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_SCReader;

	try{
		ScReader.m_bGetRes = TRUE;
		ScReader.Select(0x3f00,resApdu);
		int nClockStopMode = (  ((m_MFData[13]&0x01) << 2) | 
								((m_MFData[13]&0x04) >> 1) |
								((m_MFData[13]&0x08) >> 3)
							 );
		int nNumOfDFs = m_MFData[14];
		int nNumOfEFs = m_MFData[15];
		int nNumOfChvs = m_MFData[16];
		BOOL bCHV1Disabled = ((m_MFData[13] & 0x80) == 0x80);
		BOOL bCHV1Initialised = ((m_MFData[18] & 0x80) == 0x80);
		int nCHV1FalseRemains = (m_MFData[18] & 0xf);
		BOOL bUnblock1Initialised = ((m_MFData[19] & 0x80) == 0x80);
		int nUnblock1FalseRemains = (m_MFData[19] & 0xf);
		BOOL bCHV2Initialised = ((m_MFData[20] & 0x80) == 0x80);
		int nCHV2FalseRemains = (m_MFData[20] & 0xf);
		BOOL bUnblock2Initialised = ((m_MFData[21] & 0x80) == 0x80);
		int nUnblock2FalseRemains = (m_MFData[21] & 0xf);
		int nItem = m_listInfo.GetItemCount();
		m_listInfo.AddItem(nItem,0,_T("MF"));
		CString str;
		str.Format(_T("CHV1 %s"),bCHV1Disabled ? _T("Disabled") : _T("Enabled"));
		m_listInfo.AddItem(nItem,1,str);

		nItem++;
		m_listInfo.AddItem(nItem,0,_T(""));
		m_listInfo.AddItem(nItem,1,ClockStopStr[nClockStopMode]);

		nItem++;
		str.Format(_T("Number of DFs %d"),nNumOfDFs);
		m_listInfo.AddItem(nItem,0,_T(""));
		m_listInfo.AddItem(nItem,1,str);

		nItem++;
		str.Format(_T("Number of EFs %d"),nNumOfEFs);
		m_listInfo.AddItem(nItem,0,_T(""));
		m_listInfo.AddItem(nItem,1,str);

		nItem++;
		str.Format(_T("CHVs UNBLOCK CHVs length %d"),nNumOfChvs);
		m_listInfo.AddItem(nItem,0,_T(""));
		m_listInfo.AddItem(nItem,1,str);

		nItem++;
		str.Format(_T("CHV1 secret code %s,False presentations remaining %d"),
						bCHV1Initialised ? _T("initialised") : _T("not initialised"),
						nCHV1FalseRemains);
		m_listInfo.AddItem(nItem,0,_T(""));
		m_listInfo.AddItem(nItem,1,str);

		nItem++;
		str.Format(_T("UNBLOCK CHV1 secret code %s,False presentations remaining %d"),
						bUnblock1Initialised ? _T("initialised") : _T("not initialised"),
						nUnblock1FalseRemains);
		m_listInfo.AddItem(nItem,0,_T(""));
		m_listInfo.AddItem(nItem,1,str);

		nItem++;
		str.Format(_T("CHV2 secret code %s,False presentations remaining %d"),
						bCHV2Initialised ? _T("initialised") : _T("not initialised"),
						nCHV2FalseRemains);
		m_listInfo.AddItem(nItem,0,_T(""));
		m_listInfo.AddItem(nItem,1,str);

		nItem++;
		str.Format(_T("UNBLOCK CHV2 secret code %s,False presentations remaining %d"),
						bUnblock2Initialised ? _T("initialised") : _T("not initialised"),
						nUnblock2FalseRemains);
		m_listInfo.AddItem(nItem,0,_T(""));
		m_listInfo.AddItem(nItem,1,str);

	}catch(LONG e)
	{
		if((e & 0xfffff000) == 0x6000 || (e & 0xfffff000) == 0x9000)
			AfxMessageBox(ScReader.FormatErrMsg(e));
		else
			Helper::ShowLastError(e);
	}


}

void CScCardInfo::UpdateKc()
{
	BYTE ResData[255];
	RESAPDU resApdu;
	resApdu.data = ResData;
	resApdu.len = sizeof(ResData);
	CPcScCtrl &ScReader = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_SCReader;

	try{
		ScReader.m_bGetRes = FALSE;
		ScReader.Select(0x3f00,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x7f20,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f20,resApdu);
		ScReader.m_bGetRes = TRUE;
	
		resApdu.len = 9 + 2;
		ScReader.ReadBinary(0,0,resApdu);
		LPSTR pStr = Helper::BinToHex(ResData, 9);
		TRACE(_T("Kc:%s\n"),pStr);
		int nItem = m_listInfo.GetItemCount();
		m_listInfo.AddItem(nItem,0,_T("Kc"));
		m_listInfo.AddItem(nItem,1,pStr);
		m_listInfo.AddItem(nItem,2,_T("ciphering key Kc"));
		free(pStr);
	}catch(LONG e)
	{
		if((e & 0xfffff000) == 0x6000 || (e & 0xfffff000) == 0x9000)
			AfxMessageBox(ScReader.FormatErrMsg(e));
		else
			Helper::ShowLastError(e);
	}

}

void CScCardInfo::UpdatePLMNsel()
{
	BYTE ResData[255];
	RESAPDU resApdu;
	resApdu.data = ResData;
	resApdu.len = sizeof(ResData);
	CPcScCtrl &ScReader = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_SCReader;

	try{
		ScReader.m_bGetRes = FALSE;
		ScReader.Select(0x3f00,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x7f20,resApdu);

		ScReader.m_bGetRes = TRUE;
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f30,resApdu);
		
		int FileSize = (ResData[2]<<8)|ResData[3];
		resApdu.len = FileSize + 2;
		ScReader.ReadBinary(0,0,resApdu);
		LPSTR pStr = Helper::BinToHex(ResData, FileSize);
		TRACE(_T("PLMNsel:%s\n"),pStr);
		int nItem = m_listInfo.GetItemCount();
		m_listInfo.AddItem(nItem,0,_T("PLMNsel"));
		m_listInfo.AddItem(nItem,1,pStr);
		m_listInfo.AddItem(nItem,2,_T("PLMN selector"));
		free(pStr);

		ScReader.m_bGetRes = FALSE;
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f31,resApdu);
		resApdu.len = 1 + 2;
		ScReader.ReadBinary(0,0,resApdu);
		CString str;
		str.Format(_T("%d"),ResData[0]);
		TRACE(_T("HPLMN:%s\n"),str);
		nItem++;
		m_listInfo.AddItem(nItem,0,_T("HPLMN"));
		m_listInfo.AddItem(nItem,1,str);
		m_listInfo.AddItem(nItem,2,_T("HPLMN search period"));

	}catch(LONG e)
	{
		if((e & 0xfffff000) == 0x6000 || (e & 0xfffff000) == 0x9000)
			AfxMessageBox(ScReader.FormatErrMsg(e));
		else
			Helper::ShowLastError(e);
	}

}

void CScCardInfo::UpdateACMmax()
{
	BYTE ResData[255];
	RESAPDU resApdu;
	resApdu.data = ResData;
	resApdu.len = sizeof(ResData);
	CPcScCtrl &ScReader = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_SCReader;

	try{
		ScReader.m_bGetRes = FALSE;
		ScReader.Select(0x3f00,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x7f20,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f37,resApdu);

		resApdu.len = 3 + 2;
		ScReader.ReadBinary(0,0,resApdu);
		CString str;
		str.Format(_T("%d"),(ResData[0] << 16) | (ResData[1] << 8) | ResData[2]);
		int nItem = m_listInfo.GetItemCount();
		m_listInfo.AddItem(nItem,0,_T("ACMmax"));
		m_listInfo.AddItem(nItem,1,str);
		m_listInfo.AddItem(nItem,2,_T("Maximum value of accumulated call meter"));

		resApdu.len = sizeof(ResData);
		ScReader.m_bGetRes = TRUE;
		ScReader.Select(0x6f39,resApdu);
		int FileSize = (ResData[2]<<8)|ResData[3];
		int RecordLen = ResData[14];
		int NumOfRecs = FileSize/RecordLen;

		nItem++;
		m_listInfo.AddItem(nItem,0,_T("ACM"));
		m_listInfo.AddItem(nItem,2,_T("Accumulated call meter"));
		resApdu.len = RecordLen + 2;
		ScReader.ReadRecord(0,RRM_NextRecord,resApdu);
		CString sstr;
		sstr.Format(_T("%d"),(ResData[0] << 16) | (ResData[1] << 8) | ResData[2]);
		for(int i=1; i<NumOfRecs; i++)
		{
			resApdu.len = RecordLen + 2;
			ScReader.ReadRecord(0,RRM_NextRecord,resApdu);
			str.Format(_T("%d"),(ResData[0] << 16) | (ResData[1] << 8) | ResData[2]);
			sstr += _T(",");
			sstr += str;
		}
		m_listInfo.AddItem(nItem,1,sstr);

	}catch(LONG e)
	{
		if((e & 0xfffff000) == 0x6000 || (e & 0xfffff000) == 0x9000)
			AfxMessageBox(ScReader.FormatErrMsg(e));
		else
			Helper::ShowLastError(e);
	}


}

void CScCardInfo::UpdateSST()
{
	static LPCTSTR SST[] = {
		_T("CHV1 disable function"),
		_T("Abbreviated Dialling Numbers"),
		_T("Fixed Dialling Numbers"),
		_T("Short Message Storage"),
		_T("Advice of Charge"),
		_T("Capability Configuration Parameters"),
		_T("PLMN selector"),
		_T("RFU"),
		_T("MSISDN"),
		_T("Extension1"),
		_T("Extension2"),
		_T("SMS Parameters"),
		_T("Last Number Dialled"),
		_T("Cell Broadcast Message Identifer"),
		_T("Group Identifier Level 1"),
		_T("Group Identifier Level 2"),
		_T("Service Provider Name")
	};
	static LPCTSTR MinusPlus[] = {
		_T("-"),
		_T("+")
	};
	BYTE ResData[255];
	RESAPDU resApdu;
	resApdu.data = ResData;
	resApdu.len = sizeof(ResData);
	CPcScCtrl &ScReader = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_SCReader;

	try{
		ScReader.m_bGetRes = FALSE;
		ScReader.Select(0x3f00,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x7f20,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f38,resApdu);

		resApdu.len = 5 + 2;
		ScReader.ReadBinary(0,0,resApdu);
		int nItem = m_listInfo.GetItemCount();
		m_listInfo.AddItem(nItem,0,_T("SST"));
		m_listInfo.AddItem(nItem,1,"++(allocated activated)");
		m_listInfo.AddItem(nItem,2,_T("SIM service table"));
		CString str;
		UCHAR a,b,s;
		for(int i=0; i<sizeof(SST)/sizeof(SST[0]); i++)
		{
			nItem++;
			m_listInfo.AddItem(nItem,0,_T(""));
			m_listInfo.AddItem(nItem,2,_T(""));
			str = SST[i];
			str += _T(" ");
			a = ResData[i/4];
			s = (i%4)*2;
			b = a>>s;
			str += MinusPlus[b&1];
			str += MinusPlus[(b&2)>>1];
			m_listInfo.AddItem(nItem,1,str);
		}

	}catch(LONG e)
	{
		if((e & 0xfffff000) == 0x6000 || (e & 0xfffff000) == 0x9000)
			AfxMessageBox(ScReader.FormatErrMsg(e));
		else
			Helper::ShowLastError(e);
	}
}

void CScCardInfo::UpdatePUCT()
{
	BYTE ResData[255];
	RESAPDU resApdu;
	resApdu.data = ResData;
	resApdu.len = sizeof(ResData);
	CPcScCtrl &ScReader = ((CAgsm2Dlg *)(AfxGetApp()->m_pMainWnd))->m_SCReader;

	try{
		ScReader.m_bGetRes = FALSE;
		ScReader.Select(0x3f00,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x7f20,resApdu);
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f41,resApdu);
	
		resApdu.len = 5 + 2;
		ScReader.ReadBinary(0,0,resApdu);
		LPSTR pStr = Helper::BinToHex(ResData, 5);
		TRACE(_T("PUCT:%s\n"),pStr);
		int nItem = m_listInfo.GetItemCount();
		m_listInfo.AddItem(nItem,0,_T("PUCT"));
		m_listInfo.AddItem(nItem,1,pStr);
		m_listInfo.AddItem(nItem,2,_T("Price per unit and currency table"));
		free(pStr);

		nItem++;
		ScReader.m_bGetRes = TRUE;
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f45,resApdu);
		int FileSize = (ResData[2]<<8)|ResData[3];
		resApdu.len = FileSize + 2;
		ScReader.ReadBinary(0,0,resApdu);
		pStr = Helper::BinToHex(ResData, FileSize);
		TRACE(_T("CBMI:%s\n"),pStr);
		m_listInfo.AddItem(nItem,0,_T("CBMI"));
		m_listInfo.AddItem(nItem,1,pStr);
		m_listInfo.AddItem(nItem,2,_T("Cell broadcast message identifier selection"));
		free(pStr);

		nItem++;
		ScReader.m_bGetRes = TRUE;
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f74,resApdu);
		FileSize = (ResData[2]<<8)|ResData[3];
		resApdu.len = FileSize + 2;
		ScReader.ReadBinary(0,0,resApdu);
		pStr = Helper::BinToHex(ResData, FileSize);
		TRACE(_T("BCCH:%s\n"),pStr);
		m_listInfo.AddItem(nItem,0,_T("BCCH"));
		m_listInfo.AddItem(nItem,1,pStr);
		m_listInfo.AddItem(nItem,2,_T("Broadcast control channels"));
		free(pStr);

		nItem++;
		ScReader.m_bGetRes = TRUE;
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f78,resApdu);
		FileSize = (ResData[2]<<8)|ResData[3];
		resApdu.len = FileSize + 2;
		ScReader.ReadBinary(0,0,resApdu);
		pStr = Helper::BinToHex(ResData, FileSize);
		TRACE(_T("ACC:%s\n"),pStr);
		m_listInfo.AddItem(nItem,0,_T("ACC"));
		m_listInfo.AddItem(nItem,1,pStr);
		m_listInfo.AddItem(nItem,2,_T("Access control class"));
		free(pStr);

		nItem++;
		ScReader.m_bGetRes = TRUE;
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f7b,resApdu);
		FileSize = (ResData[2]<<8)|ResData[3];
		resApdu.len = FileSize + 2;
		ScReader.ReadBinary(0,0,resApdu);
		pStr = Helper::BinToHex(ResData, FileSize);
		TRACE(_T("FPLMN:%s\n"),pStr);
		m_listInfo.AddItem(nItem,0,_T("FPLMN"));
		m_listInfo.AddItem(nItem,1,pStr);
		m_listInfo.AddItem(nItem,2,_T("Forbidden PLMNs"));
		free(pStr);

		nItem++;
		ScReader.m_bGetRes = TRUE;
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6f7e,resApdu);
		FileSize = (ResData[2]<<8)|ResData[3];
		resApdu.len = FileSize + 2;
		ScReader.ReadBinary(0,0,resApdu);
		pStr = Helper::BinToHex(ResData, FileSize);
		TRACE(_T("LOCI:%s\n"),pStr);
		m_listInfo.AddItem(nItem,0,_T("LOCI"));
		m_listInfo.AddItem(nItem,1,pStr);
		m_listInfo.AddItem(nItem,2,_T("Location information"));
		free(pStr);

		nItem++;
		ScReader.m_bGetRes = TRUE;
		resApdu.len = sizeof(ResData);
		ScReader.Select(0x6fad,resApdu);
		FileSize = (ResData[2]<<8)|ResData[3];
		resApdu.len = FileSize + 2;
		ScReader.ReadBinary(0,0,resApdu);
		pStr = Helper::BinToHex(ResData, FileSize);
		TRACE(_T("AD:%s\n"),pStr);
		m_listInfo.AddItem(nItem,0,_T("AD"));
		m_listInfo.AddItem(nItem,1,pStr);
		m_listInfo.AddItem(nItem,2,_T("Administrative data"));
		free(pStr);


	}catch(LONG e)
	{
		if((e & 0xfffff000) == 0x6000 || (e & 0xfffff000) == 0x9000)
			AfxMessageBox(ScReader.FormatErrMsg(e));
		else
			Helper::ShowLastError(e);
	}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -