Имена сетевого адаптера, системное имя устройства и описание
Материал из DRKB
Имя виртуального устройства можно получить вот так:
const
MAX_ADAPTER_NAME = 255;
type
PIP_ADAPTER_INDEX_MAP = ^IP_ADAPTER_INDEX_MAP;
IP_ADAPTER_INDEX_MAP = record
Index: DWORD;
Name: array [0..MAX_ADAPTER_NAME-1] of WideChar;
end;
PIP_INTERFACE_INFO = ^IP_INTERFACE_INFO;
IP_INTERFACE_INFO = record
NumAdapters: Longint;
Adapter: array [0..0] of IP_ADAPTER_INDEX_MAP;
end;
function GetIfEntry(pIfRow: PMibIfRow): DWORD; stdcall external 'iphlpapi.dll';
function GetNumberOfInterfaces(var pdwIntf: DWORD): DWORD; stdcall; external 'iphlpapi.dll';
function GetInterfaceInfo(pIfTable: PIP_INTERFACE_INFO; var dwOutBufLen:DWORD): DWORD;
stdcall; external 'iphlpapi.dll';
function GetAdapterIndex(AdapterName: PWideChar; var IfIndex: DWORD): DWORD;
stdcall; external 'iphlpapi.dll';
procedure TMainForm.Button1Click(Sender: TObject);
var
I, pdwIntf, dwOutBufLen, IfIndex: DWORD;
lpInfo: PIP_INTERFACE_INFO;
mirIfDescr: TMibIfRow;
begin
//if GetNumberOfInterfaces(pdwIntf) = NO_ERROR then
//begin
GetInterfaceInfo(nil, dwOutBufLen);
GetMem(lpInfo, dwOutBufLen);
try
if GetInterfaceInfo(lpInfo, dwOutBufLen) = NO_ERROR then
begin
for I := 0 to lpInfo^.NumAdapters - 1 do
begin
Memo1.Lines.Add('AdapterName: ' + lpInfo^.Adapter[I].Name);
if GetAdapterIndex(lpInfo^.Adapter[I].Name, IfIndex) = NO_ERROR then
Memo1.Lines.Add('AdapterIndex: ' + IntToStr(IfIndex))
else
RaiseLastOSError;
ZeroMemory(@mirIfDescr, SizeOf(TMibIfRow));
mirIfDescr.dwIndex := IfIndex;
if GetIfEntry(@mirIfDescr) = NO_ERROR then
Memo1.Lines.Add('AdapterDescription: ' + mirIfDescr.bDescr)
else
RaiseLastOSError;
end;
end
else
RaiseLastOSError;
finally
FreeMem(lpInfo);
end;
end
//else
//RaiseLastOSError;
end;
Author: Rouse_
Source: http://forum.sources.ru
ID: 03323