zoukankan
html css js c++ java
获取CPU,硬盘,网卡信息
using
System;
using
System.Runtime.InteropServices;
using
System.Text;
using
System.Management;
using
System.Collections.Generic;
namespace
Hardware
{
public
class
HardwareInfo
{
/**/
///
<summary>
///
cpu序列号
///
</summary>
public
static
List
<
string
>
GetCPUIds()
{
List
<
string
>
cpuInfos
=
new
List
<
string
>
();
ManagementClass cimobject
=
new
ManagementClass(
"
Win32_Processor
"
);
ManagementObjectCollection moc
=
cimobject.GetInstances();
foreach
(ManagementObject mo
in
moc)
{
string
cpuInfo
=
mo.Properties[
"
ProcessorId
"
].Value.ToString();
if
(
!
string
.IsNullOrEmpty(cpuInfo))
{
cpuInfos.Add(cpuInfo);
}
}
return
cpuInfos;
}
/**/
///
<summary>
///
获取硬盘ID
///
</summary>
public
static
List
<
string
>
GetHDIds()
{
List
<
string
>
hdIds
=
new
List
<
string
>
();
ManagementClass cimobject
=
new
ManagementClass(
"
Win32_DiskDrive
"
);
ManagementObjectCollection moc
=
cimobject.GetInstances();
foreach
(ManagementObject mo
in
moc)
{
String HDid
=
(
string
)mo.Properties[
"
Model
"
].Value.ToString();
if
(
!
string
.IsNullOrEmpty(HDid))
{
hdIds.Add(HDid);
}
}
return
hdIds;
}
/**/
///
<summary>
///
获取网卡MAC地址
///
</summary>
public
static
List
<
string
>
GetMacAddresses()
{
List
<
string
>
macs
=
new
List
<
string
>
();
ManagementClass mc
=
new
ManagementClass(
"
Win32_NetworkAdapterConfiguration
"
);
ManagementObjectCollection moc
=
mc.GetInstances();
foreach
(ManagementObject mo
in
moc)
{
if
((
bool
)mo[
"
IPEnabled
"
]
==
true
)
{
string
mac
=
mo[
"
MacAddress
"
].ToString();
if
(
!
string
.IsNullOrEmpty(mac))
{
macs.Add(mac);
}
}
}
return
macs;
}
}
partial
class
IDE
{
[StructLayout(LayoutKind.Sequential, CharSet
=
CharSet.Ansi)]
internal
struct
IDSECTOR
{
public
ushort
wGenConfig;
public
ushort
wNumCyls;
public
ushort
wReserved;
public
ushort
wNumHeads;
public
ushort
wBytesPerTrack;
public
ushort
wBytesPerSector;
public
ushort
wSectorsPerTrack;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
3
)]
public
ushort
[] wVendorUnique;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst
=
20
)]
public
string
sSerialNumber;
public
ushort
wBufferType;
public
ushort
wBufferSize;
public
ushort
wECCSize;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst
=
8
)]
public
string
sFirmwareRev;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst
=
40
)]
public
string
sModelNumber;
public
ushort
wMoreVendorUnique;
public
ushort
wDoubleWordIO;
public
ushort
wCapabilities;
public
ushort
wReserved1;
public
ushort
wPIOTiming;
public
ushort
wDMATiming;
public
ushort
wBS;
public
ushort
wNumCurrentCyls;
public
ushort
wNumCurrentHeads;
public
ushort
wNumCurrentSectorsPerTrack;
public
uint
ulCurrentSectorCapacity;
public
ushort
wMultSectorStuff;
public
uint
ulTotalAddressableSectors;
public
ushort
wSingleWordDMA;
public
ushort
wMultiWordDMA;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
128
)]
public
byte
[] bReserved;
}
[StructLayout(LayoutKind.Sequential)]
internal
struct
DRIVERSTATUS
{
public
byte
bDriverError;
public
byte
bIDEStatus;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
2
)]
public
byte
[] bReserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
2
)]
public
uint
[] dwReserved;
}
[StructLayout(LayoutKind.Sequential)]
internal
struct
SENDCMDOUTPARAMS
{
public
uint
cBufferSize;
public
DRIVERSTATUS DriverStatus;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
513
)]
public
byte
[] bBuffer;
}
[StructLayout(LayoutKind.Sequential, CharSet
=
CharSet.Ansi)]
internal
struct
SRB_IO_CONTROL
{
public
uint
HeaderLength;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst
=
8
)]
public
string
Signature;
public
uint
Timeout;
public
uint
ControlCode;
public
uint
ReturnCode;
public
uint
Length;
}
[StructLayout(LayoutKind.Sequential)]
internal
struct
IDEREGS
{
public
byte
bFeaturesReg;
public
byte
bSectorCountReg;
public
byte
bSectorNumberReg;
public
byte
bCylLowReg;
public
byte
bCylHighReg;
public
byte
bDriveHeadReg;
public
byte
bCommandReg;
public
byte
bReserved;
}
[StructLayout(LayoutKind.Sequential)]
internal
struct
SENDCMDINPARAMS
{
public
uint
cBufferSize;
public
IDEREGS irDriveRegs;
public
byte
bDriveNumber;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
3
)]
public
byte
[] bReserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
4
)]
public
uint
[] dwReserved;
public
byte
bBuffer;
}
[StructLayout(LayoutKind.Sequential)]
internal
struct
GETVERSIONOUTPARAMS
{
public
byte
bVersion;
public
byte
bRevision;
public
byte
bReserved;
public
byte
bIDEDeviceMap;
public
uint
fCapabilities;
[MarshalAs(UnmanagedType.ByValArray, SizeConst
=
4
)]
public
uint
[] dwReserved;
//
For future use.
}
[DllImport(
"
kernel32.dll
"
)]
private
static
extern
int
CloseHandle(
uint
hObject);
[DllImport(
"
kernel32.dll
"
)]
private
static
extern
int
DeviceIoControl(
uint
hDevice,
uint
dwIoControlCode,
ref
SENDCMDINPARAMS lpInBuffer,
int
nInBufferSize,
ref
SENDCMDOUTPARAMS lpOutBuffer,
int
nOutBufferSize,
ref
uint
lpbytesReturned,
int
lpOverlapped);
[DllImport(
"
kernel32.dll
"
)]
private
static
extern
int
DeviceIoControl(
uint
hDevice,
uint
dwIoControlCode,
int
lpInBuffer,
int
nInBufferSize,
ref
GETVERSIONOUTPARAMS lpOutBuffer,
int
nOutBufferSize,
ref
uint
lpbytesReturned,
int
lpOverlapped);
[DllImport(
"
kernel32.dll
"
)]
private
static
extern
uint
CreateFile(
string
lpFileName,
uint
dwDesiredAccess,
uint
dwShareMode,
int
lpSecurityAttributes,
uint
dwCreationDisposition,
uint
dwFlagsAndAttributes,
int
hTemplateFile);
private
const
uint
GENERIC_READ
=
0x80000000
;
private
const
uint
GENERIC_WRITE
=
0x40000000
;
private
const
uint
FILE_SHARE_READ
=
0x00000001
;
private
const
uint
FILE_SHARE_WRITE
=
0x00000002
;
private
const
uint
OPEN_EXISTING
=
3
;
private
const
uint
INVALID_HANDLE_VALUE
=
0xffffffff
;
private
const
uint
DFP_GET_VERSION
=
0x00074080
;
private
const
int
IDE_ATAPI_IDENTIFY
=
0xA1
;
//
Returns ID sector for ATAPI.
private
const
int
IDE_ATA_IDENTIFY
=
0xEC
;
//
Returns ID sector for ATA.
private
const
int
IDENTIFY_BUFFER_SIZE
=
512
;
private
const
uint
DFP_RECEIVE_DRIVE_DATA
=
0x0007c088
;
public
static
string
Read(
byte
drive)
{
OperatingSystem os
=
Environment.OSVersion;
if
(os.Platform
!=
PlatformID.Win32NT)
throw
new
NotSupportedException(
"
仅支持WindowsNT/2000/XP
"
);
//
if (os.Version.Major < 5) throw new NotSupportedException("仅支持WindowsNT/2000/XP");
string
driveName
=
"
\\\\.\\PhysicalDrive
"
+
drive.ToString();
uint
device
=
CreateFile(driveName,
GENERIC_READ
|
GENERIC_WRITE,
FILE_SHARE_READ
|
FILE_SHARE_WRITE,
0
, OPEN_EXISTING,
0
,
0
);
if
(device
==
INVALID_HANDLE_VALUE)
return
""
;
GETVERSIONOUTPARAMS verPara
=
new
GETVERSIONOUTPARAMS();
uint
bytRv
=
0
;
if
(
0
!=
DeviceIoControl(device, DFP_GET_VERSION,
0
,
0
,
ref
verPara, Marshal.SizeOf(verPara),
ref
bytRv,
0
))
{
if
(verPara.bIDEDeviceMap
>
0
)
{
byte
bIDCmd
=
(
byte
)(((verPara.bIDEDeviceMap
>>
drive
&
0x10
)
!=
0
)
?
IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY);
SENDCMDINPARAMS scip
=
new
SENDCMDINPARAMS();
SENDCMDOUTPARAMS scop
=
new
SENDCMDOUTPARAMS();
scip.cBufferSize
=
IDENTIFY_BUFFER_SIZE;
scip.irDriveRegs.bFeaturesReg
=
0
;
scip.irDriveRegs.bSectorCountReg
=
1
;
scip.irDriveRegs.bCylLowReg
=
0
;
scip.irDriveRegs.bCylHighReg
=
0
;
scip.irDriveRegs.bDriveHeadReg
=
(
byte
)(
0xA0
|
((drive
&
1
)
<<
4
));
scip.irDriveRegs.bCommandReg
=
bIDCmd;
scip.bDriveNumber
=
drive;
if
(
0
!=
DeviceIoControl(device, DFP_RECEIVE_DRIVE_DATA,
ref
scip, Marshal.SizeOf(scip),
ref
scop,
Marshal.SizeOf(scop),
ref
bytRv,
0
))
{
StringBuilder s
=
new
StringBuilder();
for
(
int
i
=
20
; i
<
40
; i
+=
2
)
{
s.Append((
char
)(scop.bBuffer[i
+
1
]));
s.Append((
char
)scop.bBuffer[i]);
}
CloseHandle(device);
return
s.ToString().Trim();
}
}
}
CloseHandle(device);
return
""
;
}
}
}
查看全文
相关阅读:
Ubuntu12.04安装svn1.8
[NOIP模拟测试3] 建造游乐园 题解(欧拉图性质)
图论模板
[bzoj3073] Journeys 题解(线段树优化建图)
[bzoj3033]太鼓达人 题解(搜索)
[NOIP2016]天天爱跑步 题解(树上差分) (码长短跑的快)
[HNOI2015]菜肴制作 题解(贪心+拓扑)
[SDOI2015]排序 题解 (搜索)
[CQOI2011]放棋子 题解(dp+组合数学)
[ZJOI2011]看电影(组合数学/打表+高精)
原文地址:https://www.cnblogs.com/yvesliao/p/1587588.html
最新文章
袜子 (并查集)
HDU1253 胜利大逃亡 (BFS)
POJ1664 放苹果 (母函数)
kuangbin专题十二 HDU1078 FatMouse and Cheese )(dp + dfs 记忆化搜索)
kuangbin专题十二 POJ3186 Treats for the Cows (区间dp)
kuangbin专题十二 POJ1661 Help Jimmy (dp)
学习进度第三周
返回一个整数数组中最大子数组的和。(续)
学习进度第二周
返回一个整数数组中最大子数组的和。
热门文章
第一周博客
学习进度3.9
学习进度第一周
开学测试
梦断代码
程序员修炼之道:从小工到专家
var functionName = function() {} vs function functionName() {}
curl 发送带有Authorization的post请求命令
VirtualBox 设置共享文件夹自动挂载
PHP中空字符串、0、null、empty和false之间的关系
Copyright © 2011-2022 走看看