SMBIOS ver 1.0
This commit is contained in:
@@ -0,0 +1,185 @@
|
|||||||
|
object frmMain: TfrmMain
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
BorderIcons = [biSystemMenu]
|
||||||
|
Caption = 'SMBIOS '#49368#54540
|
||||||
|
ClientHeight = 583
|
||||||
|
ClientWidth = 504
|
||||||
|
Color = clBtnFace
|
||||||
|
Font.Charset = DEFAULT_CHARSET
|
||||||
|
Font.Color = clWindowText
|
||||||
|
Font.Height = -12
|
||||||
|
Font.Name = 'Segoe UI'
|
||||||
|
Font.Style = []
|
||||||
|
Position = poDesktopCenter
|
||||||
|
TextHeight = 15
|
||||||
|
object lcMain: TdxLayoutControl
|
||||||
|
Left = 0
|
||||||
|
Top = 0
|
||||||
|
Width = 504
|
||||||
|
Height = 583
|
||||||
|
Align = alClient
|
||||||
|
TabOrder = 0
|
||||||
|
LayoutLookAndFeel = dxLayoutSkinLookAndFeel1
|
||||||
|
ExplicitWidth = 531
|
||||||
|
ExplicitHeight = 466
|
||||||
|
object btnGetSn: TcxButton
|
||||||
|
Left = 12
|
||||||
|
Top = 526
|
||||||
|
Width = 480
|
||||||
|
Height = 35
|
||||||
|
Caption = #49884#47532#50620#45336#48260' '#52628#52636
|
||||||
|
TabOrder = 5
|
||||||
|
OnClick = btnGetSnClick
|
||||||
|
end
|
||||||
|
object teCpuSerialNum: TcxTextEdit
|
||||||
|
Left = 75
|
||||||
|
Top = 88
|
||||||
|
AutoSize = False
|
||||||
|
Style.HotTrack = False
|
||||||
|
Style.TransparentBorder = False
|
||||||
|
TabOrder = 0
|
||||||
|
Height = 25
|
||||||
|
Width = 417
|
||||||
|
end
|
||||||
|
object teMbSerialNum: TcxTextEdit
|
||||||
|
Left = 75
|
||||||
|
Top = 120
|
||||||
|
AutoSize = False
|
||||||
|
Style.HotTrack = False
|
||||||
|
Style.TransparentBorder = False
|
||||||
|
TabOrder = 1
|
||||||
|
Height = 25
|
||||||
|
Width = 417
|
||||||
|
end
|
||||||
|
object teHddSerialNum: TcxTextEdit
|
||||||
|
Left = 75
|
||||||
|
Top = 152
|
||||||
|
AutoSize = False
|
||||||
|
Style.HotTrack = False
|
||||||
|
Style.TransparentBorder = False
|
||||||
|
TabOrder = 2
|
||||||
|
Height = 25
|
||||||
|
Width = 417
|
||||||
|
end
|
||||||
|
object teNetworkMac: TcxTextEdit
|
||||||
|
Left = 75
|
||||||
|
Top = 184
|
||||||
|
AutoSize = False
|
||||||
|
Style.HotTrack = False
|
||||||
|
Style.TransparentBorder = False
|
||||||
|
TabOrder = 3
|
||||||
|
Height = 25
|
||||||
|
Width = 417
|
||||||
|
end
|
||||||
|
object mmLog: TcxMemo
|
||||||
|
Left = 12
|
||||||
|
Top = 226
|
||||||
|
Properties.ScrollBars = ssVertical
|
||||||
|
Style.HotTrack = False
|
||||||
|
Style.TransparentBorder = False
|
||||||
|
TabOrder = 4
|
||||||
|
Height = 266
|
||||||
|
Width = 480
|
||||||
|
end
|
||||||
|
object lgRoot: TdxLayoutGroup
|
||||||
|
AlignHorz = ahClient
|
||||||
|
AlignVert = avClient
|
||||||
|
Hidden = True
|
||||||
|
ItemIndex = 5
|
||||||
|
ShowBorder = False
|
||||||
|
Index = -1
|
||||||
|
end
|
||||||
|
object dxLayoutItem1: TdxLayoutItem
|
||||||
|
Parent = lgRoot
|
||||||
|
Padding.Bottom = 10
|
||||||
|
Padding.AssignedValues = [lpavBottom]
|
||||||
|
CaptionOptions.Text = 'cxButton1'
|
||||||
|
CaptionOptions.Visible = False
|
||||||
|
Control = btnGetSn
|
||||||
|
ControlOptions.OriginalHeight = 35
|
||||||
|
ControlOptions.OriginalWidth = 75
|
||||||
|
ControlOptions.ShowBorder = False
|
||||||
|
Index = 7
|
||||||
|
end
|
||||||
|
object dxLayoutItem2: TdxLayoutItem
|
||||||
|
Parent = lgRoot
|
||||||
|
CaptionOptions.Text = 'CPU'
|
||||||
|
Control = teCpuSerialNum
|
||||||
|
ControlOptions.OriginalHeight = 25
|
||||||
|
ControlOptions.OriginalWidth = 121
|
||||||
|
ControlOptions.ShowBorder = False
|
||||||
|
Index = 1
|
||||||
|
end
|
||||||
|
object dxLayoutItem3: TdxLayoutItem
|
||||||
|
Parent = lgRoot
|
||||||
|
CaptionOptions.Text = 'Mainboard'
|
||||||
|
Control = teMbSerialNum
|
||||||
|
ControlOptions.OriginalHeight = 25
|
||||||
|
ControlOptions.OriginalWidth = 121
|
||||||
|
ControlOptions.ShowBorder = False
|
||||||
|
Index = 2
|
||||||
|
end
|
||||||
|
object dxLayoutItem4: TdxLayoutItem
|
||||||
|
Parent = lgRoot
|
||||||
|
CaptionOptions.Text = 'HDD'
|
||||||
|
Control = teHddSerialNum
|
||||||
|
ControlOptions.OriginalHeight = 25
|
||||||
|
ControlOptions.OriginalWidth = 121
|
||||||
|
ControlOptions.ShowBorder = False
|
||||||
|
Index = 3
|
||||||
|
end
|
||||||
|
object dxLayoutLabeledItem1: TdxLayoutLabeledItem
|
||||||
|
Parent = lgRoot
|
||||||
|
Padding.Bottom = 10
|
||||||
|
Padding.Top = 10
|
||||||
|
Padding.AssignedValues = [lpavBottom, lpavTop]
|
||||||
|
CaptionOptions.AlignHorz = taCenter
|
||||||
|
CaptionOptions.Text = '[SIZE=20][B]SMBIOS '#49884#47532#50620' '#45336#48260'[/B][/SIZE]'
|
||||||
|
Index = 0
|
||||||
|
end
|
||||||
|
object dxLayoutEmptySpaceItem1: TdxLayoutEmptySpaceItem
|
||||||
|
Parent = lgRoot
|
||||||
|
SizeOptions.Height = 20
|
||||||
|
SizeOptions.Width = 10
|
||||||
|
CaptionOptions.Text = 'Empty Space Item'
|
||||||
|
Index = 6
|
||||||
|
end
|
||||||
|
object dxLayoutItem5: TdxLayoutItem
|
||||||
|
Parent = lgRoot
|
||||||
|
CaptionOptions.Text = 'LAN'
|
||||||
|
Control = teNetworkMac
|
||||||
|
ControlOptions.OriginalHeight = 25
|
||||||
|
ControlOptions.OriginalWidth = 121
|
||||||
|
ControlOptions.ShowBorder = False
|
||||||
|
Index = 4
|
||||||
|
end
|
||||||
|
object dxLayoutItem6: TdxLayoutItem
|
||||||
|
Parent = lgRoot
|
||||||
|
AlignVert = avClient
|
||||||
|
Padding.Top = 10
|
||||||
|
Padding.AssignedValues = [lpavTop]
|
||||||
|
CaptionOptions.Text = 'cxMemo1'
|
||||||
|
CaptionOptions.Visible = False
|
||||||
|
Control = mmLog
|
||||||
|
ControlOptions.OriginalHeight = 89
|
||||||
|
ControlOptions.OriginalWidth = 185
|
||||||
|
ControlOptions.ShowBorder = False
|
||||||
|
Index = 5
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object dxLayoutLookAndFeelList: TdxLayoutLookAndFeelList
|
||||||
|
Left = 56
|
||||||
|
Top = 16
|
||||||
|
object dxLayoutSkinLookAndFeel1: TdxLayoutSkinLookAndFeel
|
||||||
|
PixelsPerInch = 96
|
||||||
|
end
|
||||||
|
end
|
||||||
|
object scMain: TdxSkinController
|
||||||
|
NativeStyle = False
|
||||||
|
SkinName = 'WXI'
|
||||||
|
SkinPaletteName = 'Clearness'
|
||||||
|
Left = 16
|
||||||
|
Top = 16
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
unit MainForm;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
|
||||||
|
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus,
|
||||||
|
|
||||||
|
{ DevExpress}
|
||||||
|
cxGraphics, dxUIAClasses, cxControls, cxLookAndFeels, cxLookAndFeelPainters,
|
||||||
|
dxSkinsCore, dxSkinWXI, dxLayoutControlAdapters, dxLayoutcxEditAdapters, cxContainer,
|
||||||
|
cxEdit, dxLayoutContainer, cxTextEdit, cxButtons, cxClasses, dxLayoutControl,
|
||||||
|
dxCore, dxSkinsForm, dxLayoutLookAndFeels, cxMemo;
|
||||||
|
|
||||||
|
type
|
||||||
|
TfrmMain = class(TForm)
|
||||||
|
lgRoot: TdxLayoutGroup;
|
||||||
|
lcMain: TdxLayoutControl;
|
||||||
|
btnGetSn: TcxButton;
|
||||||
|
dxLayoutItem1: TdxLayoutItem;
|
||||||
|
teCpuSerialNum: TcxTextEdit;
|
||||||
|
dxLayoutItem2: TdxLayoutItem;
|
||||||
|
teMbSerialNum: TcxTextEdit;
|
||||||
|
dxLayoutItem3: TdxLayoutItem;
|
||||||
|
teHddSerialNum: TcxTextEdit;
|
||||||
|
dxLayoutItem4: TdxLayoutItem;
|
||||||
|
dxLayoutLabeledItem1: TdxLayoutLabeledItem;
|
||||||
|
dxLayoutEmptySpaceItem1: TdxLayoutEmptySpaceItem;
|
||||||
|
teNetworkMac: TcxTextEdit;
|
||||||
|
dxLayoutItem5: TdxLayoutItem;
|
||||||
|
dxLayoutLookAndFeelList: TdxLayoutLookAndFeelList;
|
||||||
|
dxLayoutSkinLookAndFeel1: TdxLayoutSkinLookAndFeel;
|
||||||
|
scMain: TdxSkinController;
|
||||||
|
mmLog: TcxMemo;
|
||||||
|
dxLayoutItem6: TdxLayoutItem;
|
||||||
|
procedure btnGetSnClick(Sender: TObject);
|
||||||
|
private
|
||||||
|
{ Private declarations }
|
||||||
|
public
|
||||||
|
{ Public declarations }
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
frmMain: TfrmMain;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
{$R *.dfm}
|
||||||
|
|
||||||
|
uses
|
||||||
|
GO2.SMBios;
|
||||||
|
|
||||||
|
procedure TfrmMain.btnGetSnClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
teCpuSerialNum.Text:= GetCPUSerialNumber;
|
||||||
|
teMbSerialNum.Text:= GetMainboardSerialNumber;
|
||||||
|
teHddSerialNum.Text:= GetHDDSerialNumber;
|
||||||
|
teNetworkMac.Text:= GetNetworkAdapterSerialNumber;
|
||||||
|
mmLog.Text:= GetHardwareInformation;
|
||||||
|
end;
|
||||||
|
|
||||||
|
end.
|
||||||
@@ -1,3 +1,22 @@
|
|||||||
# SMBIOS
|
# SMBIOS
|
||||||
|
|
||||||
각종 디바이스 시리얼 넘버 구하기
|
SMBIOS(System Management BIOS)는 [SMBIOS](http://www.dmtf.org/standards/smbios) DMTF에서 개발한 표준입니다.
|
||||||
|
|
||||||
|
 [tsmbios](https://github.com/RRUZ/tsmbios) 델파이 라이브러리를 쉽게 사용하기 위해 델파이 언어로 개발되었습니다.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
* 2024.12.19 버전 1.0으로 샘플을 개발되었습니다.
|
||||||
|
* 불법 KMS 인증 OS는 CPU가 똑 같은 시리얼을 제공하는것을 발견하였습니다.
|
||||||
|
|
||||||
|
## Sample source code
|
||||||
|
제공되는 함수는 아래와 같습니다.
|
||||||
|
네트워크는 MAC Address로 제공되며 기본은 유선LAN이며 True면 무선LAN 제공합니다.
|
||||||
|
|
||||||
|
``` delphi
|
||||||
|
function GetCPUSerialNumber: string;
|
||||||
|
function GetMainboardSerialNumber: string;
|
||||||
|
function GetHDDSerialNumber: string;
|
||||||
|
function GetNetworkAdapterSerialNumber(IncludeWireless: Boolean = False): string;
|
||||||
|
function GetHardwareInformation: string;
|
||||||
|
```
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
program SMBIOS_Sample;
|
||||||
|
|
||||||
|
uses
|
||||||
|
Vcl.Forms,
|
||||||
|
MainForm in 'Form\MainForm.pas' {frmMain},
|
||||||
|
GO2.SMBios in 'Utility\GO2.SMBios.pas',
|
||||||
|
RRUZ.SMBIOS in 'Utility\RRUZ.SMBIOS.pas';
|
||||||
|
|
||||||
|
{$R *.res}
|
||||||
|
|
||||||
|
begin
|
||||||
|
Application.Initialize;
|
||||||
|
Application.MainFormOnTaskbar := True;
|
||||||
|
Application.CreateForm(TfrmMain, frmMain);
|
||||||
|
Application.Run;
|
||||||
|
end.
|
||||||
+1119
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<BorlandProject>
|
||||||
|
<Transactions>
|
||||||
|
<Transaction>1899-12-30 00:00:00.000.759,=D:\Embarcadero\projects\Unit1.pas</Transaction>
|
||||||
|
<Transaction>1899-12-30 00:00:00.000.690,=D:\Embarcadero\projects\Unit1.pas</Transaction>
|
||||||
|
<Transaction>1899-12-30 00:00:00.000.251,D:\Embarcadero\projects\Unit1.pas=D:\Embarcadero\projects\SMBIOS\source\Form\MainForm.pas</Transaction>
|
||||||
|
<Transaction>1899-12-30 00:00:00.000.141,D:\Embarcadero\projects\Project1.dproj=D:\Embarcadero\projects\SMBIOS\source\SMBIOS_Sample.dproj</Transaction>
|
||||||
|
<Transaction>1899-12-30 00:00:00.000.251,D:\Embarcadero\projects\Unit1.dfm=D:\Embarcadero\projects\SMBIOS\source\Form\MainForm.dfm</Transaction>
|
||||||
|
<Transaction>1899-12-30 00:00:00.000.716,=D:\Embarcadero\projects\SMBIOS\source\Unit1.pas</Transaction>
|
||||||
|
<Transaction>1899-12-30 00:00:00.000.447,=D:\Embarcadero\projects\Unit1.pas</Transaction>
|
||||||
|
<Transaction>1899-12-30 00:00:00.000.509,D:\Embarcadero\projects\SMBIOS\source\Unit1.pas=D:\Embarcadero\projects\SMBIOS\source\Utility\GO2.SMBios.pas</Transaction>
|
||||||
|
<Transaction>2024-12-19 17:45:07.018,=D:\Embarcadero\projects\SMBIOS\source\Utility\RRUZ.SMBIOS.pas</Transaction>
|
||||||
|
</Transactions>
|
||||||
|
</BorlandProject>
|
||||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,61 @@
|
|||||||
|
[ExpressSkins]
|
||||||
|
Default=0
|
||||||
|
ShowNotifications=0
|
||||||
|
Enabled=1
|
||||||
|
dxSkinBasic=0
|
||||||
|
dxSkinBlack=0
|
||||||
|
dxSkinBlue=0
|
||||||
|
dxSkinBlueprint=0
|
||||||
|
dxSkinCaramel=0
|
||||||
|
dxSkinCoffee=0
|
||||||
|
dxSkinDarkroom=0
|
||||||
|
dxSkinDarkSide=0
|
||||||
|
dxSkinDevExpressDarkStyle=0
|
||||||
|
dxSkinDevExpressStyle=0
|
||||||
|
dxSkinFoggy=0
|
||||||
|
dxSkinGlassOceans=0
|
||||||
|
dxSkinHighContrast=0
|
||||||
|
dxSkiniMaginary=0
|
||||||
|
dxSkinLilian=0
|
||||||
|
dxSkinLiquidSky=0
|
||||||
|
dxSkinLondonLiquidSky=0
|
||||||
|
dxSkinMcSkin=0
|
||||||
|
dxSkinMetropolis=0
|
||||||
|
dxSkinMetropolisDark=0
|
||||||
|
dxSkinMoneyTwins=0
|
||||||
|
dxSkinOffice2007Black=0
|
||||||
|
dxSkinOffice2007Blue=0
|
||||||
|
dxSkinOffice2007Green=0
|
||||||
|
dxSkinOffice2007Pink=0
|
||||||
|
dxSkinOffice2007Silver=0
|
||||||
|
dxSkinOffice2010Black=0
|
||||||
|
dxSkinOffice2010Blue=0
|
||||||
|
dxSkinOffice2010Silver=0
|
||||||
|
dxSkinOffice2013DarkGray=0
|
||||||
|
dxSkinOffice2013LightGray=0
|
||||||
|
dxSkinOffice2013White=0
|
||||||
|
dxSkinOffice2016Colorful=0
|
||||||
|
dxSkinOffice2016Dark=0
|
||||||
|
dxSkinOffice2019Black=0
|
||||||
|
dxSkinOffice2019Colorful=0
|
||||||
|
dxSkinOffice2019DarkGray=0
|
||||||
|
dxSkinOffice2019White=0
|
||||||
|
dxSkinPumpkin=0
|
||||||
|
dxSkinSeven=0
|
||||||
|
dxSkinSevenClassic=0
|
||||||
|
dxSkinSharp=0
|
||||||
|
dxSkinSharpPlus=0
|
||||||
|
dxSkinSilver=0
|
||||||
|
dxSkinSpringtime=0
|
||||||
|
dxSkinStardust=0
|
||||||
|
dxSkinSummer2008=0
|
||||||
|
dxSkinTheAsphaltWorld=0
|
||||||
|
dxSkinTheBezier=0
|
||||||
|
dxSkinValentine=0
|
||||||
|
dxSkinVisualStudio2013Blue=0
|
||||||
|
dxSkinVisualStudio2013Dark=0
|
||||||
|
dxSkinVisualStudio2013Light=0
|
||||||
|
dxSkinVS2010=0
|
||||||
|
dxSkinWhiteprint=0
|
||||||
|
dxSkinWXI=1
|
||||||
|
dxSkinXmas2008Blue=0
|
||||||
@@ -0,0 +1,183 @@
|
|||||||
|
// **************************************************************************************************
|
||||||
|
//
|
||||||
|
// CPU, HDD, MB 시리얼 넘버를 얻는 많은 방법중
|
||||||
|
// WMI 서비스를 이용하여 심플하게 받아오는 쉬운방법도 있지만
|
||||||
|
// 해당 서비스가 실행되고 있어야 하며 관리자권한 및 느리다는 단점이 있다.
|
||||||
|
//
|
||||||
|
// 아래 소스는 RRUZ.SMBIOS 라이브러리를 바탕으로
|
||||||
|
// System Management BIOS 통해 시스템 정보를 읽어 오는 방법이다.
|
||||||
|
//
|
||||||
|
// 혹자가 테스트 해 봤을때 불법 KMS로 인증받은 OS는 똑 같은 시리얼이 나온다.
|
||||||
|
//
|
||||||
|
// 2024.12.19 by 0GO2
|
||||||
|
//
|
||||||
|
// **************************************************************************************************
|
||||||
|
unit GO2.SMBios;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
Winapi.Windows,
|
||||||
|
Winapi.IpHlpApi,
|
||||||
|
Winapi.IpTypes,
|
||||||
|
System.SysUtils;
|
||||||
|
|
||||||
|
function GetCPUSerialNumber: string;
|
||||||
|
function GetMainboardSerialNumber: string;
|
||||||
|
function GetHDDSerialNumber: string;
|
||||||
|
function GetNetworkAdapterSerialNumber(IncludeWireless: Boolean = False): string;
|
||||||
|
function GetHardwareInformation: string;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses
|
||||||
|
RRUZ.SMBIOS;
|
||||||
|
|
||||||
|
function GetCPUSerialNumber: string;
|
||||||
|
var
|
||||||
|
SMBios: TSMBios;
|
||||||
|
ProcessorInfo: TProcessorInformation;
|
||||||
|
begin
|
||||||
|
Result := '';
|
||||||
|
SMBios := TSMBios.Create;
|
||||||
|
try
|
||||||
|
// ProcessorInfo 정보 가져오기
|
||||||
|
for ProcessorInfo in SMBios.ProcessorInfo do
|
||||||
|
begin
|
||||||
|
// ProcessorID를 16진수 문자열로 변환
|
||||||
|
Result := IntToHex(ProcessorInfo.RAWProcessorInformation^.ProcessorID, 16);
|
||||||
|
// 첫 번째 프로세서 정보만 가져오고 종료
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
SMBios.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetMainboardSerialNumber: string;
|
||||||
|
var
|
||||||
|
SMBios: TSMBios;
|
||||||
|
BaseBoardInfo: TBaseBoardInformation;
|
||||||
|
begin
|
||||||
|
Result := '';
|
||||||
|
SMBios := TSMBios.Create;
|
||||||
|
try
|
||||||
|
for BaseBoardInfo in SMBios.BaseBoardInfo do
|
||||||
|
begin
|
||||||
|
Result := BaseBoardInfo.SerialNumberStr;
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
SMBios.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetHDDSerialNumber: string;
|
||||||
|
var
|
||||||
|
Drive: string;
|
||||||
|
SerialNumber: array[0..255] of Char;
|
||||||
|
VolumeSerialNumber: DWORD;
|
||||||
|
MaxComponentLength: DWORD;
|
||||||
|
FileSystemFlags: DWORD;
|
||||||
|
begin
|
||||||
|
Drive := 'C:\';
|
||||||
|
if GetVolumeInformation(PChar(Drive), nil, 0, @VolumeSerialNumber,
|
||||||
|
MaxComponentLength, FileSystemFlags, nil, 0) then
|
||||||
|
begin
|
||||||
|
Result := IntToHex(VolumeSerialNumber, 8);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result := '';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetNetworkAdapterSerialNumber(IncludeWireless: Boolean = False): string;
|
||||||
|
const
|
||||||
|
MIB_IF_TYPE_ETHERNET = 6; // 유선 이더넷
|
||||||
|
IF_TYPE_IEEE80211 = 71; // 무선 네트워크
|
||||||
|
|
||||||
|
var
|
||||||
|
AdapterInfo: PIP_ADAPTER_INFO;
|
||||||
|
LongSize: ULONG;
|
||||||
|
Status: DWORD;
|
||||||
|
Adapter: PIP_ADAPTER_INFO;
|
||||||
|
begin
|
||||||
|
Result := '';
|
||||||
|
LongSize := 0;
|
||||||
|
|
||||||
|
GetAdaptersInfo(nil, LongSize);
|
||||||
|
if LongSize = 0 then
|
||||||
|
Exit;
|
||||||
|
|
||||||
|
GetMem(AdapterInfo, LongSize);
|
||||||
|
try
|
||||||
|
Status := GetAdaptersInfo(AdapterInfo, LongSize);
|
||||||
|
if Status = ERROR_SUCCESS then
|
||||||
|
begin
|
||||||
|
Adapter := AdapterInfo;
|
||||||
|
while Adapter <> nil do
|
||||||
|
begin
|
||||||
|
// 이더넷 또는 무선 어댑터 확인
|
||||||
|
if (Adapter^.Type_ = MIB_IF_TYPE_ETHERNET) or
|
||||||
|
(IncludeWireless and (Adapter^.Type_ = IF_TYPE_IEEE80211)) then
|
||||||
|
begin
|
||||||
|
Result := Format('%.2x%.2x%.2x%.2x%.2x%.2x',
|
||||||
|
[Adapter^.Address[0],
|
||||||
|
Adapter^.Address[1],
|
||||||
|
Adapter^.Address[2],
|
||||||
|
Adapter^.Address[3],
|
||||||
|
Adapter^.Address[4],
|
||||||
|
Adapter^.Address[5]]);
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
Adapter := Adapter^.Next;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
finally
|
||||||
|
FreeMem(AdapterInfo);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function GetHardwareInformation: string;
|
||||||
|
var
|
||||||
|
SMBios: TSMBios;
|
||||||
|
BaseBoardInfo: TBaseBoardInformation;
|
||||||
|
ProcessorInfo: TProcessorInformation;
|
||||||
|
begin
|
||||||
|
Result := '';
|
||||||
|
SMBios := TSMBios.Create;
|
||||||
|
try
|
||||||
|
// CPU 정보
|
||||||
|
for ProcessorInfo in SMBios.ProcessorInfo do
|
||||||
|
begin
|
||||||
|
Result := Result + 'CPU Information:' + #13#10;
|
||||||
|
// SerialNumberStr는 SMBIOS Type 4의 Serial Number 필드를 읽어오는데,
|
||||||
|
// 대부분의 CPU는 이 필드를 지원하지 않아 'Unknown'으로 표시된다.
|
||||||
|
Result := Result + ' Serial Number: ' + IntToHex(ProcessorInfo.RAWProcessorInformation^.ProcessorID, 16) + #13#10;
|
||||||
|
Result := Result + ' Manufacturer: ' + ProcessorInfo.ProcessorManufacturerStr + #13#10;
|
||||||
|
Result := Result + ' Version: ' + ProcessorInfo.ProcessorVersionStr + #13#10;
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// 메인보드 정보
|
||||||
|
for BaseBoardInfo in SMBios.BaseBoardInfo do
|
||||||
|
begin
|
||||||
|
Result := Result + #13#10 + 'Mainboard Information:' + #13#10;
|
||||||
|
Result := Result + ' Serial Number: ' + BaseBoardInfo.SerialNumberStr + #13#10;
|
||||||
|
Result := Result + ' Manufacturer: ' + BaseBoardInfo.ManufacturerStr + #13#10;
|
||||||
|
Result := Result + ' Product: ' + BaseBoardInfo.ProductStr + #13#10;
|
||||||
|
Break;
|
||||||
|
end;
|
||||||
|
|
||||||
|
// HDD 정보
|
||||||
|
Result := Result + #13#10 + 'HDD Information:' + #13#10;
|
||||||
|
Result := Result + ' Serial Number: ' + GetHDDSerialNumber + #13#10;
|
||||||
|
|
||||||
|
// 네트워크 어댑터 정보
|
||||||
|
Result := Result + #13#10 + 'Network Adapter Information:' + #13#10;
|
||||||
|
Result := Result + ' MAC Address (Wired): ' + GetNetworkAdapterSerialNumber + #13#10;
|
||||||
|
Result := Result + ' MAC Address (All): ' + GetNetworkAdapterSerialNumber(True);
|
||||||
|
finally
|
||||||
|
SMBios.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end.
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user