mirror of https://github.com/dahall/Vanara.git
Added ability to provide token
parent
a69ebc00ae
commit
ae467f5bac
|
@ -10,13 +10,30 @@ namespace Vanara.PInvoke.Tests
|
|||
SafeCoTaskMemHandle prevState;
|
||||
SafeHTOKEN tok;
|
||||
|
||||
public ElevPriv(string priv, HPROCESS hProc = default, TokenAccess access = TokenAccess.TOKEN_ADJUST_PRIVILEGES | TokenAccess.TOKEN_QUERY)
|
||||
public ElevPriv(string priv, HPROCESS hProc = default, TokenAccess access = TokenAccess.TOKEN_ADJUST_PRIVILEGES | TokenAccess.TOKEN_QUERY) :
|
||||
this(new[] { priv }, hProc, access)
|
||||
{ }
|
||||
|
||||
public ElevPriv(string[] privs, HPROCESS hProc = default, TokenAccess access = TokenAccess.TOKEN_ADJUST_PRIVILEGES | TokenAccess.TOKEN_QUERY)
|
||||
{
|
||||
if (hProc.IsNull) hProc = GetCurrentProcess();
|
||||
tok = SafeHTOKEN.FromProcess(hProc, access);
|
||||
var newPriv = new PTOKEN_PRIVILEGES(LUID.FromName(priv), PrivilegeAttributes.SE_PRIVILEGE_ENABLED);
|
||||
ElevatePrivileges(privs);
|
||||
}
|
||||
|
||||
public ElevPriv(string priv, HTOKEN hToken) : this(new[] { priv }, hToken) { }
|
||||
|
||||
public ElevPriv(string[] privs, HTOKEN hToken)
|
||||
{
|
||||
tok = new SafeHTOKEN((IntPtr)hToken, false);
|
||||
ElevatePrivileges(privs);
|
||||
}
|
||||
|
||||
private void ElevatePrivileges(string[] privs)
|
||||
{
|
||||
var newPriv = new PTOKEN_PRIVILEGES(Array.ConvertAll(privs, s => new LUID_AND_ATTRIBUTES(LUID.FromName(s), PrivilegeAttributes.SE_PRIVILEGE_ENABLED)));
|
||||
prevState = PTOKEN_PRIVILEGES.GetAllocatedAndEmptyInstance();
|
||||
if (!AdjustTokenPrivileges(tok, false, newPriv, (uint)prevState.Size, prevState, out var retLen))
|
||||
if (!AdjustTokenPrivileges(tok, false, newPriv, prevState.Size, prevState, out var retLen))
|
||||
Win32Error.ThrowLastError();
|
||||
prevState.Size = (int)retLen;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue