GetAdaptersAddressesの MSDN の例から多かれ少なかれコピーして貼り付けた次のコードを使用すると、戻り値 122 が返されます。これは、ERROR_INSUFFICIENT_BUFFER を意味します (このシステム エラー コード リストによると)。
ULONG outBufLen = 150000; // Tried for different (large) values here...
PIP_ADAPTER_ADDRESSES pAddresses = (IP_ADAPTER_ADDRESSES *) malloc(outBufLen);
DWORD dwRetVal = GetAdaptersAddresses(AF_INET, 0, NULL, pAddresses, &outBufLen);
// ....
free(pAddresses);
GetAdaptersAddresses のドキュメントには、予期される戻り値の 1 つとして ERROR_INSUFFICIENT_BUFFER が記載されていません。(これには、outBufLen を必要な値に調整する必要がある ERROR_BUFFER_OVERFLOW がリストされていますが、変更されていません)。
代わりに GetAdaptersInfo を使用すると、同じ症状が発生します。
このエラーは私の開発マシンでは発生しませんが、1 つの仮想および 1 つの実際のクリーンな Windows 7 x86 SP1 インストール (VC++ 再配布可能ファイルを追加) では発生しません。
C++ の初心者として、私は何か間違ったことをしていますか? このエラーの原因と修正方法を教えてください。=)