[ros-diffs] [janderwald] 40104: - Experimental implementation of _RpcEnumInterfaces - If'd out as GetIfEntry2 is not yet implemented

janderwald at svn.reactos.org janderwald at svn.reactos.org
Thu Mar 19 17:57:48 CET 2009


Author: janderwald
Date: Thu Mar 19 19:57:46 2009
New Revision: 40104

URL: http://svn.reactos.org/svn/reactos?rev=40104&view=rev
Log:
- Experimental implementation of _RpcEnumInterfaces
- If'd out as GetIfEntry2 is not yet implemented

Modified:
    trunk/reactos/base/services/wlansvc/rpcserver.c

Modified: trunk/reactos/base/services/wlansvc/rpcserver.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/base/services/wlansvc/rpcserver.c?rev=40104&r1=40103&r2=40104&view=diff
==============================================================================
--- trunk/reactos/base/services/wlansvc/rpcserver.c [iso-8859-1] (original)
+++ trunk/reactos/base/services/wlansvc/rpcserver.c [iso-8859-1] Thu Mar 19 19:57:46 2009
@@ -8,6 +8,8 @@
 
 /* INCLUDES ****************************************************************/
 #include <windows.h>
+#include <iphlpapi.h>
+
 #include "wlansvc_s.h"
 
 #define NDEBUG
@@ -35,8 +37,68 @@
     WLANSVC_RPC_HANDLE hClientHandle,
     PWLAN_INTERFACE_INFO_LIST *ppInterfaceList)
 {
-    UNIMPLEMENTED;
-    return ERROR_CALL_NOT_IMPLEMENTED;
+#if GET_IF_ENTRY2_IMPLEMENTED
+    DWORD dwNumInterfaces;
+    DWORD dwResult, dwSize;
+    DWORD dwIndex;
+    MIB_IF_ROW2 IfRow;
+    PWLAN_INTERFACE_INFO_LIST InterfaceList;
+
+    if (!hClientHandle || !ppInterfaceList)
+        return ERROR_INVALID_PARAMETER;
+
+    dwResult = GetNumberOfInterfaces(&dwNumInterfaces);
+    dwSize = sizeof(WLAN_INTERFACE_INFO_LIST);
+    if (dwResult != NO_ERROR)
+    {
+        /* set num interfaces to zero when an error occurs */
+        dwNumInterfaces = 0;
+    }
+    else
+    {
+        if (dwNumInterfaces > 1)
+        {
+            /* add extra size for interface */
+            dwSize += (dwNumInterfaces-1) * sizeof(WLAN_INTERFACE_INFO);
+        }
+    }
+
+    /* allocate interface list */
+    InterfaceList = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize);
+    if (!InterfaceList)
+    {
+        return ERROR_NOT_ENOUGH_MEMORY;
+    }
+
+    *ppInterfaceList = InterfaceList;
+    if (!dwNumInterfaces)
+    {
+        return ERROR_SUCCESS;
+    }
+
+    for(dwIndex = 0; dwIndex < dwNumInterfaces; dwIndex++)
+    {
+        ZeroMemory(&IfRow, sizeof(MIB_IF_ROW2));
+        IfRow.InterfaceIndex = dwIndex;
+
+        dwResult = GetIfEntry2(&IfRow);
+        if (dwResult == NO_ERROR)
+        {
+            if (IfRow.Type == IF_TYPE_IEEE80211 && IfRow.InterfaceAndOperStatusFlags.HardwareInterface)
+            {
+                RtlMoveMemory(&InterfaceList->InterfaceInfo[InterfaceList->dwNumberOfItems].InterfaceGuid, &IfRow.InterfaceGuid, sizeof(GUID));
+                wcscpy(InterfaceList->InterfaceInfo[InterfaceList->dwNumberOfItems].strInterfaceDescription, IfRow.Description);
+                //FIXME set state
+                InterfaceList->dwNumberOfItems++;
+            }
+        }
+    }
+
+    return ERROR_SUCCESS;
+#else
+    UNIMPLEMENTED;
+    return ERROR_CALL_NOT_IMPLEMENTED;
+#endif
 }
 
 DWORD _RpcSetAutoConfigParameter(



More information about the Ros-diffs mailing list