现在,好多人都开始使用Windows Phone了,其提供了个人信息管理功能十分强大,无奈的是,如果当我们过分依赖于这些辅助功能,那么一旦设备丢失或被盗(结果一样吧,哈哈),个人信息将遗漏无疑啊。所以,为了保护我们的个人信息,在这里写一个Sim卡识别程序,如果是非本人的SIM卡插入,则删除本机的相关个人信息,以防被盗!

首先,如何识别我们的Sim卡呢?它有一组20位(也许吧)的识别码,应该是比较全球唯一吧。而怎么去获得这个ID呢?这里用到一个P/V invoke技术,实际上就是使用cellcore.dll的Sim卡功能类SimInitialize等,用这些功能读出插在手机中的SIM卡的ID。

其次,应该在何种场合进行判断呢?其实大家因该有这种经验:WM的PPC一般不会关机,除非换电池和SIM卡。所以,我们的程序需要在机器开机的时候运行,而且最好不要有什么用户界面,所以,我选择新建一个智能设备的控制台项目,作为我们的开发环境。

当然,还是选用.net cf 2.0的环境,模拟器么,选择WM6吧。

至此,我们已经建立起一个项目,下面我们需要往其中加入代码,其中,核心代码如下:

SIM类

using System;

using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace SmartDeviceProject1
{
    public class SIM
    {

#region 平台调用
        [DllImport("cellcore.dll")]
        public extern static int SimInitialize(int dwFlags, IntPtr lpfnCallback, int dwParam, ref IntPtr lphSim);

[DllImport("cellcore.dll")]
        public extern static int SimDeinitialize(IntPtr hSim);

[DllImport("cellcore.dll")]
        public extern static int SimReadRecord(IntPtr hSim, int dwAddress, int dwRecordType, int dwIndex, byte[] lpData, int dwBufferSize, ref int dwSize);

int EF_ICCID = 0x2fe2;
        int SIM_RECORDTYPE_TRANSPARENT = 1;
        #endregion
       
        //返回Sim卡背面的20位ICCID
        public string SimSerialNumber()
        {
            IntPtr hSim = default(IntPtr);
            byte[] iccid = new byte[10];
            int dwsize = 0;
            SimInitialize(0, IntPtr.Zero, 0, ref hSim);
            SimReadRecord(hSim, EF_ICCID, SIM_RECORDTYPE_TRANSPARENT, 0, iccid, iccid.Length, ref dwsize);//在这里获取了SIM卡ID
            SimDeinitialize(hSim);
            return FormatAsSimString(iccid);
        }
        /// <summary>
        /// 对SIM卡ID进行格式化
        /// </summary>
        /// <param name="iccid">byte格式的ID</param>
        /// <returns>字符串格式</returns>
        private static string FormatAsSimString(byte[] iccid)
        {
            string rawString = GetRawIccIDString(iccid);
            return String.Format("{0} {1} {2} {3}", rawString.Substring(0, 6), rawString.Substring(6, 5), rawString.Substring(11, 4), rawString.Substring(15, 4));
        }
        /// <summary>
        /// 格式转换函数
        /// </summary>
        /// <param name="iccid"></param>
        /// <returns></returns>
        private static string GetRawIccIDString(byte[] iccid)
        {
            System.Text.StringBuilder builder = new System.Text.StringBuilder();
            int i = 0;
            while (i < iccid.Length)
            {
                byte b = iccid[i];
                builder.Append(ConvertInt4PairToString(b));
                Math.Max(System.Threading.Interlocked.Increment(ref i), i - 1);
            }
            return builder.ToString();
        }

private static string ConvertInt4PairToString(byte byteValue)
        {
            return ((byte)(byteValue << 4) | (byteValue >> 4)).ToString("x2");
        }

}
}

核心代码我们有了,大家应该通过查资料和注释大概能理解程序要做的事情了吧,其实很简单,对不对?好,下一步我们在Programs.cs中添加功能调用代码如下:

Main
using System;

