Merge 15381:15421 from trunk. Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/reactos/reac tos.c Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/reactos/setu pldr.c Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/ui/ui.c Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/acpisys.c Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/fdo.c Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/include/acp isys.h Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/osl.c Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/pdo.c Modified: branches/cache_manager_rewrite/reactos/drivers/bus/pci/pci.c Modified: branches/cache_manager_rewrite/reactos/drivers/bus/pci/pdo.c Modified: branches/cache_manager_rewrite/reactos/drivers/dd/serial/legacy.c Modified: branches/cache_manager_rewrite/reactos/drivers/dd/serial/pnp.c Modified: branches/cache_manager_rewrite/reactos/drivers/dd/serial/serial.h Modified: branches/cache_manager_rewrite/reactos/drivers/input/i8042prt/i8042prt.h Modified: branches/cache_manager_rewrite/reactos/drivers/input/i8042prt/mouse.c Modified: branches/cache_manager_rewrite/reactos/drivers/net/afd/afd/info.c Modified: branches/cache_manager_rewrite/reactos/include/ddk/obfuncs.h Modified: branches/cache_manager_rewrite/reactos/lib/kernel32/mem/section.c Modified: branches/cache_manager_rewrite/reactos/lib/kernel32/synch/event.c Modified: branches/cache_manager_rewrite/reactos/lib/kernel32/synch/mutex.c Modified: branches/cache_manager_rewrite/reactos/lib/kernel32/synch/sem.c Modified: branches/cache_manager_rewrite/reactos/lib/kernel32/synch/timer.c Modified: branches/cache_manager_rewrite/reactos/lib/msacm/msacm.rc Added: branches/cache_manager_rewrite/reactos/lib/msacm/msacm_Sv.rc Added: branches/cache_manager_rewrite/reactos/lib/setupapi/Sv.rc Modified: branches/cache_manager_rewrite/reactos/lib/setupapi/setupapi.rc Added: branches/cache_manager_rewrite/reactos/lib/shdocvw/Sv.rc Modified: branches/cache_manager_rewrite/reactos/lib/shdocvw/shdocvw.rc Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/cm/cm.h Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/cm/ntfunc.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/cm/registry.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/cm/regobj.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ex/init.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/include/internal/io.h Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/include/internal/ob.h Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/io/device.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/io/driver.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/io/file.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/io/fs.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/io/iocomp.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/io/iomgr.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/io/pnpmgr.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/kdbg/kdb_cli.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ke/bug.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ke/clock.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ke/gate.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ke/i386/main.S Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ldr/loader.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/mm/section.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ob/dirobj.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ob/handle.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ob/namespc.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ob/ntobj.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/ob/object.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/rtl/nls.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/se/sd.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/se/semgr.c Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/se/token.c Modified: branches/cache_manager_rewrite/reactos/subsys/system/cmd/dir.c Modified: branches/cache_manager_rewrite/reactos/subsys/system/cmd/internal.c Modified: branches/cache_manager_rewrite/reactos/subsys/system/dhcp/dhclient.c Modified: branches/cache_manager_rewrite/reactos/subsys/system/usetup/cabinet.c Modified: branches/cache_manager_rewrite/reactos/subsys/system/usetup/cabinet.h Modified: branches/cache_manager_rewrite/reactos/subsys/system/usetup/filesup.c Modified: branches/cache_manager_rewrite/reactos/subsys/system/usetup/format.c Modified: branches/cache_manager_rewrite/reactos/subsys/system/usetup/progress.c Modified: branches/cache_manager_rewrite/reactos/subsys/system/usetup/progress.h Modified: branches/cache_manager_rewrite/reactos/subsys/system/usetup/usetup.c Modified: branches/cache_manager_rewrite/reactos/subsys/win32k/include/csr.h Modified: branches/cache_manager_rewrite/reactos/subsys/win32k/ntuser/csr.c Modified: branches/cache_manager_rewrite/reactos/subsys/win32k/ntuser/desktop.c Modified: branches/cache_manager_rewrite/reactos/tools/cabman/dfp.cxx Modified: branches/cache_manager_rewrite/reactos/tools/cabman/main.cxx Modified: branches/cache_manager_rewrite/reactos/tools/rsym.c Modified: branches/cache_manager_rewrite/reactos/w32api/include/ddk/winddk.h Property changes on: branches/cache_manager_rewrite/reactos/apps/utils ___________________________________________________________________ Name: svn:ignore + _____
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/reactos/reac tos.c --- branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/reactos/reac tos.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/reactos/reac tos.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -756,6 +756,16 @@
if (!FrLdrLoadDriver(szHalName, 10)) return;
+#if 0 + /* Load bootvid */ + strcpy(value, "INBV.DLL"); + strcpy(szHalName, szBootPath); + strcat(szHalName, "SYSTEM32\"); + strcat(szHalName, value); + + if (!FrLdrLoadDriver(szHalName, 10)) + return; +#endif /* * Load the System hive from disk */ _____
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/reactos/setu pldr.c --- branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/reactos/setu pldr.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/reactos/setu pldr.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -34,7 +34,7 @@
#include "registry.h"
-//#define USE_UI +#define USE_UI
static BOOL @@ -88,7 +88,7 @@ * Update the status bar with the current file */ #ifdef USE_UI - sprintf(szBuffer, "Reading %s", szShortName); + sprintf(szBuffer, "Setup is loading files (%s)", szShortName); UiDrawStatusText(szBuffer); #else printf("Reading %s\n", szShortName); @@ -155,7 +155,7 @@ * Update the status bar with the current file */ #ifdef USE_UI - sprintf(szBuffer, "Reading %s", szShortName); + sprintf(szBuffer, "Setup is loading files (%s)", szShortName); UiDrawStatusText(szBuffer); #else printf("Reading %s\n", szShortName); @@ -220,7 +220,7 @@ * Update the status bar with the current file */ #ifdef USE_UI - sprintf(szBuffer, "Reading %s", szShortName); + sprintf(szBuffer, "Setup is loading files (%s)", szShortName); UiDrawStatusText(szBuffer); #else printf("Reading %s\n", szShortName); @@ -232,6 +232,7 @@ return(TRUE); }
+BOOL SetupUiInitialize(VOID);
VOID RunLoader(VOID) { @@ -294,7 +295,7 @@ #endif
#ifdef USE_UI - UiInitialize(); + SetupUiInitialize(); UiDrawStatusText(""); #endif
_____
Modified: branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/ui/ui.c --- branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/ui/ui.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/boot/freeldr/freeldr/ui/ui.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -27,6 +27,7 @@
#include <inifile.h> #include <version.h> #include <video.h> +#include <reactos/buildno.h>
ULONG UiScreenWidth = 80; // Screen Width ULONG UiScreenHeight = 25; // Screen Height @@ -197,7 +198,40 @@ UserInterfaceUp = TRUE;
DbgPrint((DPRINT_UI, "UiInitialize() returning TRUE.\n")); + return TRUE; +}
+BOOL SetupUiInitialize(VOID) +{ + + CHAR DisplayModeText[260]; + ULONG Depth; + + + DisplayModeText[0] = '\0'; + + + UiDisplayMode = MachVideoSetDisplayMode(DisplayModeText, TRUE); + MachVideoGetDisplaySize(&UiScreenWidth, &UiScreenHeight, &Depth); + + TuiInitialize(); + + // Draw the backdrop and fade it in if special effects are enabled + TuiFillArea(0, + 0, + UiScreenWidth - 1, + UiScreenHeight - 2, + 0, + ATTR(UiBackdropFgColor, UiBackdropBgColor)); + + UiStatusBarBgColor = 7; + UserInterfaceUp = TRUE; + + TuiDrawText(4, 1, "ReactOS " KERNEL_VERSION_STR " Setup", ATTR(COLOR_GRAY, UiBackdropBgColor)); + TuiDrawText(3, 2, "\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xCD\xC D\xCD\xCD\xCD\xCD\xCD\xCD", ATTR(COLOR_GRAY, UiBackdropBgColor)); + + DbgPrint((DPRINT_UI, "UiInitialize() returning TRUE.\n")); + return TRUE; }
_____
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/acpisys.c --- branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/acpisys.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/acpisys.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -162,7 +162,7 @@
IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { - DbgPrint("Advanced Configuration and Power Interface Bus Driver\n"); + DPRINT("Advanced Configuration and Power Interface Bus Driver\n");
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = (PDRIVER_DISPATCH) ACPIDispatchDeviceControl; DriverObject->MajorFunction[IRP_MJ_PNP] = (PDRIVER_DISPATCH) ACPIPnpControl; _____
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/fdo.c --- branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/fdo.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/fdo.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -119,12 +119,16 @@
static BOOLEAN AcpiCreateResourceList(PCM_RESOURCE_LIST* pResourceList, PULONG ResourceListSize, + PIO_RESOURCE_REQUIREMENTS_LIST* pRequirementsList, + PULONG RequirementsListSize, RESOURCE* resources) { BOOLEAN Done; ULONG NumberOfResources = 0; PCM_RESOURCE_LIST ResourceList; + PIO_RESOURCE_REQUIREMENTS_LIST RequirementsList; PCM_PARTIAL_RESOURCE_DESCRIPTOR ResourceDescriptor; + PIO_RESOURCE_DESCRIPTOR RequirementDescriptor; RESOURCE* resource; ULONG i; KIRQL Dirql; @@ -176,6 +180,24 @@ ResourceList->List[0].PartialResourceList.Count = NumberOfResources; ResourceDescriptor = ResourceList->List[0].PartialResourceList.PartialDescriptors;
+ *RequirementsListSize = sizeof(IO_RESOURCE_REQUIREMENTS_LIST) + sizeof(IO_RESOURCE_DESCRIPTOR) * (NumberOfResources - 1); + RequirementsList = (PIO_RESOURCE_REQUIREMENTS_LIST)ExAllocatePool(PagedPool, *RequirementsListSize); + *pRequirementsList = RequirementsList; + if (!RequirementsList) + { + ExFreePool(ResourceList); + return FALSE; + } + RequirementsList->ListSize = *RequirementsListSize; + RequirementsList->InterfaceType = ResourceList->List[0].InterfaceType; + RequirementsList->BusNumber = ResourceList->List[0].BusNumber; + RequirementsList->SlotNumber = 0; /* Not used by WDM drivers */ + RequirementsList->AlternativeLists = 1; + RequirementsList->List[0].Version = 1; + RequirementsList->List[0].Revision = 1; + RequirementsList->List[0].Count = NumberOfResources; + RequirementDescriptor = RequirementsList->List[0].Descriptors; + /* Fill resources list structure */ Done = FALSE; resource = resources; @@ -199,7 +221,16 @@ &Dirql, &ResourceDescriptor->u.Interrupt.Affinity); ResourceDescriptor->u.Interrupt.Level = (ULONG)Dirql; + + RequirementDescriptor->Option = 0; /* Required */ + RequirementDescriptor->Type = ResourceDescriptor->Type; + RequirementDescriptor->ShareDisposition = ResourceDescriptor->ShareDisposition; + RequirementDescriptor->Flags = ResourceDescriptor->Flags; + RequirementDescriptor->u.Interrupt.MinimumVector = RequirementDescriptor->u.Interrupt.MaximumVector + = irq_data->interrupts[i]; + ResourceDescriptor++; + RequirementDescriptor++; } break; } @@ -225,7 +256,16 @@ case TRANSFER_8_16: ResourceDescriptor->Flags |= CM_RESOURCE_DMA_8_AND_16; break; } ResourceDescriptor->u.Dma.Channel = dma_data->channels[i]; + + RequirementDescriptor->Option = 0; /* Required */ + RequirementDescriptor->Type = ResourceDescriptor->Type; + RequirementDescriptor->ShareDisposition = ResourceDescriptor->ShareDisposition; + RequirementDescriptor->Flags = ResourceDescriptor->Flags; + RequirementDescriptor->u.Dma.MinimumChannel = RequirementDescriptor->u.Dma.MaximumChannel + = ResourceDescriptor->u.Dma.Channel; + ResourceDescriptor++; + RequirementDescriptor++; } break; } @@ -242,7 +282,18 @@ ResourceDescriptor->u.Port.Start.u.HighPart = 0; ResourceDescriptor->u.Port.Start.u.LowPart = io_data->min_base_address; ResourceDescriptor->u.Port.Length = io_data->range_length; + + RequirementDescriptor->Option = 0; /* Required */ + RequirementDescriptor->Type = ResourceDescriptor->Type; + RequirementDescriptor->ShareDisposition = ResourceDescriptor->ShareDisposition; + RequirementDescriptor->Flags = ResourceDescriptor->Flags; + RequirementDescriptor->u.Port.Length = ResourceDescriptor->u.Port.Length; + RequirementDescriptor->u.Port.Alignment = 1; /* Start address is specified, so it doesn't matter */ + RequirementDescriptor->u.Port.MinimumAddress = RequirementDescriptor->u.Port.MaximumAddress + = ResourceDescriptor->u.Port.Start; + ResourceDescriptor++; + RequirementDescriptor++; break; } case end_tag: @@ -366,6 +417,8 @@ } if (!AcpiCreateResourceList(&PdoDeviceExtension->ResourceList,
&PdoDeviceExtension->ResourceListSize, + &PdoDeviceExtension->ResourceRequirementsList, + &PdoDeviceExtension->ResourceRequirementsListSize, (RESOURCE*)Buffer.pointer)) { ASSERT(FALSE); @@ -573,7 +626,9 @@ } }
+#ifndef NDEBUG ACPIPrintInfo(DeviceExtension); +#endif
/* Initialize ACPI bus manager */ AcpiStatus = bm_initialize(); _____
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/include/acp isys.h --- branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/include/acp isys.h 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/include/acp isys.h 2005-06-04 17:35:39 UTC (rev 15773) @@ -50,6 +50,9 @@
// Resource list PCM_RESOURCE_LIST ResourceList; ULONG ResourceListSize; + // Requirement list + PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList; + ULONG ResourceRequirementsListSize; } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
_____
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/osl.c --- branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/osl.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/osl.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -98,7 +98,7 @@
static char Buffer[512]; LONG Size = vsprintf(Buffer, fmt, args);
- DbgPrint("%s", Buffer); + DPRINT("%s", Buffer); return Size; }
_____
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/pdo.c --- branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/pdo.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/bus/acpi/ospm/pdo.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -108,6 +108,35 @@
static NTSTATUS +PdoQueryResourceRequirements( + IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp, + PIO_STACK_LOCATION IrpSp) +{ + PPDO_DEVICE_EXTENSION DeviceExtension; + PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirementsList; + + DeviceExtension = (PPDO_DEVICE_EXTENSION)DeviceObject->DeviceExtension; + + if (DeviceExtension->ResourceRequirementsListSize == 0) + { + return Irp->IoStatus.Status; + } + + ResourceRequirementsList = ExAllocatePool(PagedPool, DeviceExtension->ResourceRequirementsListSize); + if (!ResourceRequirementsList) + { + Irp->IoStatus.Information = 0; + return STATUS_INSUFFICIENT_RESOURCES; + } + + RtlCopyMemory(ResourceRequirementsList, DeviceExtension->ResourceRequirementsList, DeviceExtension->ResourceRequirementsListSize); + Irp->IoStatus.Information = (ULONG_PTR)ResourceRequirementsList; + return STATUS_SUCCESS; +} + + +static NTSTATUS PdoQueryResources( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, @@ -227,6 +256,9 @@ break;
case IRP_MN_QUERY_RESOURCE_REQUIREMENTS: + Status = PdoQueryResourceRequirements(DeviceObject, + Irp, + IrpSp); break;
case IRP_MN_QUERY_RESOURCES: _____
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/pci/pci.c --- branches/cache_manager_rewrite/reactos/drivers/bus/pci/pci.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/bus/pci/pci.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -172,7 +172,7 @@
IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { - DbgPrint("Peripheral Component Interconnect Bus Driver\n"); + DPRINT("Peripheral Component Interconnect Bus Driver\n");
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = PciDispatchDeviceControl; DriverObject->MajorFunction[IRP_MJ_PNP] = PciPnpControl; _____
Modified: branches/cache_manager_rewrite/reactos/drivers/bus/pci/pdo.c --- branches/cache_manager_rewrite/reactos/drivers/bus/pci/pdo.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/bus/pci/pdo.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -409,6 +409,8 @@
ResourceList->ListSize = ListSize; ResourceList->InterfaceType = PCIBus; + ResourceList->BusNumber = DeviceExtension->BusNumber, + ResourceList->SlotNumber = DeviceExtension->SlotNumber.u.AsULONG, ResourceList->AlternativeLists = 1;
ResourceList->List[0].Version = 1; _____
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/serial/legacy.c --- branches/cache_manager_rewrite/reactos/drivers/dd/serial/legacy.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/dd/serial/legacy.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -83,12 +83,13 @@
{ ULONG ResourceListSize; PCM_RESOURCE_LIST ResourceList; + PCM_RESOURCE_LIST ResourceListTranslated; PCM_PARTIAL_RESOURCE_DESCRIPTOR ResourceDescriptor; + PCM_PARTIAL_RESOURCE_DESCRIPTOR ResourceDescriptorTranslated; BOOLEAN ConflictDetected; UART_TYPE UartType; PDEVICE_OBJECT Pdo = NULL; PDEVICE_OBJECT Fdo; - KIRQL Dirql; NTSTATUS Status;
/* Create resource list */ @@ -96,29 +97,60 @@ ResourceList = (PCM_RESOURCE_LIST)ExAllocatePoolWithTag(PagedPool, ResourceListSize, SERIAL_TAG); if (!ResourceList) return STATUS_INSUFFICIENT_RESOURCES; - ResourceList->Count = 1; - ResourceList->List[0].InterfaceType = InterfaceTypeUndefined; - ResourceList->List[0].BusNumber = -1; /* unknown */ - ResourceList->List[0].PartialResourceList.Version = 1; - ResourceList->List[0].PartialResourceList.Revision = 1; - ResourceList->List[0].PartialResourceList.Count = 2; + ResourceListTranslated = (PCM_RESOURCE_LIST)ExAllocatePoolWithTag(PagedPool, ResourceListSize, SERIAL_TAG); + if (!ResourceListTranslated) + { + ExFreePoolWithTag(ResourceList, SERIAL_TAG); + return STATUS_INSUFFICIENT_RESOURCES; + } + + /* Resource header */ + ResourceList->Count = ResourceListTranslated->Count + = 1; + ResourceList->List[0].InterfaceType = ResourceListTranslated->List[0].InterfaceType + = InterfaceTypeUndefined; + ResourceList->List[0].BusNumber = ResourceListTranslated->List[0].BusNumber + = -1; /* unknown */ + ResourceList->List[0].PartialResourceList.Version = ResourceListTranslated->List[0].PartialResourceList.Version + = 1; + ResourceList->List[0].PartialResourceList.Revision = ResourceListTranslated->List[0].PartialResourceList.Revision + = 1; + ResourceList->List[0].PartialResourceList.Count = ResourceListTranslated->List[0].PartialResourceList.Count + = 2; + + /* I/O port */ ResourceDescriptor = &ResourceList->List[0].PartialResourceList.PartialDescriptors[0]; - ResourceDescriptor->Type = CmResourceTypePort; - ResourceDescriptor->ShareDisposition = CmResourceShareDriverExclusive; - ResourceDescriptor->Flags = CM_RESOURCE_PORT_IO; - ResourceDescriptor->u.Port.Start.u.HighPart = 0; - ResourceDescriptor->u.Port.Start.u.LowPart = ComPortBase; - ResourceDescriptor->u.Port.Length = 8; + ResourceDescriptorTranslated = &ResourceListTranslated->List[0].PartialResourceList.PartialDescriptors[ 0]; + ResourceDescriptor->Type = ResourceDescriptorTranslated->Type + = CmResourceTypePort; + ResourceDescriptor->ShareDisposition = ResourceDescriptorTranslated->ShareDisposition + = CmResourceShareDriverExclusive; + ResourceDescriptor->Flags = ResourceDescriptorTranslated->Flags + = CM_RESOURCE_PORT_IO; + ResourceDescriptor->u.Port.Start.u.HighPart = ResourceDescriptorTranslated->u.Port.Start.u.HighPart + = 0; + ResourceDescriptor->u.Port.Start.u.LowPart = ResourceDescriptorTranslated->u.Port.Start.u.LowPart + = ComPortBase; + ResourceDescriptor->u.Port.Length = ResourceDescriptorTranslated->u.Port.Length + = 8;
ResourceDescriptor = &ResourceList->List[0].PartialResourceList.PartialDescriptors[1]; - ResourceDescriptor->Type = CmResourceTypeInterrupt; - ResourceDescriptor->ShareDisposition = CmResourceShareShared; - ResourceDescriptor->Flags = CM_RESOURCE_INTERRUPT_LATCHED; - ResourceDescriptor->u.Interrupt.Vector = HalGetInterruptVector( - Internal, 0, 0, Irq, - &Dirql, + ResourceDescriptorTranslated = &ResourceListTranslated->List[0].PartialResourceList.PartialDescriptors[ 1]; + ResourceDescriptor->Type = ResourceDescriptorTranslated->Type + = CmResourceTypeInterrupt; + ResourceDescriptor->ShareDisposition = ResourceDescriptorTranslated->ShareDisposition + = CmResourceShareShared; + ResourceDescriptor->Flags = ResourceDescriptorTranslated->Flags + = CM_RESOURCE_INTERRUPT_LATCHED; + ResourceDescriptor->u.Interrupt.Level = Irq; + ResourceDescriptorTranslated->u.Interrupt.Vector = HalGetInterruptVector( + ResourceList->List[0].InterfaceType, + ResourceList->List[0].BusNumber, + ResourceDescriptor->u.Interrupt.Level, + ResourceDescriptor->u.Interrupt.Vector, + (PKIRQL)&ResourceDescriptorTranslated->u.Interrupt.Level, &ResourceDescriptor->u.Interrupt.Affinity); - ResourceDescriptor->u.Interrupt.Level = (ULONG)Dirql; + ResourceDescriptorTranslated->u.Interrupt.Affinity = ResourceDescriptor->u.Interrupt.Affinity;
/* Report resource list */ Status = IoReportResourceForDetection( @@ -129,11 +161,13 @@ { DPRINT("Serial: conflict detected for serial port at 0x%lx (Irq %lu)\n", ComPortBase, Irq); ExFreePoolWithTag(ResourceList, SERIAL_TAG); + ExFreePoolWithTag(ResourceListTranslated, SERIAL_TAG); return STATUS_DEVICE_NOT_CONNECTED; } if (!NT_SUCCESS(Status)) { ExFreePoolWithTag(ResourceList, SERIAL_TAG); + ExFreePoolWithTag(ResourceListTranslated, SERIAL_TAG); return Status; }
@@ -154,7 +188,7 @@ Status = SerialAddDeviceInternal(DriverObject, Pdo, UartType, pComPortNumber, &Fdo); if (NT_SUCCESS(Status)) { - Status = SerialPnpStartDevice(Fdo, ResourceList); + Status = SerialPnpStartDevice(Fdo, ResourceList, ResourceListTranslated); } } } @@ -168,6 +202,7 @@ Status = STATUS_DEVICE_NOT_CONNECTED; } ExFreePoolWithTag(ResourceList, SERIAL_TAG); + ExFreePoolWithTag(ResourceListTranslated, SERIAL_TAG); return Status; }
_____
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/serial/pnp.c --- branches/cache_manager_rewrite/reactos/drivers/dd/serial/pnp.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/dd/serial/pnp.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -126,7 +126,8 @@
NTSTATUS STDCALL SerialPnpStartDevice( IN PDEVICE_OBJECT DeviceObject, - IN PCM_RESOURCE_LIST ResourceList) + IN PCM_RESOURCE_LIST ResourceList, + IN PCM_RESOURCE_LIST ResourceListTranslated) { PSERIAL_DEVICE_EXTENSION DeviceExtension; WCHAR DeviceNameBuffer[32]; @@ -174,8 +175,8 @@ case CmResourceTypeInterrupt: if (Dirql != 0) return STATUS_UNSUCCESSFUL; - Dirql = (KIRQL)PartialDescriptor->u.Interrupt.Level; - Vector = PartialDescriptor->u.Interrupt.Vector; + Dirql = (KIRQL)ResourceListTranslated->List[i].PartialResourceList.PartialDescri ptors[j].u.Interrupt.Level; + Vector = ResourceListTranslated->List[i].PartialResourceList.PartialDescriptors[j ].u.Interrupt.Vector; Affinity = PartialDescriptor->u.Interrupt.Affinity; if (PartialDescriptor->Flags & CM_RESOURCE_INTERRUPT_LATCHED) InterruptMode = Latched; @@ -338,16 +339,9 @@ BOOLEAN ConflictDetected; DPRINT("Serial: IRP_MJ_PNP / IRP_MN_START_DEVICE\n");
- /* FIXME: first HACK: PnP manager can send multiple - * IRP_MN_START_DEVICE for one device - */ - if (((PSERIAL_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->PnpState != dsStopped) - { - DPRINT1("Serial: device already started. Ignoring this irp!\n"); - Status = STATUS_SUCCESS; - break; - } - /* FIXME: second HACK: verify that we have some allocated resources. + ASSERT(((PSERIAL_DEVICE_EXTENSION)DeviceObject->DeviceExtension)->PnpSta te == dsStopped); + + /* FIXME: HACK: verify that we have some allocated resources. * It seems not to be always the case on some hardware */ if (Stack->Parameters.StartDevice.AllocatedResources == NULL) @@ -357,7 +351,7 @@ Status = STATUS_INSUFFICIENT_RESOURCES; break; } - /* FIXME: third HACK: verify that we don't have resource conflict, + /* FIXME: HACK: verify that we don't have resource conflict, * because PnP manager doesn't do it automatically */ Status = IoReportResourceForDetection( @@ -377,7 +371,8 @@ if (NT_SUCCESS(Status)) Status = SerialPnpStartDevice( DeviceObject, - Stack->Parameters.StartDevice.AllocatedResources); + Stack->Parameters.StartDevice.AllocatedResources, + Stack->Parameters.StartDevice.AllocatedResourcesTranslated); break; } case IRP_MN_QUERY_DEVICE_RELATIONS: /* (optional) 0x7 */ _____
Modified: branches/cache_manager_rewrite/reactos/drivers/dd/serial/serial.h --- branches/cache_manager_rewrite/reactos/drivers/dd/serial/serial.h 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/dd/serial/serial.h 2005-06-04 17:35:39 UTC (rev 15773) @@ -327,7 +327,8 @@
NTSTATUS STDCALL SerialPnpStartDevice( IN PDEVICE_OBJECT DeviceObject, - IN PCM_RESOURCE_LIST ResourceList); + IN PCM_RESOURCE_LIST ResourceList, + IN PCM_RESOURCE_LIST ResourceListTranslated);
NTSTATUS STDCALL SerialPnp( _____
Modified: branches/cache_manager_rewrite/reactos/drivers/input/i8042prt/i8042prt.h --- branches/cache_manager_rewrite/reactos/drivers/input/i8042prt/i8042prt.h 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/input/i8042prt/i8042prt.h 2005-06-04 17:35:39 UTC (rev 15773) @@ -86,7 +86,7 @@
DWORD OverrideKeyboardType; DWORD OverrideKeyboardSubtype; DWORD MouseResendStallTime; - DWORD MouseSynchIn100ns; + DWORD MouseSynchIn100ns; /* done */ DWORD MouseResolution; /* done */ DWORD NumberOfButtons; DWORD EnableWheelDetection; @@ -169,6 +169,7 @@ MOUSE_INPUT_DATA *MouseBuffer; ULONG MouseInBuffer; USHORT MouseButtonState; + ULARGE_INTEGER MousePacketStartTime;
UCHAR MouseLogiBuffer[3]; UCHAR MouseLogitechID; _____
Modified: branches/cache_manager_rewrite/reactos/drivers/input/i8042prt/mouse.c --- branches/cache_manager_rewrite/reactos/drivers/input/i8042prt/mouse.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/input/i8042prt/mouse.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -45,6 +45,39 @@
WaitForAck); }
+/* Test if packets are taking too long to come in. If they do, we + * might have gotten out of sync and should just drop what we have. + * + * If we want to be totally right, we'd also have to keep a count of + * errors, and totally reset the mouse after too much of them (can + * happen if the user is using a KVM switch and an OS on another port + * resets the mouse, or if the user hotplugs the mouse, or if we're just + * generally unlucky). Also note the input parsing routine where we + * drop invalid input packets. + */ +static VOID STDCALL I8042MouseInputTestTimeout(PDEVICE_EXTENSION DevExt) +{ + ULARGE_INTEGER Now; + + if (DevExt->MouseState == MouseExpectingACK || + DevExt->MouseState == MouseResetting) + return; + + Now.QuadPart = KeQueryInterruptTime(); + + if (DevExt->MouseState != MouseIdle) { + /* Check if the last byte came too long ago */ + if (Now.QuadPart - DevExt->MousePacketStartTime.QuadPart
+ DevExt->Settings.MouseSynchIn100ns) { + DPRINT1("Mouse input packet timeout\n"); + DevExt->MouseState = MouseIdle; + } + } + + if (DevExt->MouseState == MouseIdle) + DevExt->MousePacketStartTime.QuadPart = Now.QuadPart; +} + /* * Call the customization hook. The Ret2 parameter is about wether * we should go on with the interrupt. The return value is what @@ -517,6 +550,8 @@ return TRUE; }
+ I8042MouseInputTestTimeout(DevExt); + if (I8042MouseResetIsr(DevExt, PortStatus, &Output)) { DPRINT("Handled by ResetIsr or hooked Isr\n"); if (NoChange != DevExt->MouseTimeoutState) { _____
Modified: branches/cache_manager_rewrite/reactos/drivers/net/afd/afd/info.c --- branches/cache_manager_rewrite/reactos/drivers/net/afd/afd/info.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/drivers/net/afd/afd/info.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -141,7 +141,7 @@
}
/* MmUnlockPages( Mdl ); */ - IoFreeMdl( Mdl ); + /* IoFreeMdl( Mdl ); */ } else { Status = STATUS_INSUFFICIENT_RESOURCES; } _____
Modified: branches/cache_manager_rewrite/reactos/include/ddk/obfuncs.h --- branches/cache_manager_rewrite/reactos/include/ddk/obfuncs.h 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/include/ddk/obfuncs.h 2005-06-04 17:35:39 UTC (rev 15773) @@ -63,6 +63,15 @@
PSECURITY_DESCRIPTOR SecurityDescriptor, PULONG BufferLength);
+typedef struct _OBJECT_HEADER_NAME_INFO +{ + struct _DIRECTORY_OBJECT *Directory; + UNICODE_STRING Name; + ULONG QueryReferences; + ULONG Reserved2; + ULONG DbgReferenceCount; +} OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO; + typedef struct _OBJECT_CREATE_INFORMATION { ULONG Attributes; _____
Modified: branches/cache_manager_rewrite/reactos/lib/kernel32/mem/section.c --- branches/cache_manager_rewrite/reactos/lib/kernel32/mem/section.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/lib/kernel32/mem/section.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -77,7 +77,7 @@
InitializeObjectAttributes(&ObjectAttributes, (lpName ? &UnicodeName : NULL), 0, - hBaseDir, + (lpName ? hBaseDir : NULL), SecurityDescriptor);
Status = NtCreateSection(&SectionHandle, @@ -155,7 +155,7 @@ InitializeObjectAttributes(&ObjectAttributes, (lpName ? &UnicodeName : NULL), 0, - hBaseDir, + (lpName ? hBaseDir : NULL), SecurityDescriptor);
Status = NtCreateSection(&SectionHandle, _____
Modified: branches/cache_manager_rewrite/reactos/lib/kernel32/synch/event.c --- branches/cache_manager_rewrite/reactos/lib/kernel32/synch/event.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/lib/kernel32/synch/event.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -77,7 +77,7 @@
InitializeObjectAttributes(&ObjectAttributes, (lpName ? &UnicodeName : NULL), 0, - hBaseDir, + (lpName ? hBaseDir : NULL), NULL);
if (lpEventAttributes != NULL) _____
Modified: branches/cache_manager_rewrite/reactos/lib/kernel32/synch/mutex.c --- branches/cache_manager_rewrite/reactos/lib/kernel32/synch/mutex.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/lib/kernel32/synch/mutex.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -76,7 +76,7 @@
InitializeObjectAttributes(&ObjectAttributes, (lpName ? &UnicodeName : NULL), 0, - hBaseDir, + (lpName ? hBaseDir : NULL), NULL);
if (lpMutexAttributes != NULL) _____
Modified: branches/cache_manager_rewrite/reactos/lib/kernel32/synch/sem.c --- branches/cache_manager_rewrite/reactos/lib/kernel32/synch/sem.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/lib/kernel32/synch/sem.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -77,7 +77,7 @@
InitializeObjectAttributes(&ObjectAttributes, (lpName ? &UnicodeName : NULL), 0, - hBaseDir, + (lpName ? hBaseDir : NULL), NULL);
if (lpSemaphoreAttributes != NULL) _____
Modified: branches/cache_manager_rewrite/reactos/lib/kernel32/synch/timer.c --- branches/cache_manager_rewrite/reactos/lib/kernel32/synch/timer.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/lib/kernel32/synch/timer.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -38,7 +38,7 @@
InitializeObjectAttributes(&ObjectAttributes, (lpTimerName ? &UnicodeName : NULL), 0, - hBaseDir, + (lpTimerName ? hBaseDir : NULL), NULL);
if (lpTimerAttributes != NULL) _____
Modified: branches/cache_manager_rewrite/reactos/lib/msacm/msacm.rc --- branches/cache_manager_rewrite/reactos/lib/msacm/msacm.rc 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/lib/msacm/msacm.rc 2005-06-04 17:35:39 UTC (rev 15773) @@ -30,3 +30,4 @@
#include "msacm_Ja.rc" #include "msacm_Nl.rc" #include "msacm_Pt.rc" +#include "msacm_Sv.rc" _____
Copied: branches/cache_manager_rewrite/reactos/lib/msacm/msacm_Sv.rc (from rev 15421, trunk/reactos/lib/msacm/msacm_Sv.rc) _____
Copied: branches/cache_manager_rewrite/reactos/lib/setupapi/Sv.rc (from rev 15421, trunk/reactos/lib/setupapi/Sv.rc) _____
Modified: branches/cache_manager_rewrite/reactos/lib/setupapi/setupapi.rc --- branches/cache_manager_rewrite/reactos/lib/setupapi/setupapi.rc 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/lib/setupapi/setupapi.rc 2005-06-04 17:35:39 UTC (rev 15773) @@ -35,3 +35,4 @@
#include "Nl.rc" #include "Pt.rc" #include "Ru.rc" +#include "Sv.rc" _____
Copied: branches/cache_manager_rewrite/reactos/lib/shdocvw/Sv.rc (from rev 15421, trunk/reactos/lib/shdocvw/Sv.rc) _____
Modified: branches/cache_manager_rewrite/reactos/lib/shdocvw/shdocvw.rc --- branches/cache_manager_rewrite/reactos/lib/shdocvw/shdocvw.rc 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/lib/shdocvw/shdocvw.rc 2005-06-04 17:35:39 UTC (rev 15773) @@ -29,3 +29,4 @@
#include "Fr.rc" #include "Nl.rc" #include "Pt.rc" +#include "Sv.rc" _____
Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/cm/cm.h --- branches/cache_manager_rewrite/reactos/ntoskrnl/cm/cm.h 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/ntoskrnl/cm/cm.h 2005-06-04 17:35:39 UTC (rev 15773) @@ -744,4 +744,11 @@
CmiSaveTempHive (PREGISTRY_HIVE Hive, HANDLE FileHandle);
+/* TEMPORARY HACK UNTIL PROPER PARSE ROUTINES SOON. DO NOT REMOVE -- Alex */ +NTSTATUS +CmpFindObject(POBJECT_ATTRIBUTES ObjectAttributes, + PVOID* ReturnedObject, + PUNICODE_STRING RemainingPath, + POBJECT_TYPE ObjectType); + #endif /*__INCLUDE_CM_H*/ _____
Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/cm/ntfunc.c --- branches/cache_manager_rewrite/reactos/ntoskrnl/cm/ntfunc.c 2005-06-04 16:09:39 UTC (rev 15772) +++ branches/cache_manager_rewrite/reactos/ntoskrnl/cm/ntfunc.c 2005-06-04 17:35:39 UTC (rev 15773) @@ -30,6 +30,138 @@
/* FUNCTIONS ****************************************************************/
+/* TEMPORARY HACK UNTIL PROPER PARSE ROUTINES SOON. DO NOT REMOVE -- Alex */ +NTSTATUS +CmpFindObject(POBJECT_ATTRIBUTES ObjectAttributes, + PVOID* ReturnedObject, + PUNICODE_STRING RemainingPath, + POBJECT_TYPE ObjectType) +{ + PVOID NextObject; + PVOID CurrentObject; + PVOID RootObject; + POBJECT_HEADER CurrentHeader; + NTSTATUS Status; + PWSTR current; + UNICODE_STRING PathString; + ULONG Attributes; + PUNICODE_STRING ObjectName; + + PAGED_CODE(); + + DPRINT("CmpFindObject(ObjectAttributes %x, ReturnedObject %x, " + "RemainingPath %x)\n",ObjectAttributes,ReturnedObject,RemainingPath); + DPRINT("ObjectAttributes->ObjectName %wZ\n", + ObjectAttributes->ObjectName); + + RtlInitUnicodeString (RemainingPath, NULL); + + if (ObjectAttributes->RootDirectory == NULL) + { + ObReferenceObjectByPointer(NameSpaceRoot, + DIRECTORY_TRAVERSE, + NULL, + UserMode); + CurrentObject = NameSpaceRoot; + } + else + { + Status = ObReferenceObjectByHandle(ObjectAttributes->RootDirectory, + 0, + NULL, + UserMode, + &CurrentObject, + NULL); + if (!NT_SUCCESS(Status)) + { + return Status; + } + } + + ObjectName = ObjectAttributes->ObjectName; + if (ObjectName->Length == 0 || + ObjectName->Buffer[0] == UNICODE_NULL) + { + *ReturnedObject = CurrentObject; + return STATUS_SUCCESS; + } + + if (ObjectAttributes->RootDirectory == NULL && + ObjectName->Buffer[0] != L'\') + { + ObDereferenceObject (CurrentObject); + return STATUS_UNSUCCESSFUL; + } + + /* Create a zero-terminated copy of the object name */ + PathString.Length = ObjectName->Length; + PathString.MaximumLength = ObjectName->Length + sizeof(WCHAR); + PathString.Buffer = ExAllocatePool (NonPagedPool, + PathString.MaximumLength); + if (PathString.Buffer == NULL) + { + ObDereferenceObject (CurrentObject); + return STATUS_INSUFFICIENT_RESOURCES; + } + + RtlCopyMemory (PathString.Buffer, + ObjectName->Buffer, + ObjectName->Length); + PathString.Buffer[PathString.Length / sizeof(WCHAR)] = UNICODE_NULL; + + current = PathString.Buffer; + + RootObject = CurrentObject; + Attributes = ObjectAttributes->Attributes; + if (ObjectType == ObSymbolicLinkType) + Attributes |= OBJ_OPENLINK; + + while (TRUE) + { + DPRINT("current %S\n",current); + CurrentHeader = BODY_TO_HEADER(CurrentObject); + + DPRINT("Current ObjectType %wZ\n", + &CurrentHeader->ObjectType->TypeName); + + if (CurrentHeader->ObjectType->TypeInfo.ParseProcedure == NULL) + { + DPRINT("Current object can't parse\n"); + break; + } + Status = CurrentHeader->ObjectType->TypeInfo.ParseProcedure(CurrentObject, + &NextObject, + &PathString, + ¤t, + Attributes); + if (Status == STATUS_REPARSE) + { + /* reparse the object path */ + NextObject = NameSpaceRoot; + current = PathString.Buffer; + + ObReferenceObjectByPointer(NextObject, + DIRECTORY_TRAVERSE, + NULL, + UserMode); + } + + if (NextObject == NULL) + { + break; + } + ObDereferenceObject(CurrentObject); + CurrentObject = NextObject; + } + + if (current) + RtlpCreateUnicodeString (RemainingPath, current, NonPagedPool); + RtlFreeUnicodeString (&PathString); + *ReturnedObject = CurrentObject; + + return STATUS_SUCCESS; +} + /* * @implemented */ @@ -199,13 +331,13 @@ KeyHandle, ObjectAttributes->RootDirectory);
- Status = ObFindObject(ObjectAttributes, + Status = CmpFindObject(ObjectAttributes, &Object, &RemainingPath, CmiKeyType); if (!NT_SUCCESS(Status)) { - DPRINT("ObFindObject failed, Status: 0x%x\n", Status); + DPRINT("CmpFindObject failed, Status: 0x%x\n", Status); return(Status); }
@@ -379,7 +511,7 @@
PAGED_CODE();
- DPRINT1("NtDeleteKey(KeyHandle %x) called\n", KeyHandle); + DPRINT("NtDeleteKey(KeyHandle %x) called\n", KeyHandle);
PreviousMode = ExGetPreviousMode();
@@ -418,7 +550,7 @@ ExReleaseResourceLite(&CmiRegistryLock); KeLeaveCriticalRegion();
- DPRINT1("PointerCount %lu\n", ObGetObjectPointerCount((PVOID)KeyObject)); + DPRINT("PointerCount %lu\n", ObGetObjectPointerCount((PVOID)KeyObject));
/* Dereference the object */ ObDereferenceObject(KeyObject); @@ -1146,14 +1278,14 @@ return(STATUS_BUFFER_OVERFLOW);*/
RemainingPath.Buffer = NULL; - Status = ObFindObject(ObjectAttributes, + Status = CmpFindObject(ObjectAttributes, &Object, &RemainingPath, CmiKeyType); if (!NT_SUCCESS(Status)) { - DPRINT("ObFindObject() returned 0x%08lx\n", Status); - Status = STATUS_INVALID_HANDLE; /* Because ObFindObject returns STATUS_UNSUCCESSFUL */ + DPRINT("CmpFindObject() returned 0x%08lx\n", Status); + Status = STATUS_INVALID_HANDLE; /* Because CmpFindObject returns STATUS_UNSUCCESSFUL */ hKey = *KeyHandle; /* Preserve hkResult value */ goto openkey_cleanup; } _____
Modified: branches/cache_manager_rewrite/reactos/ntoskrnl/cm/registry.c [truncated at 1000 lines; 6720 more skipped]