//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// private static IntPtr OpenThreadTokenChecked() { IntPtr hToken = new IntPtr(); Console.WriteLine("[*] Opening Thread Token"); if (!Unmanaged.OpenThreadToken(Unmanaged.GetCurrentThread(), (Constants.TOKEN_QUERY | Constants.TOKEN_ADJUST_PRIVILEGES), false, ref hToken)) { Console.WriteLine(" [-] OpenTheadToken Failed"); Console.WriteLine(" [*] Impersonating Self"); if (!Unmanaged.ImpersonateSelf(Enums.SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation)) { GetError("ImpersonateSelf"); return(IntPtr.Zero); } Console.WriteLine(" [+] Impersonated Self"); Console.WriteLine(" [*] Retrying"); if (!Unmanaged.OpenThreadToken(Unmanaged.GetCurrentThread(), (Constants.TOKEN_QUERY | Constants.TOKEN_ADJUST_PRIVILEGES), false, ref hToken)) { GetError("OpenThreadToken"); return(IntPtr.Zero); } } Console.WriteLine(" [+] Recieved Thread Token Handle: " + hToken.ToInt32()); return(hToken); }