[ros-diffs] [cgutman] 39941: - Fix NdisReadNetworkAddress - This should increase compatibility with third-party NIC drivers

cgutman at svn.reactos.org cgutman at svn.reactos.org
Tue Mar 10 22:43:22 CET 2009


Author: cgutman
Date: Wed Mar 11 00:43:21 2009
New Revision: 39941

URL: http://svn.reactos.org/svn/reactos?rev=39941&view=rev
Log:
 - Fix NdisReadNetworkAddress
 - This should increase compatibility with third-party NIC drivers

Modified:
    branches/aicom-network-fixes/drivers/network/ndis/ndis/config.c

Modified: branches/aicom-network-fixes/drivers/network/ndis/ndis/config.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/ndis/ndis/config.c?rev=39941&r1=39940&r2=39941&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/ndis/ndis/config.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/ndis/ndis/config.c [iso-8859-1] Wed Mar 11 00:43:21 2009
@@ -699,16 +699,7 @@
     PNDIS_CONFIGURATION_PARAMETER ParameterValue = NULL;
     NDIS_STRING Keyword;
     UINT *IntArray = 0;
-    int i;
-
-    /* FIXME - We don't quite support this yet due to buggy code below */
-      {
-        *Status = NDIS_STATUS_FAILURE;
-        return;
-      }
-
-    *NetworkAddress = NULL;
-    *NetworkAddressLength = 6;/* XXX magic constant */
+    UINT i,j = 0;
 
     NdisInitUnicodeString(&Keyword, L"NetworkAddress");
     NdisReadConfiguration(Status, &ParameterValue, ConfigurationHandle, &Keyword, NdisParameterString);
@@ -718,8 +709,11 @@
         return;
     }
 
-    /* 6 bytes for ethernet, tokenring, fddi, everything else? */
-    IntArray = ExAllocatePool(PagedPool, 6*sizeof(UINT));
+    while (ParameterValue->ParameterData.StringData.Buffer[j] != '\0') j++;
+
+    *NetworkAddressLength = (UINT)((j/2)+0.5);
+
+    IntArray = ExAllocatePool(PagedPool, (*NetworkAddressLength)*sizeof(UINT));
     if(!IntArray)
     {
         NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n"));
@@ -742,7 +736,7 @@
     ExInterlockedInsertTailList(&ConfigurationContext->ResourceListHead, &MiniportResource->ListEntry, &ConfigurationContext->ResourceLock);
 
     /* convert from string to bytes */
-    for(i=0; i<6; i++)
+    for(i=0; i<(*NetworkAddressLength); i++)
     {
         IntArray[i] = (UnicodeToHexByte((ParameterValue->ParameterData.StringData.Buffer)[2*i]) << 4) +
                 UnicodeToHexByte((ParameterValue->ParameterData.StringData.Buffer)[2*i+1]);



More information about the Ros-diffs mailing list