- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了C#获取机器码的方法。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
|
using
System.Runtime.InteropServices;
using
System.Management;
using
System;
public
class
HardwareInfo
{
//取机器名
public
string
GetHostName()
{
return
System.Net.Dns.GetHostName();
}
//取CPU编号
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
//取第一块硬盘编号
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
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;
}
[StructLayout(LayoutKind.Sequential)]
public
struct
NAME_BUFFER
{
[MarshalAs(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;
[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
byte
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);
}
//取网卡mac
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(
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(
"{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2: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'
);
}
}
|
希望本文所述对大家C#程序设计有所帮助.
最后此篇关于C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)的文章就讲到这里了,如果你想了解更多关于C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我创建了一个具有高级非托管磁盘配置的 Azure RM VM。我有 1 个 127GB 的操作系统磁盘和一个大小为 56GB 的临时磁盘。我的操作系统磁盘还包含 SQL Server 和 ShareP
我正在开发一个目录树比较工具,它可以跨多台计算机工作,通过 TCP 与其他实例通信。 该工具运行良好,但到目前为止一直依赖于可由用户更改的驱动器号和标签。可移动驱动器是另一个问题。 我想通过某种唯一的
我正在使用硬盘 ID 为我的软件生成许可证 key 。在我的机器中,我得到 15 个字符长度的 ID。所有制造商的硬盘 ID 的这个长度是恒定的还是在它们之间变化? 是否有任何公认的方法来解释硬盘 I
本文实例讲述了java实现获取cpu、内存、硬盘、网络等信息的方法。分享给大家供大家参考,具体如下: 1. 下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包
我正在探索将 Aerospike 作为键值数据库,并将数据存储在磁盘上以确保安全。请确认,我理解正确: 如果在命名空间配置中我设置: 存储引擎设备 内存大小4G 文件/opt/aerospike/da
看着海藻,想换minio。主要原因 - 海藻可以很容易地用任意数量的节点/磁盘扩大。 但是对我的基础设施有几个问题。现在我有 2 个节点,每个节点有 100 个硬盘(HPE CL5800),它们被包含
我目前正在编写一个 CUDA 应用程序,并且遇到了一些“喂养野兽”的 IO 问题。 我想知道是否有任何方法可以直接从 RAID Controller 或 NIC 读取数据并将该数据直接发送到 GPU。
如何衡量文件(硬盘)I/O 的特性?例如,在具有硬盘(速度 X)和 cpu i7(或任何数量的内核)和 Y 数量的 ram(使用 Z Hz BIOS)的机器上(在 Windows 操作系统上): 可以
就像标题一样,我在裸机主机上安装了 RancherOS 并且想要 动态处理外部 USB 硬盘的添加/移除。它应该可以作为其他容器的绑定(bind)挂载访问。 最佳答案 你可以这样做: # udev_c
我想实现以下目标。 这样做的目的是让用户能够从他/她的硬盘驱动器中选择一个文件。 而没有上传的原因当然是传输成本和存储配额。没有理由保存文件。 这可能吗? 最佳答案 可以播放本地视频文件。 当
我想实现以下目标。 这样做的目的是让用户能够从他/她的硬盘驱动器中选择一个文件。 而没有上传的原因当然是传输成本和存储配额。没有理由保存文件。 这可能吗? 最佳答案 可以播放本地视频文件。 当
对于这些实例,在 C++ 运行时,有人可以大致说明什么是什么(硬盘、RAM、堆栈或堆): 局部/全局变量 类、方法和函数 指针 对象 堆栈/堆是否都位于物理 RAM 中? 如果有人可以在答案中包含硬件
我是 Synology 的新手。我想要访问我的 Synology NAS 驱动器。我遵循 Synology_Download_Station_Official_API。 我阅读了基本工作示例以获取 A
我想知道Linux(特别是树莓派)是否可以实现将我的有线电视接收器连接到我的树莓派(主/从?)有线电视接收器认为树莓派是硬盘但同时允许网络中的客户端获取录制的电影(当然不是正在录制的电影) 我猜 WD
由于我在本地主机上构建了许多虚拟网络,并且 htdocs 文件夹中的数据每天都在增加。 我想将 htdocs 文件夹移动到外部硬盘,可以这样做吗? 我尝试编辑 httpd.conf 文件。但是当我打开
我是一名优秀的程序员,十分优秀!