[NTOSKRNL]: Implement ThreadBreakOnTermination for the SET case.

Cleanup some dbgprints.

svn path=/trunk/; revision=55693
This commit is contained in:
Alex Ionescu 2012-02-19 02:24:52 +00:00
parent 37d7c2aa03
commit d68458a259
5 changed files with 80 additions and 23 deletions

View file

@ -190,7 +190,6 @@ HalpAcpiGetTableFromBios(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
}
/* Validate the signature */
DPRINT1("ACPI DSDT at 0x%p\n", Header);
if (Header->Signature != DSDT_SIGNATURE)
{
/* Fail and unmap */
@ -231,7 +230,6 @@ HalpAcpiGetTableFromBios(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
if (!Xsdt) return NULL;
/* Won't be using the RSDT */
DPRINT1("ACPI XSDT at 0x%p\n", Xsdt);
Rsdt = NULL;
}
@ -333,12 +331,6 @@ HalpAcpiGetTableFromBios(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
MmUnmapIoSpace(Header, 2 * PAGE_SIZE);
}
DPRINT1("Failed to find ACPI table %c%c%c%c\n",
(Signature & 0xFF),
(Signature & 0xFF00) >> 8,
(Signature & 0xFF0000) >> 16,
(Signature & 0xFF000000) >> 24);
/* Didn't find anything */
return NULL;
}
@ -532,8 +524,7 @@ HalpInitBootTable(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
/* Get the boot table */
BootTable = HalAcpiGetTable(LoaderBlock, BOOT_SIGNATURE);
HalpSimpleBootFlagTable = BootTable;
DPRINT1("ACPI BOOT at 0x%p\n", HalpSimpleBootFlagTable);
/* Validate it */
if ((BootTable) &&
(BootTable->Header.Length >= sizeof(BOOT_TABLE)) &&
@ -693,7 +684,6 @@ HalpAcpiTableCacheInit(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
}
/* Validate it */
DPRINT1("ACPI RSDT at 0x%p\n", Rsdt);
if ((Rsdt->Header.Signature != RSDT_SIGNATURE) &&
(Rsdt->Header.Signature != XSDT_SIGNATURE))
{
@ -772,8 +762,6 @@ HalpAcpiTableCacheInit(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
}
}
DPRINT1("ACPI %d.0 detected\n", (Rsdt->Header.Revision + 1));
/* Done */
return Status;
}
@ -786,15 +774,15 @@ HaliAcpiTimerInit(IN ULONG TimerPort,
PAGED_CODE();
/* Is this in the init phase? */
if (!TimerPort )
if (!TimerPort)
{
/* Get the data from the FADT */
TimerPort = HalpFixedAcpiDescTable.pm_tmr_blk_io_port;
TimerValExt = HalpFixedAcpiDescTable.flags & ACPI_TMR_VAL_EXT;
DPRINT1("ACPI Timer at: %Xh (EXT: %d)\n", TimerPort, TimerValExt);
}
/* FIXME: Now proceed to the timer initialization */
DPRINT1("ACPI Timer at: %Xh (EXT: %d)\n", TimerPort, TimerValExt);
//HalaAcpiTimerInit(TimerPort, TimerValExt);
}
@ -808,7 +796,6 @@ HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
PHYSICAL_ADDRESS PhysicalAddress;
/* Only do this once */
DPRINT("You are booting the ACPI HAL!\n");
if (HalpProcessedACPIPhase0) return STATUS_SUCCESS;
/* Setup the ACPI table cache */
@ -825,7 +812,6 @@ HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
}
/* Assume typical size, otherwise whatever the descriptor table says */
DPRINT1("ACPI FACP at 0x%p\n", Fadt);
TableLength = sizeof(FADT);
if (Fadt->Header.Length < sizeof(FADT)) TableLength = Fadt->Header.Length;
@ -837,14 +823,12 @@ HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
/* Get the debug table for KD */
HalpDebugPortTable = HalAcpiGetTable(LoaderBlock, DBGP_SIGNATURE);
DPRINT1("ACPI DBGP at 0x%p\n", HalpDebugPortTable);
/* Initialize NUMA through the SRAT */
HalpNumaInitializeStaticConfiguration(LoaderBlock);
/* Initialize hotplug through the SRAT */
HalpDynamicSystemResourceConfiguration(LoaderBlock);
DPRINT1("ACPI SRAT at 0x%p\n", HalpAcpiSrat);
if (HalpAcpiSrat)
{
DPRINT1("Your machine has a SRAT, but NUMA/HotPlug are not supported!\n");
@ -886,6 +870,38 @@ HalpSetupAcpiPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
/* Setup the boot table */
HalpInitBootTable(LoaderBlock);
/* Debugging code */
{
PLIST_ENTRY ListHead, NextEntry;
PACPI_CACHED_TABLE CachedTable;
/* Loop cached tables */
ListHead = &HalpAcpiTableCacheList;
NextEntry = ListHead->Flink;
while (NextEntry != ListHead)
{
/* Get the table */
CachedTable = CONTAINING_RECORD(NextEntry, ACPI_CACHED_TABLE, Links);
/* Compare signatures */
if ((CachedTable->Header.Signature == RSDT_SIGNATURE) ||
(CachedTable->Header.Signature == XSDT_SIGNATURE))
{
DPRINT1("ACPI %d.0 Detected. Tables: ", (CachedTable->Header.Revision + 1));
}
DbgPrint("[%c%c%c%c] ",
(CachedTable->Header.Signature & 0xFF),
(CachedTable->Header.Signature & 0xFF00) >> 8,
(CachedTable->Header.Signature & 0xFF0000) >> 16,
(CachedTable->Header.Signature & 0xFF000000) >> 24);
/* Keep going */
NextEntry = NextEntry->Flink;
}
DbgPrint("\n");
}
/* Return success */
return STATUS_SUCCESS;
}

