wince設(shè)備,,有時(shí)為了做軟件保護(hù),采取注冊(cè)限制,,需要取設(shè)備的序列號(hào),以下為通用的取法,,網(wǎng)上抄的,。
- 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("取設(shè)備序列號(hào)異常"+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();
- }
- }
- }
|