Code: Select all
; ===============================================================================================================================
; The GetAdaptersInfo function retrieves adapter information for the local computer.
; https://docs.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-getadaptersinfo
; ===============================================================================================================================
GetAdaptersInfo()
{
static ERROR_SUCCESS := 0
static ERROR_BUFFER_OVERFLOW := 111
static MAX_ADAPTER_NAME_LENGTH := 256
static MAX_ADAPTER_DESCRIPTION_LENGTH := 128
static MAX_ADAPTER_ADDRESS_LENGTH := 8
static MIB_IF_TYPE := { 1: "OTHER", 6: "ETHERNET", 9: "ISO88025_TOKENRING", 23: "PPP", 24: "LOOPBACK", 28: "SLIP", 71: "IEEE80211" }
if (DllCall("iphlpapi\GetAdaptersInfo", "ptr", 0, "uint*", size) = ERROR_BUFFER_OVERFLOW)
{
VarSetCapacity(buf, size, 0)
if (DllCall("iphlpapi\GetAdaptersInfo", "ptr", &buf, "uint*", size) = ERROR_SUCCESS)
{
addr := &buf, IP_ADAPTER_INFO := []
while (addr)
{
offset := A_PtrSize
IP_ADAPTER_INFO[A_Index, "ComboIndex"] := NumGet(addr + offset, "uint") , offset += 4
IP_ADAPTER_INFO[A_Index, "AdapterName"] := StrGet(addr + offset, MAX_ADAPTER_NAME_LENGTH + 4, "cp0") , offset += MAX_ADAPTER_NAME_LENGTH + 4
IP_ADAPTER_INFO[A_Index, "Description"] := StrGet(addr + offset, MAX_ADAPTER_DESCRIPTION_LENGTH + 4, "cp0"), offset += MAX_ADAPTER_DESCRIPTION_LENGTH + 4
ADAPTER_ADDRESS_LENGTH := NumGet(addr + offset, "uint") , offset += 4
loop % ADAPTER_ADDRESS_LENGTH
ADAPTER_ADDRESS .= Format("{:02X}", NumGet(addr + offset, A_Index - 1, "uchar")) "-"
IP_ADAPTER_INFO[A_Index, "Address"] := SubStr(ADAPTER_ADDRESS, 1, -1), ADAPTER_ADDRESS := "" , offset += MAX_ADAPTER_ADDRESS_LENGTH
IP_ADAPTER_INFO[A_Index, "Index"] := NumGet(addr + offset, "uint") , offset += 4
IP_ADAPTER_INFO[A_Index, "Type"] := MIB_IF_TYPE[NumGet(addr + offset, "uint")] , offset += 4
IP_ADAPTER_INFO[A_Index, "DhcpEnabled"] := NumGet(addr + offset, "uint") , offset += A_PtrSize
PIP_ADDR_STRING := NumGet(addr + offset, A_PtrSize, "uptr") , offset += A_PtrSize
IP_ADAPTER_INFO[A_Index, "IpAddressList"] := StrGet(addr + offset + A_PtrSize, "cp0")
IP_ADAPTER_INFO[A_Index, "IpMaskList"] := StrGet(addr + offset + A_PtrSize + 16, "cp0") , offset += A_PtrSize + 32 + A_PtrSize
IP_ADAPTER_INFO[A_Index, "GatewayList"] := StrGet(addr + offset + A_PtrSize, "cp0") , offset += A_PtrSize + 32 + A_PtrSize
IP_ADAPTER_INFO[A_Index, "DhcpServer"] := StrGet(addr + offset + A_PtrSize, "cp0") , offset += A_PtrSize + 32 + A_PtrSize
IP_ADAPTER_INFO[A_Index, "HaveWins"] := NumGet(addr + offset, "int") , offset += A_PtrSize
IP_ADAPTER_INFO[A_Index, "PrimaryWinsServer"] := StrGet(addr + offset + A_PtrSize, "cp0") , offset += A_PtrSize + 32 + A_PtrSize
IP_ADAPTER_INFO[A_Index, "SecondaryWinsServer"] := StrGet(addr + offset + A_PtrSize, "cp0") , offset += A_PtrSize + 32 + A_PtrSize
IP_ADAPTER_INFO[A_Index, "LeaseObtained"] := ConvertUnixTime(NumGet(addr + offset, "int")) , offset += A_PtrSize
IP_ADAPTER_INFO[A_Index, "LeaseExpires"] := ConvertUnixTime(NumGet(addr + offset, "int"))
addr := NumGet(addr + 0, "uptr")
}
return IP_ADAPTER_INFO
}
}
return ""
}
ConvertUnixTime(value)
{
unix := 1970
unix += value, s
FormatTime, unix, % unix, yyyy-MM-dd HH:mm:ss
return unix
}