using Microsoft.WindowsMobile.PocketOutlook;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;
using Microsoft.VisualBasic;

namespace SmartDeviceProject1
{
    class Program
    {
       
        static void Main(string[] args)
        {
            SIM card = new SIM();
            //获取注册表
            RegistryKey reg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\TEST", true);
            if ((reg == null))
            {
                reg = Registry.LocalMachine.CreateSubKey("SOFTWARE\\TEST");//如果为空则添加一个键值
              
            }

if (reg.GetValue("sim")==null)
            {
                if (Interaction.MsgBox("是否设定当Sim CardID不符时,自动发送短信", MsgBoxStyle.OkCancel,"提示") == MsgBoxResult.Ok)
                {

reg.SetValue("sim", card.SimSerialNumber());
                }
            }
            else
            {
                if (reg.GetValue("sim").ToString() != card.SimSerialNumber())
                {
                    OutlookSession Session = new OutlookSession();
                    //删除所有联系人
                    Session.Contacts.Items.Clear();
                    //删除所有约会
                    Session.Appointments.Items.Clear();
                    //删除所有工作计划
                    Session.Tasks.Items.Clear();
                   
                    Microsoft.WindowsMobile.PocketOutlook.SmsMessage sms = new Microsoft.WindowsMobile.PocketOutlook.SmsMessage();
                    sms.Body = card.SimSerialNumber();
                    //发一封短信到自己的手机,內容包含目前sim iccid
                    sms.To.Add(new Recipient("1234"));
                    sms.Send();
                }
                else
                {
                    reg.Close();
                    Microsoft.WindowsMobile.PocketOutlook.SmsMessage sms = new Microsoft.WindowsMobile.PocketOutlook.SmsMessage();
                    sms.Body = card.SimSerialNumber();
                    sms.To.Add(new Recipient("1234"));
                    sms.Send();
                    Interaction.MsgBox("欢迎回来,主人!", MsgBoxStyle.OkCancel, "提示");
                }
               
            }

}

}
}
话说至此程序已经完成,我们还需设置项目的生成属性,其中:
输出文件夹为:Start Menu Startup文件夹,子目录为空,Ok.

下面我们就点击调试吧,系统打开WM6 Professional的模拟器,然后自动运行程序,会显示如下画面:

我们点击确定,之后,新建一个联系人

软启动设备,直至系统进入桌面,我们并没有看到什么提示,但是看看我们的Cellular Emulator,它是不是收到一条短信啊:

呵呵,再看看联系人一览:

哈哈~~~~

到此,整个程序就完成了。当然,还可以发挥你的想象力,加入更牛A的操作,这就看你了,最后弱弱的温馨提示一句:真机调试本程序前,最好备份好你自己的联系人等信息,造成的任何意外损害,我概不负责啊~~~~~

参考文档:

AppleSeeker的系列文章,很不错啊http://www.cnblogs.com/appleseeker/archive/2008/03/29/1129031.html
这里是一个相关讨论,大家也可以看看http://blog.opennetcf.com/ncowburn/CommentView,guid,309b8b8e-ebc7-4078-a8ba-f174761ea7af.aspx

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/CITABC/archive/2009/11/17/4819919.aspx

转载于:https://www.cnblogs.com/Wolves/archive/2010/12/01/1893465.html

