Windows 환경에서의 이더넷 어댑터 정보 추출
- 최초 작성일: 2024년 1월 10일 (수)
목차
소개
Windows 환경에서 COM 인터페이스를 통해 현재 연결된 네트워크 어댑터의 정보를 가져오는 기능을 구현한다. NetworkListManager를 사용하여 연결된 모든 네트워크 인터페이스를 열거하고, 각 인터페이스의 이름을 추출한다.
구현 코드
NetworkListManager를 사용하여 Wi-Fi 인터페이스 이름을 가져오는 함수이다.
std::vector<std::wstring> GetWifiInterfaceNames() {
std::vector<std::wstring> wifiNames;
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
if (SUCCEEDED(hr)) {
INetworkListManager* pNetworkListManager;
hr = CoCreateInstance(CLSID_NetworkListManager, NULL, CLSCTX_ALL,
IID_INetworkListManager,
(void**)&pNetworkListManager);
if (SUCCEEDED(hr)) {
IEnumNetworkConnections* pEnumNetworkConnections;
hr = pNetworkListManager->GetNetworkConnections(
&pEnumNetworkConnections);
if (SUCCEEDED(hr)) {
INetworkConnection* pNetworkConnection;
ULONG fetched;
while (pEnumNetworkConnections->Next(1,
&pNetworkConnection, &fetched) == S_OK) {
VARIANT_BOOL isConnected;
pNetworkConnection->get_IsConnectedToInternet(&isConnected);
if (isConnected) {
INetwork* pNetwork;
pNetworkConnection->GetNetwork(&pNetwork);
BSTR bstrNetworkName;
pNetwork->GetName(&bstrNetworkName);
wifiNames.push_back(bstrNetworkName);
SysFreeString(bstrNetworkName);
pNetwork->Release();
}
pNetworkConnection->Release();
}
pEnumNetworkConnections->Release();
}
pNetworkListManager->Release();
}
CoUninitialize();
}
return wifiNames;
}
주요 기능 설명
- COM 초기화 관련 함수
- CoInitializeEx
- COM 라이브러리를 초기화한다
- 스레드 모델을 설정한다 (COINIT_APARTMENTTHREADED)
- 반환값으로 초기화 성공 여부를 확인할 수 있다
- CoUninitialize
- COM 라이브러리 사용을 종료한다
- 이전에 CoInitializeEx로 초기화한 내용을 정리한다
- 프로그램 종료 전 반드시 호출해야 한다
- CoInitializeEx
- NetworkListManager 관련 함수
- CoCreateInstance
- COM 객체의 인스턴스를 생성한다
- CLSID_NetworkListManager: 생성할 클래스의 ID
- IID_INetworkListManager: 사용할 인터페이스 ID
- GetNetworkConnections
- 시스템의 모든 네트워크 연결 목록을 가져온다
- 반환된 IEnumNetworkConnections로 연결을 열거할 수 있다
- CoCreateInstance
- 네트워크 연결 열거 함수
- Next
- IEnumNetworkConnections의 메서드
- 다음 네트워크 연결 정보를 가져온다
- 매개변수: 가져올 항목 수, 연결 포인터, 실제 가져온 수
- get_IsConnectedToInternet
- 현재 네트워크가 인터넷에 연결되어 있는지 확인한다
- VARIANT_BOOL 타입으로 연결 상태를 반환한다
- TRUE: 인터넷 연결됨, FALSE: 연결되지 않음
- Next
- 네트워크 정보 관련 함수
- GetNetwork
- INetworkConnection에서 INetwork 인터페이스를 가져온다
- 네트워크의 상세 정보에 접근할 수 있다
- GetName
- INetwork 인터페이스의 메서드
- 네트워크의 이름을 BSTR 형식으로 반환한다
- 시스템에 표시되는 네트워크 이름과 동일하다
- GetNetwork
- 메모리 관리 함수
- SysFreeString
- BSTR 타입의 문자열을 해제한다
- Windows에서 사용하는 유니코드 문자열 메모리를 정리한다
- Release
- COM 객체의 참조 카운트를 감소시킨다
- 카운트가 0이 되면 객체를 해제한다
- 모든 COM 인터페이스 사용 후 반드시 호출해야 한다
- SysFreeString
이 코드는 Windows의 네트워크 관리 API를 사용하여 현재 시스템에 연결된 모든 네트워크 인터페이스의 이름을 가져온다. COM 인터페이스를 사용하므로 적절한 초기화와 정리 과정이 필요하며, 모든 리소스를 올바르게 해제해야 한다.