don't leak a reference to the timer object when copying to the buffer failed in NtQueryTimer() and don't use uninitialized variable in NtSetTimer()

svn path=/trunk/; revision=13556
This commit is contained in:
Thomas Bluemel 2005-02-14 11:46:17 +00:00
parent be2fa40d3e
commit 31a913fde7

View file

@ -483,6 +483,8 @@ NtQueryTimer(IN HANDLE TimerHandle,
/* Check for Success */ /* Check for Success */
if(NT_SUCCESS(Status)) { if(NT_SUCCESS(Status)) {
switch(TimerInformationClass) {
case TimerBasicInformation: {
/* Return the Basic Information */ /* Return the Basic Information */
_SEH_TRY { _SEH_TRY {
@ -490,7 +492,6 @@ NtQueryTimer(IN HANDLE TimerHandle,
DPRINT("Returning Information for Timer: %x. Time Remaining: %d\n", Timer, Timer->KeTimer.DueTime.QuadPart); DPRINT("Returning Information for Timer: %x. Time Remaining: %d\n", Timer, Timer->KeTimer.DueTime.QuadPart);
BasicInfo->TimeRemaining.QuadPart = Timer->KeTimer.DueTime.QuadPart; BasicInfo->TimeRemaining.QuadPart = Timer->KeTimer.DueTime.QuadPart;
BasicInfo->SignalState = KeReadStateTimer(&Timer->KeTimer); BasicInfo->SignalState = KeReadStateTimer(&Timer->KeTimer);
ObDereferenceObject(Timer);
if(ReturnLength != NULL) { if(ReturnLength != NULL) {
*ReturnLength = sizeof(TIMER_BASIC_INFORMATION); *ReturnLength = sizeof(TIMER_BASIC_INFORMATION);
@ -500,6 +501,10 @@ NtQueryTimer(IN HANDLE TimerHandle,
Status = _SEH_GetExceptionCode(); Status = _SEH_GetExceptionCode();
} _SEH_END; } _SEH_END;
} }
}
ObDereferenceObject(Timer);
}
/* Return Status */ /* Return Status */
return Status; return Status;
@ -517,7 +522,7 @@ NtSetTimer(IN HANDLE TimerHandle,
{ {
PETIMER Timer; PETIMER Timer;
KIRQL OldIrql; KIRQL OldIrql;
BOOLEAN KillTimer; BOOLEAN KillTimer = FALSE;
BOOLEAN State; BOOLEAN State;
KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
PETHREAD CurrentThread = PsGetCurrentThread(); PETHREAD CurrentThread = PsGetCurrentThread();