PPC丢失后,手机信息如何保护?(C#)相关推荐

  1. 安全管家安卓_手机丢失后可能背负巨额债务,腾讯手机管家提醒注意手机安全防护 -...

    之前骗子偷手机是为了卖手机换钱,现在骗子偷手机,是为了用你的信息各平台套现.近期,一篇名为<一部手机失窃而揭露的窃取个人信息实现资金盗取的黑色产业链>引发广泛关注,工信部约谈相关单位,并提 ...

  2. 华为手机预防丢失和丢失后怎么办?

    购买手机第一步[设置华为帐号] (一)华为帐号是什么? 华为帐号是一张通行证 可以带你畅游各项华为服务 (二)为什么要设置华为帐号?或者说登陆华为帐号,可以享受哪些福利? 福利1:可免费领取5GB云存 ...

  3. 手机丢失后的处理和思考

    缘起   新年出来玩,逛街时候不小心手机丢了,或者说不知道什么时候手机丢的,直到自己想起来使用手机时,才发现手机不见了.   现在手机已经不止是通讯的工具,已然成了现代人身体的一种延伸,或者说是自己另 ...

  4. 手机丢失后,不仅仅是报警,还应该让家人知情

    手机丢失是一种令人烦恼和担心的情况,但我们不能仅仅停留在报警一步.除了立即报警外,通知家人也至关重要.将家人置于这个事件的核心可以为我们提供额外的支持和保护. 一旦手机丢失,我们应立即冻结手机网银.通 ...

  5. 手把手教你手机丢失后支付宝微信里的处理方法

    国庆小长假近在眼前,制定好的出游计划马上就能实现,想必大家的心情一定很激动吧.作为一个"没有手机会死星"人,手机对于出游来说太重要了,不然怎么在朋友圈晒九宫格自拍呢.想象一下十一期 ...

  6. 央视调查真相:手机丢失后余额宝仍安全!

      3月15日,消费者保护权益日当天,央视二套<是真的吗>栏目对"手机丢失后,支付宝里的钱会不会丢失"进行了实验,实验结果表明:手机丢失后余额宝仍安全. 由于前段时间, ...

  7. 谈谈“个人电子信息”的保护

    谈谈"个人电子信息"的保护<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:off ...

  8. 多普达/PPC/微软系统手机按键硬启动大全

    多普达/PPC/微软系统手机按键硬启动大全686.696.818.828硬启动:   按住电源键,用触摸笔捅一下机器下面电源尾插旁边的小孔(resert)就可以了. 828+硬启动方法:   同时按住 ...

  9. iphone丢失后找回

    80后女孩4天追回丢失的iPhone4S 详细报道 杭州80后女孩李小姐的iPhone 4s手机在杭州胭脂巷被偷,一个小时后发现手机不见,后来报了警.手机一般都会设密码,后来李小姐在淘宝网看到说,手机 ...

最新文章

  1. 定义一个DOG类(Java)
  2. 安装 kubernetes-dashboard
  3. Ubuntu 15.1 unity在顶部面板显示系统CPU/内存/网络速度
  4. oracle bbed 使用,Oracle BBED使用 四步快速启动Oracle BBED
  5. Django项目--首页静态化
  6. 实际操作更改Linux启动模式
  7. MySQL对字符集_对MySQL字符集的认识
  8. Amoeba 主从复制和读写分离
  9. ps图层组快捷键 一次打开或关闭所有的顶级图层组
  10. 澳洲计算机博士怎么样,留学美国的一位计算机博士的感悟
  11. Cadence下载 安装 与 和谐教程
  12. java wifi开发教程_WiFi技术
  13. python实现截图转文字功能
  14. java计算机毕业设计小小银动漫网站源码+系统+数据库+lw文档+mybatis+运行部署
  15. 【职场加油站】给职场新人的几条忠告
  16. 独木舟上的旅行(贪心)C/C++
  17. springboot+Rabit实战二:(Rabbit MQ web 界面管理)
  18. 模式识别基本概念小结(学习笔记)
  19. 北大AI公开课13讲全链接+最强干货盘点:视频+笔记+文字实录
  20. 秋招C++开发学习之路day30

热门文章

  1. 评分卡模型开发(三)--数据集准备
  2. EP Limited: 开源ECG分析软件介绍
  3. jenkins教程_4 Docker+SpringCloud
  4. php xml扩展,php-SimpleXML,请不要扩展实体
  5. PAT (Basic Level) Practice1006 换个格式输出整数
  6. Flink API之Source入门
  7. Windows核心编程_修改开机密码
  8. 关于jquery中html()、text()、val()的区别
  9. Fedora音视频解码的配置
  10. 94. Binary Tree Inorder Traversal