Published: 20 Mar 2019 › Updated: 20 Mar 2019

golang으로 Windows Registry에 등록된 NetCfgInstanceId를 얻는 방법
Windows Registry에 등록된 NetCfgInstanceId를 획득하는 방법을 구현해 본다.
Windows는 Registry에 디바이스 정보를 등록할 때, 미리 정해진 GUID 값에 맞게 등록이 된다.
- CDROM: 4D36E965-E325–11CE-BFC1–08002BE10318
- Keyboard: 4D36E96B-E325–11CE-BFC1–08002BE10318
- Modem: 4D36E96D-E325–11CE-BFC1–08002BE10318
- Mouse: 4D36E96F-E325–11CE-BFC1–08002BE10318
- Net: 4D36E972-E325–11CE-BFC1–08002BE10318
이 중에서 Net 클래스의 GUID 값을 Key로 사용한다.
SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325–11CE-BFC1–08002BE10318}
GUID 값을 기준으로 Windows Registry를 확인해보면 아래와 같이 등록된 모든 Net에 대한 정보를 확인할 수 있다.
여기에는 물리하드웨어 뿐만 아니라 virtualbox와 같은 가상머신에서 설치된 드라이버까지 모두 보인다.
이제 golang 코드를 이용해서 해당 값을 얻어본다.
package main
import (
"fmt"
"log"
"golang.org/x/sys/windows/registry"
)
const ADAPTER_KEY = `SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325–11CE-BFC1–08002BE10318}`
func main() {
k, err := registry.OpenKey(registry.LOCAL_MACHINE,
ADAPTER_KEY,
registry.ENUMERATE_SUB_KEYS|registry.QUERY_VALUE)
if err != nil {
log.Fatal(err)
}
defer k.Close()
keyNames, err := k.ReadSubKeyNames(-1)
if err != nil {
log.Fatal(err)
}
for _, keyName := range keyNames {
n, _ := matchKey(k, keyName)
if n != "" {
fmt.Println(n)
}
}
}
func matchKey(zones registry.Key, keyName string) (string, error) {
k, err := registry.OpenKey(zones, keyName, registry.READ)
if err != nil {
return "", err
}
defer k.Close()
netCfgInstanceId, _, err := k.GetStringValue("NetCfgInstanceId")
if err != nil {
return "", err
}
return netCfgInstanceId, nil
}Leave golang으로 Windows Registry에 등록된 NetCfgInstanceId를 얻는 방법 to:
Read more #go posts
Best Posts From devdotlog
We have not curated any of ssh0702's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.