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

が返ってきました。
どうやら使ってないだけで、構造体自体の領域は存在するようです (((・ω・)))

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です