Я использую GetHostByName
, чтобы получить IP-адрес от хоста /DNS. У меня также есть Kaspersky Internet Security 2013 и заметил, что GetHostByName
получает его. Похоже, что мой процесс пытается создать подраздел в hklm\SYSTEM\CONTROLSET001\SERVICES\TCPIP\PARAMETERS
. Это на самом деле означает, что я НЕ МОГУ использовать эту функцию, если у пользователя нет прав администратора. Есть ли другой способ решения host/dns?
РЕДАКТОР: вот скриншот:
EDIT2: Я фактически использовал getaddrinfo, и KIS не "ничего обнаружил". Я бы хотел использовать его, но мне все равно понравилась бы поддержка Win2K.
EDIT3: добавлен экран отладки
EDIT4: этот мой "тестовый" код:
program Project2;
{$APPTYPE CONSOLE}
uses
Winsock;
var
DummyWSA : WSADATA;
begin
if WSAStartup($0202, DummyWSA) = 0 then begin
GetHostByName ('localhost');
end;
readln;
end.
EDIT5: версия GetAddrInfo...
program Project2;
{$APPTYPE CONSOLE}
uses
Winsock;
type
PAddrInfo = ^TAddrInfo;
TAddrInfo = packed record
ai_flags: Integer;
ai_family: Integer;
ai_socktype: Integer;
ai_protocol: Integer;
ai_addrlen: LongWord;
ai_canonname: Array of Char;
ai_addr: PSOCKADDR;
ai_next: PAddrInfo;
end;
function getaddrinfo(const nodename: PChar; const servname : PChar; const hints: PAddrInfo; var res: PAddrInfo): Integer; stdcall; external 'ws2_32.dll' name 'getaddrinfo';
procedure freeaddrinfo(ai: PAddrInfo); stdcall; external 'ws2_32.dll' name 'freeaddrinfo';
var
DummyWSA : WSADATA;
SocketHint : PAddrInfo;
SocketResult : PAddrInfo;
begin
if WSAStartup($0202, DummyWSA) = 0 then begin
//GetHostByName ('localhost');
getaddrinfo ('localhost', '80', SocketHint, SocketResult);
// getaddrinfo ('localhost', NIL, SocketHint, SocketResult); // Not sure if I can NIL the port...
end;
readln;
end.
Эта версия, похоже, вообще ничего не записывает в реестр...