From f4e683fc6bd6ac76f9979f49d737588b6ddf16b0 Mon Sep 17 00:00:00 2001
From: gcontini <1121667+gcontini@users.noreply.github.com>
Date: 周六, 14 11月 2020 22:13:13 +0800
Subject: [PATCH] windows smbios

---
 src/library/hw_identifier/ethernet.cpp |   26 +++++++++++++++++---------
 1 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/library/hw_identifier/ethernet.cpp b/src/library/hw_identifier/ethernet.cpp
index 1d923e6..fe68a51 100644
--- a/src/library/hw_identifier/ethernet.cpp
+++ b/src/library/hw_identifier/ethernet.cpp
@@ -32,18 +32,26 @@
 	}
 
 	for (auto &it : adapters) {
-		unsigned int k, data_len, data_byte;
-		array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> identifier;
+		unsigned int k, data_len;
+		array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> identifier = {};
 		data_len = use_ip ? sizeof(os::OsAdapterInfo::ipv4_address) : sizeof(os::OsAdapterInfo::mac_address);
-
-		for (k = 0; k < HW_IDENTIFIER_PROPRIETARY_DATA; k++) {
-			if (k < data_len) {
-				identifier[k] = use_ip ? it.ipv4_address[k] : it.mac_address[k];
+		bool all_zero = true;
+		for (k = 0; k < data_len && all_zero;k++) {
+			all_zero = all_zero && ((use_ip ? it.ipv4_address[k] : it.mac_address[k]) == 0);
+		}
+		if (all_zero) {
+			continue;
+		}
+		for (k = 1; k < HW_IDENTIFIER_PROPRIETARY_DATA; k++) {
+			if ((k - 1) < data_len) {
+				identifier[k] =
+						use_ip ? it.ipv4_address[k - 1] : it.mac_address[k - 1];
 			} else {
 				identifier[k] = 42;
 			}
 		}
-		identifier[0] = identifier[0] & 0x1F;
+		//identifier[0] = identifier[0] & 0x1F;
+		identifier[0] = 0;
 		data.push_back(identifier);
 	}
 
@@ -54,7 +62,7 @@
 
 Ethernet::~Ethernet() {}
 
-LCC_API_IDENTIFICATION_STRATEGY Ethernet::identification_strategy() const {
+LCC_API_HW_IDENTIFICATION_STRATEGY Ethernet::identification_strategy() const {
 	return use_ip ? STRATEGY_IP_ADDRESS : STRATEGY_ETHERNET;
 }
 
@@ -63,7 +71,7 @@
 	FUNCTION_RETURN result = generate_ethernet_pc_id(data, use_ip);
 	vector<HwIdentifier> identifiers;
 	if (result == FUNC_RET_OK) {
-		identifiers.resize(data.size());
+		identifiers.reserve(data.size());
 		for (auto &it : data) {
 			HwIdentifier pc_id;
 			pc_id.set_identification_strategy(identification_strategy());

--
Gitblit v1.9.1