Add a few DPRINTs.
Fix a bug where last status was overrided in case of failure.
Still commented out...

svn path=/trunk/; revision=58946
This commit is contained in:
Pierre Schweitzer 2013-05-05 17:32:00 +00:00
parent 3c4b46ea62
commit f96e0193f4

View file

@ -113,13 +113,15 @@ RtlAcquirePrivilege(IN PULONG Privilege,
OUT PVOID *ReturnedState) OUT PVOID *ReturnedState)
{ {
#if 0 #if 0
NTSTATUS Status;
PRTL_ACQUIRE_STATE State; PRTL_ACQUIRE_STATE State;
NTSTATUS Status, IntStatus;
ULONG ReturnLength, i, OldSize; ULONG ReturnLength, i, OldSize;
SECURITY_QUALITY_OF_SERVICE Sqos; SECURITY_QUALITY_OF_SERVICE Sqos;
OBJECT_ATTRIBUTES ObjectAttributes; OBJECT_ATTRIBUTES ObjectAttributes;
HANDLE ImpersonationToken = 0, ProcessToken; HANDLE ImpersonationToken = 0, ProcessToken;
DPRINT("RtlAcquirePrivilege(%p, %u, %u, %p)\n", Privilege, NumPriv, Flags, ReturnedState);
/* Validate flags */ /* Validate flags */
if (Flags & ~(RTL_ACQUIRE_PRIVILEGE_PROCESS | RTL_ACQUIRE_PRIVILEGE_IMPERSONATE)) if (Flags & ~(RTL_ACQUIRE_PRIVILEGE_PROCESS | RTL_ACQUIRE_PRIVILEGE_IMPERSONATE))
{ {
@ -283,6 +285,7 @@ RtlAcquirePrivilege(IN PULONG Privilege,
State->OldPrivileges = RtlAllocateHeap(RtlGetProcessHeap(), 0, ReturnLength); State->OldPrivileges = RtlAllocateHeap(RtlGetProcessHeap(), 0, ReturnLength);
if (State->OldPrivileges) if (State->OldPrivileges)
{ {
DPRINT("Allocated old privileges: %p\n", State->OldPrivileges);
OldSize = ReturnLength; OldSize = ReturnLength;
continue; continue;
} }
@ -314,6 +317,8 @@ RtlAcquirePrivilege(IN PULONG Privilege,
} }
} while (FALSE); } while (FALSE);
DPRINT("RtlAcquirePrivilege succeed!\n");
return Status; return Status;
Cleanup: Cleanup:
@ -326,12 +331,12 @@ Cleanup:
/* Do we have to restore previously active impersonation? */ /* Do we have to restore previously active impersonation? */
if (State->Flags & RTL_ACQUIRE_PRIVILEGE_IMPERSONATE) if (State->Flags & RTL_ACQUIRE_PRIVILEGE_IMPERSONATE)
{ {
Status = ZwSetInformationThread(NtCurrentThread(), ThreadImpersonationToken, IntStatus = ZwSetInformationThread(NtCurrentThread(), ThreadImpersonationToken,
&State->OldImpersonationToken, sizeof(HANDLE)); &State->OldImpersonationToken, sizeof(HANDLE));
/* If this ever happens, we're in a really bad situation... */ /* If this ever happens, we're in a really bad situation... */
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(IntStatus))
{ {
RtlRaiseStatus(Status); RtlRaiseStatus(IntStatus);
} }
} }
@ -344,6 +349,8 @@ Cleanup:
/* And free our state buffer */ /* And free our state buffer */
RtlFreeHeap(RtlGetProcessHeap(), 0, State); RtlFreeHeap(RtlGetProcessHeap(), 0, State);
DPRINT("RtlAcquirePrivilege() failed with status: %lx\n", Status);
return Status; return Status;
#else #else
UNIMPLEMENTED; UNIMPLEMENTED;
@ -362,6 +369,8 @@ RtlReleasePrivilege(IN PVOID ReturnedState)
NTSTATUS Status; NTSTATUS Status;
PRTL_ACQUIRE_STATE State = (PRTL_ACQUIRE_STATE)ReturnedState; PRTL_ACQUIRE_STATE State = (PRTL_ACQUIRE_STATE)ReturnedState;
DPRINT("RtlReleasePrivilege(%p)\n", ReturnedState);
/* If we had an active impersonation before we acquired privileges */ /* If we had an active impersonation before we acquired privileges */
if (State->Flags & RTL_ACQUIRE_PRIVILEGE_IMPERSONATE) if (State->Flags & RTL_ACQUIRE_PRIVILEGE_IMPERSONATE)
{ {
@ -388,6 +397,7 @@ RtlReleasePrivilege(IN PVOID ReturnedState)
/* If we used a different buffer for old privileges, just free it */ /* If we used a different buffer for old privileges, just free it */
if ((PVOID)State->OldPrivBuffer != (PVOID)State->OldPrivileges) if ((PVOID)State->OldPrivBuffer != (PVOID)State->OldPrivileges)
{ {
DPRINT("Releasing old privileges: %p\n", State->OldPrivileges);
RtlFreeHeap(RtlGetProcessHeap(), 0, State->OldPrivileges); RtlFreeHeap(RtlGetProcessHeap(), 0, State->OldPrivileges);
} }