/* Validate the number */
if ((BasePriority > HIGH_PRIORITY) || (BasePriority <= LOW_PRIORITY))
{
+ ObDereferenceObject(Process);
return STATUS_INVALID_PARAMETER;
}
case ProcessQuotaLimits:
- return PspSetQuotaLimits(ProcessHandle,
+ Status = PspSetQuotaLimits(Process,
1,
ProcessInformation,
ProcessInformationLength,
PreviousMode);
+ break;
case ProcessWorkingSetWatch:
DPRINT1("WS watch not implemented\n");
NTSTATUS
NTAPI
PspSetQuotaLimits(
- _In_ HANDLE ProcessHandle,
+ _In_ PEPROCESS Process,
_In_ ULONG Unused,
_In_ PVOID QuotaLimits,
_In_ ULONG QuotaLimitsLength,
_In_ KPROCESSOR_MODE PreviousMode)
{
QUOTA_LIMITS_EX CapturedQuotaLimits;
- PEPROCESS Process;
PEPROCESS_QUOTA_BLOCK QuotaBlock, OldQuotaBlock;
BOOLEAN IncreaseOkay;
KAPC_STATE SavedApcState;
}
_SEH2_END;
- /* Reference the process */
- Status = ObReferenceObjectByHandle(ProcessHandle,
- PROCESS_SET_QUOTA,
- PsProcessType,
- PreviousMode,
- (PVOID*)&Process,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("Failed to reference process handle: 0x%lx\n", Status);
- return Status;
- }
-
/* Check the caller changes the working set size limits */
if ((CapturedQuotaLimits.MinimumWorkingSetSize != 0) &&
(CapturedQuotaLimits.MaximumWorkingSetSize != 0))
/* Check if the caller has the required privilege */
if (!SeSinglePrivilegeCheck(SeIncreaseQuotaPrivilege, PreviousMode))
{
- ObDereferenceObject(Process);
return STATUS_PRIVILEGE_NOT_HELD;
}
Status = STATUS_SUCCESS;
}
- /* Dereference the process and return the status */
- ObDereferenceObject(Process);
return Status;
}