[ros-diffs] [fireball] 33758: Stefan Ginsberg <stefan__100__ at hotmail.com> - Remove usage of unexported RtlDuplicateUnicodeString in green.sys driver (this is basically the same fix which Herve applied to blue.sys).

fireball at svn.reactos.org fireball at svn.reactos.org
Thu May 29 18:00:22 CEST 2008


Author: fireball
Date: Thu May 29 11:00:20 2008
New Revision: 33758

URL: http://svn.reactos.org/svn/reactos?rev=33758&view=rev
Log:
Stefan Ginsberg <stefan__100__ at hotmail.com>
- Remove usage of unexported RtlDuplicateUnicodeString in green.sys driver (this is basically the same fix which Herve applied to blue.sys).

Modified:
    trunk/rosapps/drivers/green/green.c
    trunk/rosapps/drivers/green/green.h
    trunk/rosapps/drivers/green/pnp.c

Modified: trunk/rosapps/drivers/green/green.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/drivers/green/green.c?rev=33758&r1=33757&r2=33758&view=diff
==============================================================================
--- trunk/rosapps/drivers/green/green.c [iso-8859-1] (original)
+++ trunk/rosapps/drivers/green/green.c [iso-8859-1] Thu May 29 11:00:20 2008
@@ -41,13 +41,13 @@
 	}
 	RtlZeroMemory(DriverExtension, sizeof(GREEN_DRIVER_EXTENSION));
 
-	Status = RtlDuplicateUnicodeString(
+	Status = GreenDuplicateUnicodeString(
 		0,
 		RegistryPath,
 		&DriverExtension->RegistryPath);
 	if (!NT_SUCCESS(Status))
 	{
-		DPRINT("RtlDuplicateUnicodeString() failed with status 0x%08lx\n", Status);
+		DPRINT("GreenDuplicateUnicodeString() failed with status 0x%08lx\n", Status);
 		return Status;
 	}
 
@@ -66,3 +66,48 @@
 
 	return STATUS_SUCCESS;
 }
+
+NTSTATUS
+GreenDuplicateUnicodeString(
+    IN ULONG Flags,
+    IN PCUNICODE_STRING SourceString,
+    OUT PUNICODE_STRING DestinationString)
+{
+    if (SourceString == NULL || DestinationString == NULL
+     || SourceString->Length > SourceString->MaximumLength
+     || (SourceString->Length == 0 && SourceString->MaximumLength > 0 && SourceString->Buffer == NULL)
+     || Flags == RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING || Flags >= 4)
+    {
+        return STATUS_INVALID_PARAMETER;
+    }
+
+
+    if ((SourceString->Length == 0)
+     && (Flags != (RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE |
+                   RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING)))
+    {
+        DestinationString->Length = 0;
+        DestinationString->MaximumLength = 0;
+        DestinationString->Buffer = NULL;
+    }
+    else
+    {
+        USHORT DestMaxLength = SourceString->Length;
+
+        if (Flags & RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE)
+            DestMaxLength += sizeof(UNICODE_NULL);
+
+        DestinationString->Buffer = ExAllocatePool(PagedPool, DestMaxLength);
+        if (DestinationString->Buffer == NULL)
+            return STATUS_NO_MEMORY;
+
+        RtlCopyMemory(DestinationString->Buffer, SourceString->Buffer, SourceString->Length);
+        DestinationString->Length = SourceString->Length;
+        DestinationString->MaximumLength = DestMaxLength;
+
+        if (Flags & RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE)
+            DestinationString->Buffer[DestinationString->Length / sizeof(WCHAR)] = 0;
+    }
+
+    return STATUS_SUCCESS;
+}

Modified: trunk/rosapps/drivers/green/green.h
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/drivers/green/green.h?rev=33758&r1=33757&r2=33758&view=diff
==============================================================================
--- trunk/rosapps/drivers/green/green.h [iso-8859-1] (original)
+++ trunk/rosapps/drivers/green/green.h [iso-8859-1] Thu May 29 11:00:20 2008
@@ -9,15 +9,8 @@
 #include <wincon.h>
 #include <drivers/blue/ntddblue.h>
 
-NTSYSAPI
-NTSTATUS
-NTAPI
-RtlDuplicateUnicodeString(
-    IN ULONG Flags,
-    IN PCUNICODE_STRING SourceString,
-    OUT PUNICODE_STRING DestinationString
-);
 #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE         1
+#define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING   2
 
 #define INFINITE -1
 #define KEYBOARD_BUFFER_SIZE 100
@@ -190,3 +183,11 @@
 ScreenDeviceControl(
 	IN PDEVICE_OBJECT DeviceObject,
 	IN PIRP Irp);
+
+/************************************ green.c */
+
+NTSTATUS
+GreenDuplicateUnicodeString(
+    IN ULONG Flags,
+    IN PCUNICODE_STRING SourceString,
+    OUT PUNICODE_STRING DestinationString);

Modified: trunk/rosapps/drivers/green/pnp.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/drivers/green/pnp.c?rev=33758&r1=33757&r2=33758&view=diff
==============================================================================
--- trunk/rosapps/drivers/green/pnp.c [iso-8859-1] (original)
+++ trunk/rosapps/drivers/green/pnp.c [iso-8859-1] Thu May 29 11:00:20 2008
@@ -343,7 +343,7 @@
 			{
 				UNICODE_STRING SourceU, String;
 				RtlInitUnicodeString(&SourceU, Source);
-				Status = RtlDuplicateUnicodeString(
+				Status = GreenDuplicateUnicodeString(
 					RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
 					&SourceU,
 					&String);
@@ -377,7 +377,7 @@
 			if (SourceU.Length)
 			{
 				UNICODE_STRING String;
-				Status = RtlDuplicateUnicodeString(
+				Status = GreenDuplicateUnicodeString(
 					RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE,
 					&SourceU,
 					&String);
@@ -560,3 +560,4 @@
 	return Status;
 }
 
+



More information about the Ros-diffs mailing list