[ros-diffs] [navaraf] 17486: Fix incorrect string manipulation in NdisOpenProtocolConfiguration and add few casts to make compiler happy.

navaraf at svn.reactos.com navaraf at svn.reactos.com
Tue Aug 23 22:13:35 CEST 2005


Fix incorrect string manipulation in NdisOpenProtocolConfiguration and
add few casts to make compiler happy.
Modified: trunk/reactos/drivers/net/ndis/ndis/config.c
  _____  

Modified: trunk/reactos/drivers/net/ndis/ndis/config.c
--- trunk/reactos/drivers/net/ndis/ndis/config.c	2005-08-23
17:43:58 UTC (rev 17485)
+++ trunk/reactos/drivers/net/ndis/ndis/config.c	2005-08-23
20:13:31 UTC (rev 17486)
@@ -31,7 +31,6 @@

  *     - All the routines in this file are PASSIVE_LEVEL only, and all
memory is PagedPool
  */
 
-#include <roscfg.h>
 #include "ndissys.h"
 
 #define NDIS_VERSION 0x00040000          /* the version of NDIS we
claim to be to miniport drivers */
@@ -236,12 +235,13 @@
 {
     OBJECT_ATTRIBUTES KeyAttributes;
     UNICODE_STRING KeyNameU;
-    WCHAR *KeyName;
     HANDLE KeyHandle;
     PMINIPORT_CONFIGURATION_CONTEXT ConfigurationContext;
 
-    KeyName = ExAllocatePool(PagedPool, ProtocolSection->Length +
sizeof(PARAMETERS_KEY) + sizeof(WCHAR));
-    if(!KeyName)
+    KeyNameU.Length = 0;
+    KeyNameU.MaximumLength = ProtocolSection->Length +
sizeof(PARAMETERS_KEY) + sizeof(UNICODE_NULL);
+    KeyNameU.Buffer = ExAllocatePool(PagedPool,
KeyNameU.MaximumLength);
+    if(!KeyNameU.Buffer)
     {
         NDIS_DbgPrint(MIN_TRACE,("Insufficient resources.\n"));
         *ConfigurationHandle = NULL;
@@ -249,14 +249,13 @@
         return;
     }
 
-    wcsncpy(KeyName, ProtocolSection->Buffer,
ProtocolSection->Length/sizeof(WCHAR));
-    wcscpy(KeyName + ProtocolSection->Length, PARAMETERS_KEY);
-    RtlInitUnicodeString(&KeyNameU, KeyName);
+    RtlCopyUnicodeString(&KeyNameU, ProtocolSection);
+    RtlAppendUnicodeToString(&KeyNameU, PARAMETERS_KEY);
     InitializeObjectAttributes(&KeyAttributes, &KeyNameU,
OBJ_CASE_INSENSITIVE, NULL, NULL);
 
     *Status = ZwOpenKey(&KeyHandle, KEY_ALL_ACCESS, &KeyAttributes);
 
-    ExFreePool(KeyName);
+    ExFreePool(KeyNameU.Buffer);
 
     if(*Status != NDIS_STATUS_SUCCESS)
     {
@@ -490,7 +489,7 @@
                 return;
             }
 
-            str.Length = str.MaximumLength =
KeyInformation->DataLength;
+            str.Length = str.MaximumLength =
(USHORT)KeyInformation->DataLength;
             str.Buffer = (PWCHAR)KeyInformation->Data;
 
             (*ParameterValue)->ParameterType = ParameterType;
@@ -560,7 +559,7 @@
             memcpy(RegData, KeyInformation->Data,
KeyInformation->DataLength);
 
             (*ParameterValue)->ParameterType = ParameterType;
-            (*ParameterValue)->ParameterData.StringData.Length =
KeyInformation->DataLength;
+            (*ParameterValue)->ParameterData.StringData.Length =
(USHORT)KeyInformation->DataLength;
             (*ParameterValue)->ParameterData.StringData.Buffer =
RegData;
 
             ExFreePool(KeyInformation);
@@ -805,7 +804,7 @@
 
     /* should i fail instead if the passed-in string isn't long enough?
*/
     wcsncpy(KeyName->Buffer, KeyInformation->Name,
KeyName->MaximumLength/sizeof(WCHAR));
-    KeyName->Length = KeyInformation->NameLength;
+    KeyName->Length = (USHORT)KeyInformation->NameLength;
 
     InitializeObjectAttributes(&KeyAttributes, KeyName,
OBJ_CASE_INSENSITIVE, ConfigurationHandle, NULL);
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.reactos.org/pipermail/ros-diffs/attachments/20050823/547dfff2/attachment.html


More information about the Ros-diffs mailing list