View file

@ -2467,7 +2467,7 @@ IopActionConfigureChildServices(PDEVICE_NODE DeviceNode,
if (NT_SUCCESS(IopQueryDeviceCapabilities(DeviceNode, &DeviceCaps)) &&
DeviceCaps.RawDeviceOK)
{
DPRINT1("%wZ is using parent bus driver (%wZ)\n", &DeviceNode->InstancePath, &ParentDeviceNode->ServiceName);
DPRINT("%wZ is using parent bus driver (%wZ)\n", &DeviceNode->InstancePath, &ParentDeviceNode->ServiceName);
DeviceNode->ServiceName.Length = 0;
DeviceNode->ServiceName.MaximumLength = 0;

View file

@ -1551,7 +1551,6 @@ MmSessionCreate(OUT PULONG SessionId)
/* Set and assert the flags, and return */
PspSetProcessFlag(Process, PSF_PROCESS_IN_SESSION_BIT);
ASSERT(MiSessionLeaderExists == 1);
if (NT_SUCCESS(Status)) DPRINT1("New session created: %lx\n", *SessionId);
return Status;
}

View file

@ -1727,6 +1727,7 @@ NtSetInformationThread(IN HANDLE ThreadHandle,
PEPROCESS Process;
ULONG_PTR DisableBoost = 0;
ULONG_PTR IdealProcessor = 0;
ULONG_PTR Break = 0;
PTEB Teb;
ULONG_PTR TlsIndex = 0;
PVOID *ExpansionSlots;
@ -2121,10 +2122,51 @@ NtSetInformationThread(IN HANDLE ThreadHandle,
/* All done */
break;
case ThreadBreakOnTermination:
/* Check buffer length */
if (ThreadInformationLength != sizeof(ULONG))
{
Status = STATUS_INFO_LENGTH_MISMATCH;
break;
}
/* Enter SEH for direct buffer read */
_SEH2_TRY
{
Break = *(PULONG)ThreadInformation;
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
/* Get exception code */
Break = 0;
Status = _SEH2_GetExceptionCode();
_SEH2_YIELD(break);
}
_SEH2_END;
/* Setting 'break on termination' requires the SeDebugPrivilege */
if (!SeSinglePrivilegeCheck(SeDebugPrivilege, PreviousMode))
{
Status = STATUS_PRIVILEGE_NOT_HELD;
break;
}
/* Set or clear the flag */
if (Break)
{
PspSetCrossThreadFlag(Thread, CT_BREAK_ON_TERMINATION_BIT);
}
else
{
PspClearCrossThreadFlag(Thread, CT_BREAK_ON_TERMINATION_BIT);
}
break;
default:
/* We don't implement it yet */
DPRINT1("Not implemented: %lx\n", ThreadInformationClass);
DPRINT1("Not implemented: %d\n", ThreadInformationClass);
Status = STATUS_NOT_IMPLEMENTED;
}

View file

@ -148,7 +148,7 @@ IntHideMousePointer(
if (!pgp->psurfSave)
{
DPRINT1("No SaveSurface!\n");
DPRINT("No SaveSurface!\n");
return;
}