IP_ADAPTER_INFO 構造体 (iptypes.h)
IP_ADAPTER_INFO構造体には、ローカル コンピューター上の特定のネットワーク アダプターに関する情報が含まれています。
構文
typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO *Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
メンバー
Next
型: 構造体_IP_ADAPTER_INFO*
アダプターの一覧の次のアダプターへのポインター。
ComboIndex
型: DWORD
予約済み。
AdapterName[MAX_ADAPTER_NAME_LENGTH + 4]
種類: char[MAX_ADAPTER_NAME_LENGTH + 4]
アダプターの名前の ANSI 文字列。
Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
型: char[MAX_ADAPTER_DESCRIPTION_LENGTH + 4]
アダプターの説明を含む ANSI 文字列。
AddressLength
型: UINT
アダプターのハードウェア アドレスの長さ (バイト単位)。
Address[MAX_ADAPTER_ADDRESS_LENGTH]
型: BYTE[MAX_ADAPTER_ADDRESS_LENGTH]
BYTE 配列として表されるアダプターのハードウェア アドレス。
Index
型: DWORD
アダプター インデックス。
アダプターのインデックスは、アダプターを無効にしてから有効にした場合、またはその他の状況で変更される可能性があり、永続的と見なすべきではありません。
Type
型: UINT
アダプターの種類。 アダプターの種類に使用できる値は、 Ipifcons.h ヘッダー ファイルに一覧表示されます。
次の表に、アダプターの種類の一般的な値を示しますが、Windows Vista 以降では他の値を使用できます。
DhcpEnabled
型: UINT
このアダプターに対して動的ホスト構成プロトコル (DHCP) を有効にするかどうかを指定するオプション値。
CurrentIpAddress
種類: PIP_ADDR_STRING
予約済み。
IpAddressList
種類: IP_ADDR_STRING
このアダプターに関連付けられている IPv4 アドレスの一覧は、 IP_ADDR_STRING 構造体のリンクされたリストとして表されます。 アダプターには複数の IPv4 アドレスを割り当てることができます。
GatewayList
種類: IP_ADDR_STRING
このアダプターのゲートウェイの IPv4 アドレスは、 IP_ADDR_STRING 構造のリンクされたリストとして表されます。 アダプターには、複数の IPv4 ゲートウェイ アドレスを割り当てることができます。 この一覧には、通常、このアダプターの既定のゲートウェイの IPv4 アドレスの 1 つのエントリが含まれています。
DhcpServer
種類: IP_ADDR_STRING
このアダプターの DHCP サーバーの IPv4 アドレスは、 IP_ADDR_STRING 構造のリンクリストとして表されます。 この一覧には、このアダプターの DHCP サーバーの IPv4 アドレスの 1 つのエントリが含まれています。 値 255.255.255.255 は、DHCP サーバーに到達できなかったか、到達処理中であることを示します。
このメンバーは、 DhcpEnabled メンバーが 0 以外の場合にのみ有効です。
HaveWins
種類: BOOL
このアダプターで Windows インターネット ネーム サービス (WINS) を使用するかどうかを指定するオプション値。
PrimaryWinsServer
種類: IP_ADDR_STRING
IP_ADDR_STRING構造のリンクリストとして表されるプライマリ WINS サーバーの IPv4 アドレス。 この一覧には、このアダプターのプライマリ WINS サーバーの IPv4 アドレスの 1 つのエントリが含まれています。
このメンバーは、 HaveWins メンバーが TRUE の場合にのみ有効です。
SecondaryWinsServer
種類: IP_ADDR_STRING
IP_ADDR_STRING構造のリンクされたリストとして表されるセカンダリ WINS サーバーの IPv4 アドレス。 アダプターには、複数のセカンダリ WINS サーバー アドレスを割り当てることができます。
このメンバーは、 HaveWins メンバーが TRUE の場合にのみ有効です。
LeaseObtained
種類: time_t
現在の DHCP リースが取得された時刻。
このメンバーは、 DhcpEnabled メンバーが 0 以外の場合にのみ有効です。
LeaseExpires
種類: time_t
現在の DHCP リースの有効期限が切れる時刻。
このメンバーは、 DhcpEnabled メンバーが 0 以外の場合にのみ有効です。
解説
IP_ADAPTER_INFO構造は、ローカル コンピューター上の特定のネットワーク アダプターに関する IPv4 情報に制限されます。 IP_ADAPTER_INFO構造体は、GetAdaptersInfo 関数を呼び出すことによって取得されます。
Visual Studio 2005 以降を使用する場合、 time_t データ型の既定値は 8 バイトのデータ型であり、32 ビット プラットフォームの LeaseObtained メンバーと LeaseExpires メンバーに使用される 4 バイトデータ型ではありません。 32 ビット プラットフォームで IP_ADAPTER_INFO 構造体を適切に使用するには、アプリケーションをコンパイルするときに _USE_32BIT_TIME_T を定義し (たとえば、オプションとして使用 -D _USE_32BIT_TIME_T
)、 time_t データ型を 4 バイトのデータ型に強制します。
Windows XP 以降で使用するために、 IP_ADAPTER_ADDRESSES 構造体には IPv4 と IPv6 の両方の情報が含まれています。 GetAdaptersAddresses 関数は、IPv4 および IPv6 アダプター情報を取得します。
例
この例では、アダプター情報を取得し、各アダプターのさまざまなプロパティを出力します。
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "IPHLPAPI.lib")
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x))
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))
/* Note: could also use malloc() and free() */
int __cdecl main()
{
/* Declare and initialize variables */
// It is possible for an adapter to have multiple
// IPv4 addresses, gateways, and secondary WINS servers
// assigned to the adapter.
//
// Note that this sample code only prints out the
// first entry for the IP address/mask, and gateway, and
// the primary and secondary WINS server for each adapter.
PIP_ADAPTER_INFO pAdapterInfo;
PIP_ADAPTER_INFO pAdapter = NULL;
DWORD dwRetVal = 0;
UINT i;
/* variables used to print DHCP time info */
struct tm newtime;
char buffer[32];
errno_t error;
ULONG ulOutBufLen = sizeof (IP_ADAPTER_INFO);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(sizeof (IP_ADAPTER_INFO));
if (pAdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
// Make an initial call to GetAdaptersInfo to get
// the necessary size into the ulOutBufLen variable
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) {
FREE(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) MALLOC(ulOutBufLen);
if (pAdapterInfo == NULL) {
printf("Error allocating memory needed to call GetAdaptersinfo\n");
return 1;
}
}
if ((dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)) == NO_ERROR) {
pAdapter = pAdapterInfo;
while (pAdapter) {
printf("\tComboIndex: \t%d\n", pAdapter->ComboIndex);
printf("\tAdapter Name: \t%s\n", pAdapter->AdapterName);
printf("\tAdapter Desc: \t%s\n", pAdapter->Description);
printf("\tAdapter Addr: \t");
for (i = 0; i < pAdapter->AddressLength; i++) {
if (i == (pAdapter->AddressLength - 1))
printf("%.2X\n", (int) pAdapter->Address[i]);
else
printf("%.2X-", (int) pAdapter->Address[i]);
}
printf("\tIndex: \t%d\n", pAdapter->Index);
printf("\tType: \t");
switch (pAdapter->Type) {
case MIB_IF_TYPE_OTHER:
printf("Other\n");
break;
case MIB_IF_TYPE_ETHERNET:
printf("Ethernet\n");
break;
case MIB_IF_TYPE_TOKENRING:
printf("Token Ring\n");
break;
case MIB_IF_TYPE_FDDI:
printf("FDDI\n");
break;
case MIB_IF_TYPE_PPP:
printf("PPP\n");
break;
case MIB_IF_TYPE_LOOPBACK:
printf("Lookback\n");
break;
case MIB_IF_TYPE_SLIP:
printf("Slip\n");
break;
default:
printf("Unknown type %ld\n", pAdapter->Type);
break;
}
printf("\tIP Address: \t%s\n",
pAdapter->IpAddressList.IpAddress.String);
printf("\tIP Mask: \t%s\n", pAdapter->IpAddressList.IpMask.String);
printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
printf("\t***\n");
if (pAdapter->DhcpEnabled) {
printf("\tDHCP Enabled: Yes\n");
printf("\t DHCP Server: \t%s\n",
pAdapter->DhcpServer.IpAddress.String);
printf("\t Lease Obtained: ");
/* Display local time */
error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseObtained);
if (error)
printf("Invalid Argument to _localtime32_s\n");
else {
// Convert to an ASCII representation
error = asctime_s(buffer, 32, &newtime);
if (error)
printf("Invalid Argument to asctime_s\n");
else
/* asctime_s returns the string terminated by \n\0 */
printf("%s", buffer);
}
printf("\t Lease Expires: ");
error = _localtime32_s(&newtime, (__time32_t*) &pAdapter->LeaseExpires);
if (error)
printf("Invalid Argument to _localtime32_s\n");
else {
// Convert to an ASCII representation
error = asctime_s(buffer, 32, &newtime);
if (error)
printf("Invalid Argument to asctime_s\n");
else
/* asctime_s returns the string terminated by \n\0 */
printf("%s", buffer);
}
} else
printf("\tDHCP Enabled: No\n");
if (pAdapter->HaveWins) {
printf("\tHave Wins: Yes\n");
printf("\t Primary Wins Server: %s\n",
pAdapter->PrimaryWinsServer.IpAddress.String);
printf("\t Secondary Wins Server: %s\n",
pAdapter->SecondaryWinsServer.IpAddress.String);
} else
printf("\tHave Wins: No\n");
pAdapter = pAdapter->Next;
printf("\n");
}
} else {
printf("GetAdaptersInfo failed with error: %d\n", dwRetVal);
}
if (pAdapterInfo)
FREE(pAdapterInfo);
return 0;
}
要件
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
Header | iptypes.h (Iphlpapi.h を含む) |