c# wince 取设备号

wince设备,有时为了做软件保护,采取注册限制,需要取设备的序列号,以下为通用的取法,网上抄的。

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; namespace Check { class LiangDeviceID { 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 sb.ToString(); } catch (System.Exception e) { MessageBox.Show("取设备序列号异常"+e.Message ); StringBuilder sb = new StringBuilder(); sb.Append("austec 010-59713137"); 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(); } } }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值