Using system; use system.Runtime.InteropServices; Using System.Management; Namespace Hardware {///
/// summary> public class hardwareinfo {// Take the machine name public string gethostname () {return system.net.dns.getHostName ();} // Take the CPU number public string getcpuid () {Try {managementClass MC = new ManagementClass ( "Win32_Processor"); ManagementObjectCollection moc = mc.GetInstances (); String strCpuID = null; foreach (ManagementObject mo in moc) {strCpuID = mo.Properties [ "ProcessorId"] value.ToString ();. break;} return strCpuID;} catch {return "";}} // end method // take the first disk ID public String GetHardDiskID () {try {ManagementObjectSearcher searcher = new ManagementObjectSearcher ( "SELECT * FROM Win32_PhysicalMedia"); String strHardDiskID = null Foreach (ManagementObject Mo in Searcher.get ()) {strharddiskid = Mo ["serialnumber"]. TOSTRING (). Trim (); break;} return strhardiSkid;} catch {return ";}}} // End public enum NCBCONST {ncbnamsz = 16, / * Absolute Length of a net name * / MAX_LANA = 254, / * lana's in range 0 to MAX_LANA inclusive * / NCBENUM = 0x37, / * NCB ENUMERATE LANA NUMBERS * / NRC_GOODRET = 0x00, / * good return * / NCBRESET = 0x32, / * NCB RESET * / NCBASTAT = 0x33, / * NCB ADAPTER STATUS * / NUM_NAMEBUF = 30, / * Number of NAME's BUFFER * /} [StructLayout (LayoutKind.Sequential)] public struct ADAPTER_STATUS {[MarshalAs (UnmanagedType.ByValArray, SizeConst = 6) ] Public byte [] adapter_address;
public byte rev_major; public byte reserved0; public byte adapter_type; public byte rev_minor; public ushort duration; public ushort frmr_recv; public ushort frmr_xmit; public ushort iframe_recv_err; public ushort xmit_aborts; public uint xmit_success; public uint recv_success; public ushort iframe_xmit_err; public ushort recv_buff_unavail; public ushort t1_timeouts; public ushort ti_timeouts; public uint reserved1; public ushort free_ncbs; public ushort max_cfg_ncbs; public ushort max_ncbs; public ushort xmit_buf_unavail; public ushort max_dgram_size; public ushort pending_sess; public ushort max_cfg_sess; public ushort max_sess; public ushort max_sess_pkt_size; Public ushort name_count;} [structurekind.sequential] public struct name_buffer {[Marshalas (unmanagedtype.byvalarray, sizeconst = (in t) NCBCONST.NCBNAMSZ)] public byte [] name; public byte name_num; public byte name_flags;} [StructLayout (LayoutKind.Sequential)] public struct NCB {public byte ncb_command; public byte ncb_retcode; public byte ncb_lsn; public byte ncb_num; public IntPtr ncb_buffer; public ushort ncb_length; [MarshalAs (UnmanagedType.ByValArray, SizeConst = (int) NCBCONST.NCBNAMSZ)] public byte [] ncb_callname; [MarshalAs (UnmanagedType.ByValArray, SizeConst = (int) NCBCONST.NCBNAMSZ)] public byte [] NCB_NAME; Public Byte NCB_RTO; Public INTE NCB_STO; Public INTPTR NCB_POST; Public Byte NCB_LANA_NUM; Public Byte NCB_CMD_CPLT;
[MarshalAs (UnmanagedType.ByValArray, SizeConst = 10)] public byte [] ncb_reserve; public IntPtr ncb_event;} [StructLayout (LayoutKind.Sequential)] public struct LANA_ENUM {public byte length; [MarshalAs (UnmanagedType.ByValArray, SizeConst = (int ) NCBCONST.MAX_LANA)] public byte [] lana;} [StructLayout (LayoutKind.Auto)] public struct ASTAT {public ADAPTER_STATUS adapt; [MarshalAs (UnmanagedType.ByValArray, SizeConst = (int) NCBCONST.NUM_NAMEBUF)] public NAME_BUFFER [] NameBuff;} public class Win32API {[DllImport ( "NETAPI32.DLL")] public static extern char Netbios (ref NCB ncb);} public string getMacAddress () {string addr = ""; try {int cb; ASTAT adapter; NCB Ncb = new NCB (); char uRetCode; LANA_ENUM lenum; Ncb.ncb_command = (byte) NCBCONST.NCBENUM; cb = Marshal.SizeOf (typeof (LANA_ENUM)); Ncb.ncb_buffer = Marshal.AllocHGlobal (cb); Ncb.ncb_length = (ushort) cb; uretcode = win32api.netbios (r ef Ncb); lenum = (LANA_ENUM) Marshal.PtrToStructure (Ncb.ncb_buffer, typeof (LANA_ENUM)); Marshal.FreeHGlobal (Ncb.ncb_buffer);! if (uRetCode = (short) NCBCONST.NRC_GOODRET) return ""; for ( INT i = 0; i