From e2ab9cb060395d16e3ff18f9293dfb0a94fe94ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Wed, 28 Mar 2007 18:47:35 +0000 Subject: [PATCH] Don't use ntoskrnl.RtlDuplicateUnicodeString, as it is not exported on MS Windows svn path=/trunk/; revision=26197 --- reactos/drivers/bus/serenum/detect.c | 11 ++--- reactos/drivers/bus/serenum/fdo.c | 1 - reactos/drivers/bus/serenum/misc.c | 56 +++++++++++++++++++--- reactos/drivers/bus/serenum/pdo.c | 3 +- reactos/drivers/bus/serenum/serenum.c | 6 ++- reactos/drivers/bus/serenum/serenum.h | 11 +++-- reactos/drivers/bus/serenum/serenum.rbuild | 1 + 7 files changed, 69 insertions(+), 20 deletions(-) diff --git a/reactos/drivers/bus/serenum/detect.c b/reactos/drivers/bus/serenum/detect.c index 252e106bf47..3d6e1ddee06 100644 --- a/reactos/drivers/bus/serenum/detect.c +++ b/reactos/drivers/bus/serenum/detect.c @@ -9,7 +9,6 @@ * Hervé Poussineau (hpoussin@reactos.com) */ -#define NDEBUG #include "serenum.h" static NTSTATUS @@ -129,15 +128,15 @@ ReportDetectedDevice( FdoDeviceExtension = (PFDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; RtlZeroMemory(PdoDeviceExtension, sizeof(PDO_DEVICE_EXTENSION)); PdoDeviceExtension->Common.IsFDO = FALSE; - Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, DeviceDescription, &PdoDeviceExtension->DeviceDescription); + Status = DuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, DeviceDescription, &PdoDeviceExtension->DeviceDescription); if (!NT_SUCCESS(Status)) goto ByeBye; - Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, DeviceId, &PdoDeviceExtension->DeviceId); + Status = DuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, DeviceId, &PdoDeviceExtension->DeviceId); if (!NT_SUCCESS(Status)) goto ByeBye; - Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, InstanceId, &PdoDeviceExtension->InstanceId); + Status = DuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, InstanceId, &PdoDeviceExtension->InstanceId); if (!NT_SUCCESS(Status)) goto ByeBye; - Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, HardwareIds, &PdoDeviceExtension->HardwareIds); + Status = DuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, HardwareIds, &PdoDeviceExtension->HardwareIds); if (!NT_SUCCESS(Status)) goto ByeBye; - Status = RtlDuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, CompatibleIds, &PdoDeviceExtension->CompatibleIds); + Status = DuplicateUnicodeString(RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, CompatibleIds, &PdoDeviceExtension->CompatibleIds); if (!NT_SUCCESS(Status)) goto ByeBye; /* Device attached to serial port (Pdo) may delegate work to diff --git a/reactos/drivers/bus/serenum/fdo.c b/reactos/drivers/bus/serenum/fdo.c index d394990ca93..a66f0c84dbe 100644 --- a/reactos/drivers/bus/serenum/fdo.c +++ b/reactos/drivers/bus/serenum/fdo.c @@ -7,7 +7,6 @@ * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.com) */ -#define NDEBUG #include "serenum.h" NTSTATUS NTAPI diff --git a/reactos/drivers/bus/serenum/misc.c b/reactos/drivers/bus/serenum/misc.c index bd1575118b6..1dad6ac1ae6 100644 --- a/reactos/drivers/bus/serenum/misc.c +++ b/reactos/drivers/bus/serenum/misc.c @@ -7,10 +7,11 @@ * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.com) */ -#define NDEBUG #include "serenum.h" #include +static IO_COMPLETION_ROUTINE ForwardIrpAndWaitCompletion; + /* I really want PCSZ strings as last arguments because * PnP ids are ANSI-encoded in PnP device string * identification */ @@ -114,7 +115,7 @@ ForwardIrpAndWait( KeInitializeEvent(&Event, NotificationEvent, FALSE); IoCopyCurrentIrpStackLocationToNext(Irp); - DPRINT("Calling lower device %p [%wZ]\n", LowerDevice, &LowerDevice->DriverObject->DriverName); + DPRINT("Calling lower device %p\n", LowerDevice); IoSetCompletionRoutine(Irp, ForwardIrpAndWaitCompletion, &Event, TRUE, TRUE, TRUE); Status = IoCallDriver(LowerDevice, Irp); @@ -141,8 +142,7 @@ ForwardIrpToLowerDeviceAndForget( LowerDevice = DeviceExtension->LowerDevice; ASSERT(LowerDevice); - DPRINT("Calling lower device 0x%p [%wZ]\n", - LowerDevice, &LowerDevice->DriverObject->DriverName); + DPRINT("Calling lower device 0x%p\n", LowerDevice); IoSkipCurrentIrpStackLocation(Irp); return IoCallDriver(LowerDevice, Irp); } @@ -160,8 +160,7 @@ ForwardIrpToAttachedFdoAndForget( Fdo = DeviceExtension->AttachedFdo; ASSERT(Fdo); - DPRINT("Calling attached Fdo 0x%p [%wZ]\n", - Fdo, &Fdo->DriverObject->DriverName); + DPRINT("Calling attached Fdo 0x%p\n", Fdo); IoSkipCurrentIrpStackLocation(Irp); return IoCallDriver(Fdo, Irp); } @@ -180,3 +179,48 @@ ForwardIrpAndForget( IoSkipCurrentIrpStackLocation(Irp); return IoCallDriver(LowerDevice, Irp); } + +NTSTATUS +DuplicateUnicodeString( + 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 = ExAllocatePoolWithTag(PagedPool, DestMaxLength, SERENUM_TAG); + 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; +} diff --git a/reactos/drivers/bus/serenum/pdo.c b/reactos/drivers/bus/serenum/pdo.c index 1660c13a996..d612d471c95 100644 --- a/reactos/drivers/bus/serenum/pdo.c +++ b/reactos/drivers/bus/serenum/pdo.c @@ -7,7 +7,6 @@ * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.com) */ -#define NDEBUG #include "serenum.h" static NTSTATUS @@ -70,7 +69,7 @@ SerenumPdoQueryId( return STATUS_NOT_SUPPORTED; } - Status = RtlDuplicateUnicodeString( + Status = DuplicateUnicodeString( RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE, SourceString, &String); diff --git a/reactos/drivers/bus/serenum/serenum.c b/reactos/drivers/bus/serenum/serenum.c index 0fcb4766544..4a7de8395e0 100644 --- a/reactos/drivers/bus/serenum/serenum.c +++ b/reactos/drivers/bus/serenum/serenum.c @@ -7,10 +7,14 @@ * PROGRAMMERS: Hervé Poussineau (hpoussin@reactos.com) */ -#define NDEBUG #define INITGUID #include "serenum.h" +static DRIVER_DISPATCH SerenumPnp; +static DRIVER_DISPATCH IrpStub; +static DRIVER_UNLOAD DriverUnload; +DRIVER_INITIALIZE DriverEntry; + static NTSTATUS NTAPI SerenumPnp( IN PDEVICE_OBJECT DeviceObject, diff --git a/reactos/drivers/bus/serenum/serenum.h b/reactos/drivers/bus/serenum/serenum.h index e65a6a2de18..34793f5974e 100644 --- a/reactos/drivers/bus/serenum/serenum.h +++ b/reactos/drivers/bus/serenum/serenum.h @@ -86,10 +86,7 @@ SerenumDetectLegacyDevice( /************************************ fdo.c */ -NTSTATUS NTAPI -SerenumAddDevice( - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT Pdo); +DRIVER_ADD_DEVICE SerenumAddDevice; NTSTATUS SerenumFdoPnp( @@ -123,6 +120,12 @@ ForwardIrpAndForget( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp); +NTSTATUS +DuplicateUnicodeString( + IN ULONG Flags, + IN PCUNICODE_STRING SourceString, + OUT PUNICODE_STRING DestinationString); + /************************************ pdo.c */ NTSTATUS diff --git a/reactos/drivers/bus/serenum/serenum.rbuild b/reactos/drivers/bus/serenum/serenum.rbuild index 9db96ab67e1..45a0785fd09 100644 --- a/reactos/drivers/bus/serenum/serenum.rbuild +++ b/reactos/drivers/bus/serenum/serenum.rbuild @@ -1,6 +1,7 @@ . + ntoskrnl hal detect.c