- Implement ThreadPriorityBoost case in NtQueryInformationThread

- Add ThreadDescriptorTableEntry case
- Add check of parametres
Approved by Aleksey.

svn path=/trunk/; revision=40525
This commit is contained in:
Dmitry Chapyshev 2009-04-15 11:57:48 +00:00
parent 27c2bd90eb
commit f9e8538d24

View file

@ -1306,17 +1306,27 @@ NtQueryInformationThread(IN HANDLE ThreadHandle,
KIRQL OldIrql; KIRQL OldIrql;
PAGED_CODE(); PAGED_CODE();
/* Verify Information Class validity */ if (PreviousMode != KernelMode)
#if 0 {
Status = DefaultQueryInfoBufferCheck(ThreadInformationClass, _SEH2_TRY
PsThreadInfoClass, {
RTL_NUMBER_OF(PsThreadInfoClass), ProbeForWrite(ThreadInformation,
ThreadInformation,
ThreadInformationLength, ThreadInformationLength,
ReturnLength, sizeof(ULONG));
PreviousMode);
if (ReturnLength)
{
ProbeForWriteUlong(ReturnLength);
}
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
Status = _SEH2_GetExceptionCode();
}
_SEH2_END;
if (!NT_SUCCESS(Status)) return Status; if (!NT_SUCCESS(Status)) return Status;
#endif }
/* Check what class this is */ /* Check what class this is */
Access = THREAD_QUERY_INFORMATION; Access = THREAD_QUERY_INFORMATION;
@ -1499,6 +1509,33 @@ NtQueryInformationThread(IN HANDLE ThreadHandle,
KeLowerIrql(OldIrql); KeLowerIrql(OldIrql);
break; break;
case ThreadDescriptorTableEntry:
DPRINT1("NtQueryInformationThread(): case ThreadDescriptorTableEntry not implemented!\n");
Status = STATUS_NOT_IMPLEMENTED;
break;
case ThreadPriorityBoost:
/* Set the return length*/
Length = sizeof(ULONG);
if (ThreadInformationLength != Length)
{
Status = STATUS_INFO_LENGTH_MISMATCH;
break;
}
_SEH2_TRY
{
*(PULONG)ThreadInformation = Thread->Tcb.DisableBoost ? 1 : 0;
}
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
Status = _SEH2_GetExceptionCode();
}
_SEH2_END;
break;
/* Anything else */ /* Anything else */
default: default: