[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 2/4] Add option to elevate administrator users
If the user has Administrator access, add a prompt and ability to elevate the access to the Administrator privilege level instead of retaining the user privilege level. Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/tty/tty.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/src/tty/tty.c b/src/tty/tty.c index 035f18c..e295f06 100644 --- a/src/tty/tty.c +++ b/src/tty/tty.c @@ -52,6 +52,7 @@ typedef struct _TTY_CONTEXT { TTY_STREAM Device; TCHAR UserName[MAXIMUM_BUFFER_SIZE]; HANDLE Token; + HANDLE OriginalToken; PROCESS_INFORMATION ProcessInfo; } TTY_CONTEXT, *PTTY_CONTEXT; @@ -349,6 +350,69 @@ GetCredentials( return TRUE; } +static BOOL +RequestElevation( + VOID + ) +{ + PTTY_CONTEXT Context = &TtyContext; + TOKEN_ELEVATION_TYPE Elevation; + DWORD Size; + TCHAR Buffer[MAXIMUM_BUFFER_SIZE]; + PTCHAR End; + TOKEN_LINKED_TOKEN LinkedToken; + BOOL Success; + + Success = GetTokenInformation(Context->Token, + TokenElevationType, + &Elevation, + sizeof(Elevation), + &Size); + if (!Success) + return TRUE; + + if (Elevation != TokenElevationTypeLimited) + return TRUE; + + ECHO(&Context->Device, "\r\n"); + ECHO(&Context->Device, " run as Administrator [yes|no]: "); + + ZeroMemory(Buffer, sizeof (Buffer)); + + Success = GetLine(&Context->Device, + Buffer, + sizeof (Buffer), + &Size, + FALSE); + if (!Success) + return FALSE; + + End = _tcschr(Buffer, TEXT('\r')); + if (End == NULL) + return FALSE; + + *End = TEXT('\0'); + + if (_tcslen(Buffer) == 0) + return FALSE; + + if (_tcscmp(Buffer, TEXT("yes")) != 0) + return TRUE; + + Success = GetTokenInformation(Context->Token, + TokenLinkedToken, + &LinkedToken, + sizeof(LinkedToken), + &Size); + if (!Success) + return FALSE; + + Context->OriginalToken = Context->Token; + Context->Token = LinkedToken.LinkedToken; + + return TRUE; +} + static DWORD WINAPI TtyIn( IN LPVOID Argument @@ -498,6 +562,10 @@ _tmain( ZeroMemory(Password, sizeof(Password)); + if (!Success) + ExitProcess(1); + + Success = RequestElevation(); if (!Success) ExitProcess(1); -- 2.16.2.windows.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |