Author: hbelusca
Date: Wed Aug 23 13:40:43 2017
New Revision: 75654
URL:
http://svn.reactos.org/svn/reactos?rev=75654&view=rev
Log:
[USETUP]: Group constant strings together. In EventThread(), use RtlReAllocateHeap() to
resize the pnp-event buffer.
Modified:
branches/setup_improvements/base/setup/usetup/devinst.c
Modified: branches/setup_improvements/base/setup/usetup/devinst.c
URL:
http://svn.reactos.org/svn/reactos/branches/setup_improvements/base/setup/u…
==============================================================================
--- branches/setup_improvements/base/setup/usetup/devinst.c [iso-8859-1] (original)
+++ branches/setup_improvements/base/setup/usetup/devinst.c [iso-8859-1] Wed Aug 23
13:40:43 2017
@@ -46,6 +46,9 @@
UNICODE_STRING ImagePathU = RTL_CONSTANT_STRING(L"ImagePath");
UNICODE_STRING StartU = RTL_CONSTANT_STRING(L"Start");
UNICODE_STRING TypeU = RTL_CONSTANT_STRING(L"Type");
+ UNICODE_STRING UpperFiltersU = RTL_CONSTANT_STRING(L"UpperFilters");
+ PWSTR keyboardClass = L"kbdclass\0";
+
UNICODE_STRING StringU;
OBJECT_ATTRIBUTES ObjectAttributes;
HANDLE hService;
@@ -55,8 +58,6 @@
ULONG Disposition;
NTSTATUS Status;
BOOLEAN deviceInstalled = FALSE;
- UNICODE_STRING UpperFiltersU = RTL_CONSTANT_STRING(L"UpperFilters");
- PWSTR keyboardClass = L"kbdclass\0";
/* Check if we know the hardware */
if (!SetupFindFirstLineW(hInf, L"HardwareIdsDatabase", HardwareId,
&Context))
@@ -206,6 +207,7 @@
{
UNICODE_STRING HardwareIDU = RTL_CONSTANT_STRING(L"HardwareID");
UNICODE_STRING CompatibleIDsU = RTL_CONSTANT_STRING(L"CompatibleIDs");
+
UNICODE_STRING DeviceIdU;
OBJECT_ATTRIBUTES ObjectAttributes;
LPCWSTR HardwareID;
@@ -339,14 +341,15 @@
{
UNICODE_STRING EnumU =
RTL_CONSTANT_STRING(L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Enum");
UNICODE_STRING ServicesU =
RTL_CONSTANT_STRING(L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services");
- PPLUGPLAY_EVENT_BLOCK PnpEvent;
+
+ PPLUGPLAY_EVENT_BLOCK PnpEvent, NewPnpEvent;
OBJECT_ATTRIBUTES ObjectAttributes;
ULONG PnpEventSize;
HINF hInf;
HANDLE hEnum, hServices;
NTSTATUS Status;
- hInf = *(HINF *)lpParameter;
+ hInf = *(HINF*)lpParameter;
InitializeObjectAttributes(&ObjectAttributes, &EnumU, OBJ_CASE_INSENSITIVE,
NULL, NULL);
Status = NtOpenKey(&hEnum, KEY_QUERY_VALUE, &ObjectAttributes);
@@ -366,33 +369,31 @@
}
PnpEventSize = 0x1000;
- PnpEvent = (PPLUGPLAY_EVENT_BLOCK)RtlAllocateHeap(ProcessHeap, 0, PnpEventSize);
+ PnpEvent = RtlAllocateHeap(ProcessHeap, 0, PnpEventSize);
if (PnpEvent == NULL)
{
- NtClose(hEnum);
- NtClose(hServices);
- return STATUS_NO_MEMORY;
+ Status = STATUS_NO_MEMORY;
+ goto Quit;
}
for (;;)
{
DPRINT("Calling NtGetPlugPlayEvent()\n");
- /* Wait for the next pnp event */
+ /* Wait for the next PnP event */
Status = NtGetPlugPlayEvent(0, 0, PnpEvent, PnpEventSize);
- /* Resize the buffer for the PnP event if it's too small. */
+ /* Resize the buffer for the PnP event if it's too small */
if (Status == STATUS_BUFFER_TOO_SMALL)
{
PnpEventSize += 0x400;
- RtlFreeHeap(ProcessHeap, 0, PnpEvent);
- PnpEvent = (PPLUGPLAY_EVENT_BLOCK)RtlAllocateHeap(ProcessHeap, 0,
PnpEventSize);
- if (PnpEvent == NULL)
+ NewPnpEvent = RtlReAllocateHeap(ProcessHeap, 0, PnpEvent, PnpEventSize);
+ if (NewPnpEvent == NULL)
{
- NtClose(hEnum);
- NtClose(hServices);
- return STATUS_NO_MEMORY;
+ Status = STATUS_NO_MEMORY;
+ goto Quit;
}
+ PnpEvent = NewPnpEvent;
continue;
}
@@ -402,7 +403,7 @@
break;
}
- /* Process the pnp event */
+ /* Process the PnP event */
DPRINT("Received PnP Event\n");
if (IsEqualIID(&PnpEvent->EventGuid,
(REFGUID)&GUID_DEVICE_ENUMERATED))
{
@@ -414,15 +415,20 @@
DPRINT("Unknown event\n");
}
- /* Dequeue the current pnp event and signal the next one */
+ /* Dequeue the current PnP event and signal the next one */
NtPlugPlayControl(PlugPlayControlUserResponse, NULL, 0);
}
- RtlFreeHeap(ProcessHeap, 0, PnpEvent);
+ Status = STATUS_SUCCESS;
+
+Quit:
+ if (PnpEvent)
+ RtlFreeHeap(ProcessHeap, 0, PnpEvent);
+
+ NtClose(hServices);
NtClose(hEnum);
- NtClose(hServices);
-
- return STATUS_SUCCESS;
+
+ return Status;
}
DWORD WINAPI