GetHostByName
を使用して、ホスト/ DNSからIPアドレスを取得しています。私はまた、Kaspersky Internet Security 2013を持っており、それによってGetHostByName
が選択されることに気付きました。私のプロセスがhklm\SYSTEM\CONTROLSET001\SERVICES\TCPIP\PARAMETERS
にサブキーを作成しようとしているようです。実際には、ユーザーが管理者権限を持っていない場合はこの機能を使用できません。ホスト/ DNSを解決する他の方法はありますか?GetHostByNameなしでDNSからIPアドレスを取得
編集:ここではスクリーンショット:
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.
このバージョンレジストリに何も書いていないようです...
もしあれば、それはおそらくKasperskyと同じ競合を持つでしょう。 GetHostByNameを非管理者として呼び出せなければなりません。コールスタックはどのように見えますか? –
*関数を使って試してみましたが実際には*失敗しています*あなたはこの呼び出しスタックで読んだ内容に基づいて失敗すると仮定していますか?私はあなたに言うことができるので、 'GetHostByName'は管理者専用のアカウントに限られていません。 –
「検出」のスクリーンショットを追加しました。これは、管理者権限を持っている場合にのみHKLMに書き込むことができるからです。 –