BOOLEAN PacketGetAdapterNames(PTSTR pStr, PULONG BufferSize);
參數:pStr 使用者配置緩衝區;BufferSize 緩衝區大小(輸入/輸出)。
返回:成功非零;失敗零(緩衝區不足時 BufferSize 回傳所需大小)。
[名稱1]\0[名稱2]\0...\0\0[描述1]\0[描述2]\0...\0\0
[名稱1_U]\0[名稱2_U]\0...\0_U\0_U[描述1_A]\0[描述2_A]\0...\0_A\0_A
解析策略:先以 wchar_t 讀取名稱區(直到雙 \0),再以 char 讀取描述區。
HKLM\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318} (網卡類別 GUID)Linkage\UpperBind 是否含 NdisWanLinkage\Export 取得裝置名稱 (如 \Device\NPF_{GUID})PacketOpenAdapter → PacketRequest(OID_GEN_VENDOR_DESCRIPTION) 取得廠商描述 → PacketCloseAdapter若上述掃描無結果(舊版驅動/虛擬介面卡),改掃:
HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Linkage\Bind
該值為 REG_MULTI_SZ,含所有綁定 TCP/IP 的介面卡裝置名稱,同樣走 OpenAdapter → Request → CloseAdapter 取得描述。
char AdapterName[8192];
ULONG AdapterLength = sizeof(AdapterName);
if (PacketGetAdapterNames(AdapterName, &AdapterLength)) {
// 解析邏輯...
}
PacketOpenAdapter 依賴其傳回的裝置名稱