Здравствуйте, Decoy, Вы писали:
D>Может стоит привести код, как вы перечисляете соединения, возможно и поможем...
_IP_ADAPTER_INFO = record
Next: PIP_ADAPTER_INFO;
ComboIndex: DWORD;
AdapterName: array [0..MAX_ADAPTER_NAME_LENGTH + 3] of Char;
Description: array [0..MAX_ADAPTER_DESCRIPTION_LENGTH + 3] of Char;
AddressLength: UINT;
Address: array [0..MAX_ADAPTER_ADDRESS_LENGTH - 1] of BYTE;
Index: DWORD;
Type_: UINT;
DhcpEnabled: UINT;
CurrentIpAddress: PIP_ADDR_STRING;
IpAddressList: IP_ADDR_STRING;
GatewayList: IP_ADDR_STRING;
DhcpServer: IP_ADDR_STRING;
HaveWins: BOOL;
PrimaryWinsServer: IP_ADDR_STRING;
SecondaryWinsServer: IP_ADDR_STRING;
LeaseObtained: time_t;
LeaseExpires: time_t;
end;
tagRASCONNA = record
dwSize: DWORD;
hrasconn: THRasConn;
szEntryName: packed array[0..RAS_MaxEntryName] of AnsiChar;
szDeviceType: packed array[0..RAS_MaxDeviceType] of AnsiChar;
szDeviceName: packed array[0..RAS_MaxDeviceName] of AnsiChar;
szPhonebook: array[0..MAX_PATH-1] of AnsiChar;
dwSubEntry: DWORD;
guidEntry: TGUID;
end;
tagRASIPA = record
dwSize: DWORD;
dwError: DWORD;
szIpAddress: packed array[0..RAS_MaxIpAddress] of AnsiChar;
szServerIpAddress: packed array[0.. RAS_MaxIpAddress] of AnsiChar;
end;
procedure GetAddapterList;
var
PAdapter, PMem: PipAdapterInfo;
OutBufLen: Cardinal;
begin
VVGetAdaptersInfo(PAdapter, OutBufLen);
PMem := PAdapter;
try
Finalize(AddapterList);
while PAdapter <> nil do
begin
SetLength(AddapterList, High(AddapterList)+2);
CopyMemory(@AddapterList[High(AddapterList)].AdapterInfo, PAdapter, SizeOf(TipAdapterInfo) );
PAdapter := PAdapter.Next;
end;
finally
if PAdapter <> nil then
Freemem(PMem, OutBufLen);
end;
end;
procedure GetActiveConnections;
var Entries, RasConn : PRasConn;
BufSize, NumberOfEntries, Res, BufSize2: Cardinal;
i : Integer;
RasPPPIP : PRasPPPIP;
begin
Finalize(ActiveConnections);
New(Entries);
BufSize := Sizeof(Entries^);
ZeroMemory(Entries, BufSize);
Entries^.dwSize := Sizeof(Entries^);
Res := RasEnumConnections(Entries, BufSize, NumberOfEntries);
if Res = ERROR_BUFFER_TOO_SMALL then
begin
ReallocMem(Entries, BufSize);
ZeroMemory(Entries, BufSize);
Entries^.dwSize := Sizeof(Entries^);
Res := RasEnumConnections(Entries, BufSize, NumberOfEntries);
end;
try
RasCheck(Res);
RasConn := Entries;
for I := 0 to NumberOfEntries-1 do
begin
New(RasPPPIP);
BufSize2:=SizeOf(RasPPPIP^);
ZeroMemory(RasPPPIP,BufSize2);
RasPPPIP.dwSize := Sizeof(RasPPPIP^);
Res:=RasGetProjectionInfo(RasConn.HRASConn, RASP_PPPIP, RasPPPIP, BufSize2);
if Res <> ERROR_BUFFER_TOO_SMALL then RasCheck(Res);
SetLength(ActiveConnections, High(ActiveConnections)+2);
ActiveConnections[High(ActiveConnections)].RasConn:=AllocMem(SizeOf(RasConn^));
CopyMemory(ActiveConnections[High(ActiveConnections)].RasConn,RasConn,SizeOf(RasConn^));
ActiveConnections[High(ActiveConnections)].RasPPPIP:=AllocMem(SizeOf(RasPPPIP^));
CopyMemory(ActiveConnections[High(ActiveConnections)].RasPPPIP,RasPPPIP,SizeOf(RasPPPIP^));
FreeMem(RasPPPIP);
Inc(RasConn);
end;
finally
FreeMem(Entries);
end;
end;
Нужно определить какому из установленных соединений ActiveConnections соответсвует интерфейс из списка AdapterList
пример результата работы этих 2-х процедур:
AdapterList:
Interface: {8280E293-327E-4258-B217-48BFCDFC6D3A}
Index: 0x2
Name: Realtek RTL8139 Family PCI Fast Ethernet NIC - Packet Scheduler Miniport
IP: 10.64.68.113
Mask: 255.255.255.0
Interface: {BBB925F2-AB7D-4658-9E87-91CDEEDE4B2B}
Index: 0x3
Name: NVIDIA nForce Networking Controller - Packet Scheduler Miniport
IP: 192.168.0.1
Mask: 255.255.255.0
Interface: {AC519345-1014-44C1-B6A6-D497E8251DE9}
Index: 0xA0005
Name: WAN (PPP/SLIP) Interface
IP: 172.27.156.195
Mask: 255.255.255.255
Interface: {3497EB5E-6CB6-470D-91B1-96F6D844CCCE}
Index: 0xB0006
Name: WAN (PPP/SLIP) Interface
IP: 10.231.2.116
Mask: 255.255.255.255
ActiveConnections:
Name: Ufanet local
Handle: 0x70000
Type: VPN
Device: WAN Miniport (PPTP)
IP: 172.27.156.195
Server: 10.8.0.8
Name: ZyXEL ADSL Link
Handle: 0x80000
Type: ISDN
Device: ZyXEL OMNI ADSL USB (Annex A / WAN adapter)
IP: 10.231.2.116
Server: 62.133.173.1
Таким образом соединению Ufanet local соотвествует интерфейс с индексом 0xA0005. Для ZyXEL ADSL Link соотвественно 0xB0006.
Вот это и нужно как-то связать.