mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 15:23:03 +00:00
[WIN32K:NTUSER] Add an extra optional "Process" parameter to the GetProcessLuid() function to be used alternatively in place of "Thread" to retrieve the LUID.
This commit is contained in:
parent
d77c493213
commit
2345d63ce3
3 changed files with 30 additions and 15 deletions
|
@ -766,30 +766,44 @@ GetW32ThreadInfo(VOID)
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
GetProcessLuid(
|
GetProcessLuid(
|
||||||
IN PETHREAD Thread OPTIONAL,
|
IN PETHREAD Thread OPTIONAL,
|
||||||
|
IN PEPROCESS Process OPTIONAL,
|
||||||
OUT PLUID Luid)
|
OUT PLUID Luid)
|
||||||
{
|
{
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
PACCESS_TOKEN Token;
|
PACCESS_TOKEN Token = NULL;
|
||||||
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
|
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
|
||||||
BOOLEAN CopyOnOpen, EffectiveOnly;
|
BOOLEAN CopyOnOpen, EffectiveOnly;
|
||||||
|
|
||||||
if (Thread == NULL)
|
if (Thread && Process)
|
||||||
|
return STATUS_INVALID_PARAMETER;
|
||||||
|
|
||||||
|
/* If nothing has been specified, use the current thread */
|
||||||
|
if (!Thread && !Process)
|
||||||
Thread = PsGetCurrentThread();
|
Thread = PsGetCurrentThread();
|
||||||
|
|
||||||
/* Use a thread token */
|
if (Thread)
|
||||||
Token = PsReferenceImpersonationToken(Thread,
|
|
||||||
&CopyOnOpen,
|
|
||||||
&EffectiveOnly,
|
|
||||||
&ImpersonationLevel);
|
|
||||||
if (Token == NULL)
|
|
||||||
{
|
{
|
||||||
/* We don't have a thread token, use a process token */
|
/* Use a thread token */
|
||||||
Token = PsReferencePrimaryToken(PsGetThreadProcess(Thread));
|
ASSERT(!Process);
|
||||||
|
Token = PsReferenceImpersonationToken(Thread,
|
||||||
|
&CopyOnOpen,
|
||||||
|
&EffectiveOnly,
|
||||||
|
&ImpersonationLevel);
|
||||||
|
|
||||||
/* If no token, fail */
|
/* If we don't have a thread token, use a process token */
|
||||||
if (Token == NULL)
|
if (!Token)
|
||||||
|
Process = PsGetThreadProcess(Thread);
|
||||||
|
}
|
||||||
|
if (!Token && Process)
|
||||||
|
{
|
||||||
|
/* Use a process token */
|
||||||
|
Token = PsReferencePrimaryToken(Process);
|
||||||
|
|
||||||
|
/* If we don't have a token, fail */
|
||||||
|
if (!Token)
|
||||||
return STATUS_NO_TOKEN;
|
return STATUS_NO_TOKEN;
|
||||||
}
|
}
|
||||||
|
ASSERT(Token);
|
||||||
|
|
||||||
/* Query the LUID */
|
/* Query the LUID */
|
||||||
Status = SeQueryAuthenticationIdToken(Token, Luid);
|
Status = SeQueryAuthenticationIdToken(Token, Luid);
|
||||||
|
|
|
@ -181,7 +181,7 @@ UserInitiateShutdown(IN PETHREAD Thread,
|
||||||
TRACE("UserInitiateShutdown\n");
|
TRACE("UserInitiateShutdown\n");
|
||||||
|
|
||||||
/* Get the caller's LUID */
|
/* Get the caller's LUID */
|
||||||
Status = GetProcessLuid(Thread, &CallerLuid);
|
Status = GetProcessLuid(Thread, NULL, &CallerLuid);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
ERR("UserInitiateShutdown: GetProcessLuid failed\n");
|
ERR("UserInitiateShutdown: GetProcessLuid failed\n");
|
||||||
|
@ -302,10 +302,10 @@ UserEndShutdown(IN PETHREAD Thread,
|
||||||
*/
|
*/
|
||||||
//STUB;
|
//STUB;
|
||||||
|
|
||||||
Status = GetProcessLuid(Thread, &CallerLuid);
|
Status = GetProcessLuid(Thread, NULL, &CallerLuid);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
ERR("GetProcessLuid failed\n");
|
ERR("UserEndShutdown: GetProcessLuid failed\n");
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -108,6 +108,7 @@ HBRUSH FASTCALL GetControlColor(PWND,PWND,HDC,UINT);
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
GetProcessLuid(
|
GetProcessLuid(
|
||||||
IN PETHREAD Thread OPTIONAL,
|
IN PETHREAD Thread OPTIONAL,
|
||||||
|
IN PEPROCESS Process OPTIONAL,
|
||||||
OUT PLUID Luid);
|
OUT PLUID Luid);
|
||||||
|
|
||||||
/*************** MESSAGE.C ***************/
|
/*************** MESSAGE.C ***************/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue