Hans Leidekker : wbemprox: Implement Win32_NetworkAdapter. MACAddress and Win32_NetworkAdapter.PNPDeviceID.

Alexandre Julliard julliard at winehq.org
Fri Jul 13 14:11:18 CDT 2012


Module: wine
Branch: master
Commit: 5acdba54a0534a41ec8267bb4d4bb8d1dfb551f0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5acdba54a0534a41ec8267bb4d4bb8d1dfb551f0

Author: Hans Leidekker <hans at codeweavers.com>
Date:   Fri Jul 13 11:34:17 2012 +0200

wbemprox: Implement Win32_NetworkAdapter.MACAddress and Win32_NetworkAdapter.PNPDeviceID.

---

 dlls/wbemprox/builtin.c |   25 +++++++++++++++++++++++++
 1 files changed, 25 insertions(+), 0 deletions(-)

diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c
index 53f9c6d..7993d6e 100644
--- a/dlls/wbemprox/builtin.c
+++ b/dlls/wbemprox/builtin.c
@@ -88,6 +88,8 @@ static const WCHAR prop_handleW[] =
     {'H','a','n','d','l','e',0};
 static const WCHAR prop_interfaceindexW[] =
     {'I','n','t','e','r','f','a','c','e','I','n','d','e','x',0};
+static const WCHAR prop_macaddressW[] =
+    {'M','A','C','A','d','d','r','e','s','s',0};
 static const WCHAR prop_manufacturerW[] =
     {'M','a','n','u','f','a','c','t','u','r','e','r',0};
 static const WCHAR prop_modelW[] =
@@ -104,6 +106,8 @@ static const WCHAR prop_osarchitectureW[] =
     {'O','S','A','r','c','h','i','t','e','c','t','u','r','e',0};
 static const WCHAR prop_oslanguageW[] =
     {'O','S','L','a','n','g','u','a','g','e',0};
+static const WCHAR prop_pnpdeviceidW[] =
+    {'P','N','P','D','e','v','i','c','e','I','D',0};
 static const WCHAR prop_pprocessidW[] =
     {'P','a','r','e','n','t','P','r','o','c','e','s','s','I','D',0};
 static const WCHAR prop_processidW[] =
@@ -162,7 +166,9 @@ static const struct column col_networkadapter[] =
 {
     { prop_deviceidW,            CIM_STRING|COL_FLAG_DYNAMIC|COL_FLAG_KEY },
     { prop_interfaceindexW,      CIM_UINT32, VT_I4 },
+    { prop_macaddressW,          CIM_STRING|COL_FLAG_DYNAMIC },
     { prop_netconnectionstatusW, CIM_UINT16, VT_I4 },
+    { prop_pnpdeviceidW,         CIM_STRING },
     { prop_speedW,               CIM_UINT64 }
 };
 static const struct column col_os[] =
@@ -221,6 +227,10 @@ static const WCHAR compsys_manufacturerW[] =
     {'T','h','e',' ','W','i','n','e',' ','P','r','o','j','e','c','t',0};
 static const WCHAR compsys_modelW[] =
     {'W','i','n','e',0};
+static const WCHAR networkadapter_pnpdeviceidW[]=
+    {'P','C','I','\\','V','E','N','_','8','0','8','6','&','D','E','V','_','1','0','0','E','&',
+     'S','U','B','S','Y','S','_','0','0','1','E','8','0','8','6','&','R','E','V','_','0','2','\\',
+     '3','&','2','6','7','A','6','1','6','A','&','1','&','1','8',0};
 static const WCHAR os_captionW[] =
     {'M','i','c','r','o','s','o','f','t',' ','W','i','n','d','o','w','s',' ','X','P',' ',
      'V','e','r','s','i','o','n',' ','=',' ','5','.','1','.','2','6','0','0',0};
@@ -268,7 +278,9 @@ struct record_networkadapter
 {
     const WCHAR *device_id;
     INT32        interface_index;
+    const WCHAR *mac_address;
     UINT16       netconnection_status;
+    const WCHAR *pnpdevice_id;
     UINT64       speed;
 };
 struct record_operatingsystem
@@ -439,6 +451,17 @@ static UINT16 get_connection_status( IF_OPER_STATUS status )
     }
     return 0;
 }
+static WCHAR *get_mac_address( const BYTE *addr, DWORD len )
+{
+    static const WCHAR fmtW[] =
+        {'%','0','2','x',':','%','0','2','x',':','%','0','2','x',':',
+         '%','0','2','x',':','%','0','2','x',':','%','0','2','x',0};
+    WCHAR *ret;
+
+    if (len != 6 || !(ret = heap_alloc( 18 * sizeof(WCHAR) ))) return NULL;
+    sprintfW( ret, fmtW, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5] );
+    return ret;
+}
 
 static void fill_networkadapter( struct table *table )
 {
@@ -470,7 +493,9 @@ static void fill_networkadapter( struct table *table )
         sprintfW( device_id, fmtW, aa->u.s.IfIndex );
         rec->device_id            = heap_strdupW( device_id );
         rec->interface_index      = aa->u.s.IfIndex;
+        rec->mac_address          = get_mac_address( aa->PhysicalAddress, aa->PhysicalAddressLength );
         rec->netconnection_status = get_connection_status( aa->OperStatus );
+        rec->pnpdevice_id         = networkadapter_pnpdeviceidW;
         rec->speed                = 1000000;
         offset += sizeof(*rec);
     }




More information about the wine-cvs mailing list