win ce里取设备的UUID

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.IO;
using System.Security.Cryptography;
using System.Text.RegularExpressions;


namespace SmartDeviceProject7
{
    class CheckDev
    {
        private static string[] strEncrypt = new string[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "AA", "AB", "AC", "AD", "AE", "AF", "AG", "AH", "AI", "AJ", "AK", "AL", "AM", "AN", "AO", "AP" };
        private static Int32 METHOD_BUFFERED = 0;
        private static Int32 FILE_ANY_ACCESS = 0;
        private static Int32 FILE_DEVICE_HAL = 0x00000101;
        private const Int32 ERROR_NOT_SUPPORTED = 0x32;
        private const Int32 ERROR_INSUFFICIENT_BUFFER = 0x7A;
        private static Int32 IOCTL_HAL_GET_DEVICEID = ((FILE_DEVICE_HAL) << 16) | ((FILE_ANY_ACCESS) << 14) | ((21) << 2) | (METHOD_BUFFERED);
        [DllImport("coredll.dll", SetLastError = true)]
        private static extern bool KernelIoControl(Int32 dwIoControlCode, IntPtr lpInBuf, Int32 nInBufSize, byte[] lpOutBuf, Int32 nOutBufSize, ref   Int32 lpBytesReturned);
        ///


        /// 获取设备号
        ///

        ///
        public static string GetDeviceID()
        {
            try
            {
                //   Initialize   the   output   buffer   to   the   size   of   a   Win32   DEVICE_ID   structure  
                byte[] outbuff = new byte[20];
                Int32 dwOutBytes;
                bool done = false;

                Int32 nBuffSize = outbuff.Length;

                //   Set   DEVICEID.dwSize   to   size   of   buffer.     Some   platforms   look   at  
                //   this   field   rather   than   the   nOutBufSize   param   of   KernelIoControl  
                //   when   determining   if   the   buffer   is   large   enough.  
                //  
                BitConverter.GetBytes(nBuffSize).CopyTo(outbuff, 0);
                dwOutBytes = 0;


                //   Loop   until   the   device   ID   is   retrieved   or   an   error   occurs  
                while (!done)
                {
                    if (KernelIoControl(IOCTL_HAL_GET_DEVICEID, IntPtr.Zero, 0, outbuff, nBuffSize, ref   dwOutBytes))
                    {
                        done = true;
                    }
                    else
                    {
                        int error = Marshal.GetLastWin32Error();
                        switch (error)
                        {
                            case ERROR_NOT_SUPPORTED:
                                throw new NotSupportedException("IOCTL_HAL_GET_DEVICEID   is   not   supported   on   this   device ", new Win32Exception(error));

                            case ERROR_INSUFFICIENT_BUFFER:
                                //   The   buffer   wasn 't   big   enough   for   the   data.     The  
                                //   required   size   is   in   the   first   4   bytes   of   the   output  
                                //   buffer   (DEVICE_ID.dwSize).  
                                nBuffSize = BitConverter.ToInt32(outbuff, 0);
                                outbuff = new byte[nBuffSize];

                                //   Set   DEVICEID.dwSize   to   size   of   buffer.     Some  
                                //   platforms   look   at   this   field   rather   than   the  
                                //   nOutBufSize   param   of   KernelIoControl   when  
                                //   determining   if   the   buffer   is   large   enough.  
                                //  
                                BitConverter.GetBytes(nBuffSize).CopyTo(outbuff, 0);
                                break;

                            default:
                                throw new Win32Exception(error, "Unexpected   error ");
                        }
                    }
                }

                Int32 dwPresetIDOffset = BitConverter.ToInt32(outbuff, 0x4);         //   DEVICE_ID.dwPresetIDOffset  
                Int32 dwPresetIDSize = BitConverter.ToInt32(outbuff, 0x8);             //   DEVICE_ID.dwPresetSize  
                Int32 dwPlatformIDOffset = BitConverter.ToInt32(outbuff, 0xc);     //   DEVICE_ID.dwPlatformIDOffset  
                Int32 dwPlatformIDSize = BitConverter.ToInt32(outbuff, 0x10);       //   DEVICE_ID.dwPlatformIDBytes  
                StringBuilder sb = new StringBuilder();

                for (int i = dwPresetIDOffset; i < dwPresetIDOffset + dwPresetIDSize; i++)
                {
                    //sb.Append(String.Format( "{0:X2} ",   outbuff[i])); 
                    sb.Append(String.Format("{0} ", outbuff[i]));
                }

                //sb.Append("- "); 
                //for (int i = dwPlatformIDOffset; i < dwPlatformIDOffset + dwPlatformIDSize; i++) 
                //{ 
                //    //sb.Append(String.Format( "{0:X2} ",   outbuff[i])); 
                //    sb.Append(String.Format("{0} ", outbuff[i])); 

                //} 

                return Regex.Replace(sb.ToString(), @"\s", "");//去掉获取字符串中的空格
            }
            catch (System.Exception e)
            {
                MessageBox.Show("取设备序列号异常" + e.Message);
                StringBuilder sb = new StringBuilder();
                sb.Append("请联系我们:037167868667");
                return sb.ToString();
            }
        }
        public static string GetEncrypt(string strDeviceID)
        {
            int i, no;

            StringBuilder sb = new StringBuilder();
            for (i = 0; i < strDeviceID.Length; i++)
            {
                try
                {
                    no = int.Parse(strDeviceID[i].ToString());
                }
                catch (System.Exception ex)
                {
                    no = 1;
                }

                if (no > strEncrypt.Length)
                    no = no % strEncrypt.Length;
                sb.Append(String.Format("{0}", strEncrypt[no]));
            }

            return sb.ToString();
        }
        ///


        ///判断设备是否为我公司授权
        ///

        public static bool Check()
        {
            string[] _UUID = { "13726218220181307811040", "87010501100100011101190115032067069000" };//为设备号
            string uuid = GetDeviceID();
            foreach (string str2 in _UUID)
            {
                if (str2 == uuid)
                {
                    return true;

                }
             }
            return false ;
        }

    }

}

你可能感兴趣的:(win ce里取设备的UUID)