}
ObDeleteHandleTable(Process);
- if(Process->UniqueProcessId != NULL)
- {
- PsDeleteCidHandle(Process->UniqueProcessId, PsProcessType);
- }
-
if (Process != CurrentProcess)
{
KeDetachProcess();
&hToken);
ObDereferenceObject(Token);
- _SEH_TRY
- {
- *TokenHandle = hToken;
- }
- _SEH_HANDLE
+ if (NT_SUCCESS(Status))
{
- Status = _SEH_GetExceptionCode();
+
+ _SEH_TRY
+ {
+ *TokenHandle = hToken;
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END;
+ if (!NT_SUCCESS(Status))
+ {
+ NtClose(hToken);
+ }
}
- _SEH_END;
}
return Status;
KeDetachProcess();
}
+ if(Process->UniqueProcessId != NULL)
+ {
+ PsDeleteCidHandle(Process->UniqueProcessId, PsProcessType);
+ }
+
MmReleaseMmInfo(Process);
if (Context->IsWorkerQueue)
{
DPRINT("NtOpenProcess() = STATUS_UNSUCCESSFUL\n");
return(STATUS_UNSUCCESSFUL);
}
- return(STATUS_UNSUCCESSFUL);
}