Windows 2000 と PIP_ADAPTER_UNICAST_ADDRESS
副題 UTAU Plugin autoCVVC Win2000 で エラーになる件について その2 なのです
UTAU Plugin autoCVVC Win2000 で エラーになる件について その1
PIP_ADAPTER_UNICAST_ADDRESS pUnicast = NULL; pUnicast = pCurrAddresses->FirstUnicastAddress; printf("sizeof(pUnicast)=%d\\n", pUnicast->Length ); printf("pUnicast->OnLinkPrefixLength=%d\\n", ((int *)pUnicast)[0xb] ); |
ちょっと略しますが、こんなプログラムを書いて動かしてみました。
typedef struct _IP_ADAPTER_UNICAST_ADDRESS { union { struct { ULONG Length; // Offset 0 DWORD Flags; // Offset 4 }; }; struct _IP_ADAPTER_UNICAST_ADDRESS *Next; // Offset 8 SOCKET_ADDRESS Address; // Offset 0x10 IP_PREFIX_ORIGIN PrefixOrigin; // Offset 0x14 IP_SUFFIX_ORIGIN SuffixOrigin; // Offset 0x18 IP_DAD_STATE DadState; // Offset 0x1c ULONG ValidLifetime; // Offset 0x20 ULONG PreferredLifetime; // Offset 0x24 ULONG LeaseLifetime; // Offset 0x28 UINT8 OnLinkPrefixLength; // Offset 0x2c } IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS; |
IP_ADAPTER_UNICAST_ADDRESS structure (Windows)
OnLinkPrefixLength Type: UINT8 The length, in bits, of the prefix or network part of the IP address. For a unicast IPv4 address, any value greater than 32 is an illegal value. For a unicast IPv6 address, any value greater than 128 is an illegal value. A value of 255 is commonly used to represent an illegal value. Note This structure member is only available on Windows Vista and later. |
最後のOnLinkPrefixLength は Vista 以降じゃないと非サポートだと書かれています。
定義上 この構造体が無ければ Windows 2000 は sizeof(pUnicast) を44 と返すはずです。
結果
sizeof(pUnicast)=48 pUnicast->OnLinkPrefixLength=0 |
が返ってきました。
どうやら使ってないだけで、構造体自体の領域は存在するようです (((・ω・)))
Comments