저도 예전에 비슷한 생각을 해서 뒤적 거려 본적이 있습니다..
--------------------------------------------------------------------------------------------------------------------------------
결론적으로 요약해 드리면 바이오스에 답이 있습니다. 대부분의 PC는 바이오스를 가지고 있습니다. 여기서 하드웨어에 대한 설정을 하게 되는데요 , 장치 내부적인 데이터를 직접 컨트롤 할 수도 있습니다. CPU 클럭서 부터 팬속도 , 비디오 섀도 설정등등 많은 부분을 처리할 수도 있죠.
그런데 예전에는 운영체제가 직접 바이오스에 접근하기는 어려웠습니다. 하지만 각종 메모리의 개발등으로 FlashRom과 같은 매체를 이용하는 NVRM이 제작가능해 지면서 부터.
바이오스 정보의 가공및 처리가 용이해 졌습니다. 바이오스나 피시를 컨트롤 하는 기능들이 NVRM에 탑재 되었으니까요.....
옛날 구형 피시들도 바이오스에 특정 정보들은 메모리상에 특정 영역에 기본적으로 할당 되었습니다.
이영역에서 정보를 읽어 오기만 하며 바이오스의 데이터를 알수 있었지만, 기본적인 정보들로 구성 되었으므로 보다 세세한 정보를 알아내기는 어려 웠습니다. 운영체제와 하드웨어의 운영체제랄 수 있는 바이오스와의 정보 교류를 위해 SMBIOS것이 생긴 이후 부터 운영체제와 바이오스가 보다 디테일한 정보를 주고 받게 됩니다. 동작은 기존 BIOS 처럼 메모리상에 데이터를 올려 주는 방식입니다.
aida32 / Sandra에서 하드웨어 정보를 뽑아내는 방법은 BIOS 메모리영역과 SMBIOS의 메모리 영역을 읽음으로써 해당 정보를 뽑아내게 됩니다.
SMBIOS의 데이터 내용은 메인보드 밴더사에 따라 제공하는 정보는 각기 차이가 있습니다.
아래에 운영체제가 직접 BIOS에 엑세스하여 메인보드 시리얼을 뽑도록 하는 스크립트를 붙여 두겠습니다.
사용법 ) 1. 아래 점선안에 스크립트를 복사하여 메모장에 붙여 넣는다.
2. 다른이름으로 저장을 누른 후에
파일명: Serial.vbs 파일형식 : 모든 형식을 선택후 저장
3. 생성된 Serial.vbs 를 실행 하면 알림창에 시리얼 값이 표시된다.
-------------------------------------------------------------------------------------------------------------------------------
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colBIOS = objWMIService.ExecQuery _
("Select * from Win32_BIOS")
For each objBIOS in colBIOS
Wscript.Echo "Serial Number: " & objBIOS.SerialNumber
Next
--------------------------------------------------------------------------------------------------------------------------------