GetNetworkParams を使用した情報の取得
GetNetworkParams 関数は、現在のネットワーク設定に関するデータをFIXED_INFO構造体へのポインターに入力します。
GetNetworkParams を使用するには
pFixedInfo というFIXED_INFO オブジェクトへのポインターと、ulOutBufLen という ULONG オブジェクトへのポインターを宣言します。 これらの変数は、 GetNetworkParams 関数にパラメーターとして渡されます。 また、 DWORD 変数 dwRetVal (エラー チェックに使用) を作成します。
FIXED_INFO *pFixedInfo; IP_ADDR_STRING *pIPAddr; ULONG ulOutBufLen; DWORD dwRetVal;
構造体にメモリを割り当てます。
Note
ulOutBufLen のサイズは、情報を保持するのに十分ではありません。 次のステップを参照してください。
pFixedInfo = (FIXED_INFO *) malloc(sizeof (FIXED_INFO)); ulOutBufLen = sizeof (FIXED_INFO);
GetNetworkParams を最初に呼び出して、ulOutBufLen 変数に必要なサイズを取得します。
Note
この関数関数は失敗し、pFixedInfo に返されるすべてのデータを保持するのに十分なサイズを ulOutBufLen 変数で指定するために使用されます。 これは、この型のデータ構造と関数の一般的なプログラミング モデルです。
if (GetNetworkParams(pFixedInfo, &ulOutBufLen) == ERROR_BUFFER_OVERFLOW) { free(pFixedInfo); pFixedInfo = (FIXED_INFO *) malloc(ulOutBufLen); if (pFixedInfo == NULL) { printf("Error allocating memory needed to call GetNetworkParams\n"); } }
一般的なエラー チェックを使用して GetNetworkParams を 2 回目に呼び出し、その値を DWORD 変数 dwRetVal に返します。より高度なエラー チェックに使用されます。
if (dwRetVal = GetNetworkParams(pFixedInfo, &ulOutBufLen) != NO_ERROR) { printf("GetNetworkParams failed with error %d\n", dwRetVal); if (pFixedInfo) { free(pFixedInfo); } }
呼び出しが成功した場合は、 pFixedInfo データ構造からデータにアクセスします。
printf("\tHost Name: %s\n", pFixedInfo->HostName); printf("\tDomain Name: %s\n", pFixedInfo->DomainName); printf("\tDNS Servers:\n"); printf("\t\t%s\n", pFixedInfo->DnsServerList.IpAddress.String); pIPAddr = pFixedInfo->DnsServerList.Next; while (pIPAddr) { printf("\t\t%s\n", pIPAddr->IpAddress.String); pIPAddr = pIPAddr->Next; } printf("\tNode Type: "); switch (pFixedInfo->NodeType) { case 1: printf("%s\n", "Broadcast"); break; case 2: printf("%s\n", "Peer to peer"); break; case 4: printf("%s\n", "Mixed"); break; case 8: printf("%s\n", "Hybrid"); break; default: printf("\n"); } printf("\tNetBIOS Scope ID: %s\n", pFixedInfo->ScopeId); if (pFixedInfo->EnableRouting) printf("\tIP Routing Enabled: Yes\n"); else printf("\tIP Routing Enabled: No\n"); if (pFixedInfo->EnableProxy) printf("\tWINS Proxy Enabled: Yes\n"); else printf("\tWINS Proxy Enabled: No\n"); if (pFixedInfo->EnableDns) printf("\tNetBIOS Resolution Uses DNS: Yes\n"); else printf("\tNetBIOS Resolution Uses DNS: No\n");
pFixedInfo 構造体に割り当てられたメモリをすべて解放します。
if (pFixedInfo) { free(pFixedInfo); pFixedInfo = NULL; }
次の手順: GetAdaptersInfo を使用したネットワーク アダプターの管理
前の手順: 基本的な IP ヘルパー アプリケーションの作成