Using system;
Using system. runtime. interopservices;
Using system. Management;
Namespace mzwucom. Common
{
/// <Summary>
/// Summary of hardware_mac.
/// </Summary>
Public class hardwareinfo
{
/// <Summary>
/// Obtain the Host Name of the Local Computer
/// </Summary>
/// <Returns> </returns>
Public String gethostname ()
{
Return System. net. DNS. gethostname ();
}
/// <Summary>
/// Obtain the CPU ID
/// </Summary>
/// <Returns> </returns>
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
/// <Summary>
/// Obtain the first hard disk number
/// </Summary>
/// <Returns> </returns>
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 strharddiskid;
}
Catch
{
Return "";
}
} // End
/// <Summary>
/// Obtain the MAC address
/// </Summary>
/// <Returns> </returns>
Public String getmacaddress ()
{
String ADDR = "";
Try
{
Int CB;
Astat adapter;
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 (ref 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 <lenum. length; I ++)
{
NCB. ncb_command = (byte) ncbconst. ncbreset;
NCB. ncb_lana_num = lenum. Lana [I];
Uretcode = WIN32API. NetBIOS (ref NCB );
If (uretcode! = (Short) ncbconst. nrc_goodret)
Return "";
NCB. ncb_command = (byte) ncbconst. ncbastat;
NCB. ncb_lana_num = lenum. Lana [I];
NCB. ncb_callname [0] = (byte )'*';
CB = marshal. sizeof (typeof (adapter_status) + marshal. sizeof (typeof (name_buffer) * (INT) ncbconst. num_namebuf;
NCB. ncb_buffer = marshal. allochglobal (CB );
NCB. ncb_length = (ushort) Cb;
Uretcode = WIN32API. NetBIOS (ref NCB );
Adapter. Adapt = (adapter_status) Marshal. ptrtostructure (NCB. ncb_buffer, typeof (adapter_status ));
Marshal. freehglobal (NCB. ncb_buffer );
If (uretcode = (short) ncbconst. nrc_goodret)
{
If (I> 0)
ADDR + = ":";
ADDR = string. Format ("{: x }",
Adapter. Adapt. adapter_address [0],
Adapter. Adapt. adapter_address [1],
Adapter. Adapt. adapter_address [2],
Adapter. Adapt. adapter_address [3],
Adapter. Adapt. adapter_address [4],
Adapter. Adapt. adapter_address [5]);
}
}
}
Catch
{}
Return ADDR. Replace ('', '0 ');
}
# Region structure, enumeration...
Public Enum ncbconst
{
Ncbnamsz = 16,/** // */* absolute length of a net name */
Max_lana = 254,/** // * Lana's in range 0 to max_lana wide */
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
{
[Financialas (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;
}
[Structlayout (layoutkind. Sequential)]
Public struct name_buffer
{
[Financialas (unmanagedtype. byvalarray, sizeconst = (INT) 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;
[Financialas (unmanagedtype. byvalarray, sizeconst = (INT) ncbconst. ncbnamsz)]
Public byte [] ncb_callname;
[Financialas (unmanagedtype. byvalarray, sizeconst = (INT) ncbconst. ncbnamsz)]
Public byte [] ncb_name;
Public byte ncb_rto;
Public byte ncb_sto;
Public intptr ncb_post;
Public byte ncb_lana_num;
Public byte ncb_rj_cplt;
[Financialas (unmanagedtype. byvalarray, sizeconst = 10)]
Public byte [] ncb_reserve;
Public intptr ncb_event;
}
[Structlayout (layoutkind. Sequential)]
Public struct lana_enum
{
Public byte length;
[Financialas (unmanagedtype. byvalarray, sizeconst = (INT) ncbconst. max_lana)]
Public byte [] Lana;
}
[Structlayout (layoutkind. Auto)]
Public struct astat
{
Public adapter_status adapt;
[Financialas (unmanagedtype. byvalarray, sizeconst = (INT) ncbconst. num_namebuf)]
Public name_buffer [] namebuff;
}
Public class WIN32API
{
[Dllimport ("netapi32.dll")]
Public static extern char NetBIOS (ref NCB );
}
# Endregion
}
}