delphi 提升openprocess权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 提升openprocess权限相关的知识,希望对你有一定的参考价值。

关于Delphi7 openProcess权限不够,,怎么提升权限.

参考技术A 众所周知,当我们要结束一个进程时,可以调用WINDOWS API函数TerminateProcess函数。但是,
有很多进程依然还是无法结束的,这是因为进程权限不够,这时我们可以给进程提升权限再K掉K不掉的进程。
一般进程获取了SeDebugPrivilege权限后都可以杀掉大部分进程了。
//提升进程令牌函数
function AdjustProcessPrivilege(ProcessHandle:THandle;Token_Name:Pchar):boolean;
var
Token:Cardinal;
TokenPri:_TOKEN_PRIVILEGES;
ProcessDest:int64;
l:DWORD;
begin
Result:=False;
if OpenProcessToken(ProcessHandle,TOKEN_Adjust_Privileges,Token) then
begin
if LookupPrivilegeValue(nil,Token_Name,ProcessDest) then
begin
TokenPri.PrivilegeCount:=1;
TokenPri.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
TokenPri.Privileges[0].Luid:=ProcessDest;
l:=0;
//更新进程令牌,成功返回TRUE
if AdjustTokenPrivileges(Token,False,TokenPri,sizeof(TokenPri),nil,l) then
Result:=True;
end;
end;
end;
然后我们就可以调用该函数了:
procedure TFmMain.TBitBtn1Click(Sender: TObject);
var
ok: Bool;
ProcessListHandle: THandle;
ProcessStruct: TProcessEntry32;
ProcessID:THandle;
ProcessHandle:HWND;
Token:Cardinal;
TokenPri:_TOKEN_PRIVILEGES;
ProcessDest,a:int64;
dummy:DWORD;
begin
Memo1.Clear;
ProcessListHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
ProcessStruct.dwSize := Sizeof(ProcessStruct);
ok := Process32First(ProcessListHandle, ProcessStruct);
while OK do
begin
if UPPERCASE(trim(ProcessStruct.szExeFile))='TASKMGR.EXE' then
begin
Memo1.Lines.Add('已发现进程');
ProcessID:=ProcessStruct.th32ProcessID;
break;
end;
ok := Process32Next(ProcessListHandle, ProcessStruct);
end;
CloseHandle(ProcessListHandle);
if AdjustProcessPrivilege(GetCurrentProcess,'SeDebugPrivilege') then  //提升权限
Memo1.Lines.Add('提升权限成功')
else
Memo1.Lines.Add('提升权限失败');
ProcessHandle:=OpenProcess(PROCESS_ALL_ACCESS ,False,ProcessID); //杀进程
if TerminateProcess(ProcessHandle,1) then
begin
Memo1.lines.add('杀进程成功');
Timer1.Enabled:=False;
end
else
Memo1.lines.add('杀进程失败');
end;本回答被提问者采纳

Delphi 以不同的用户身份运行

【中文标题】Delphi 以不同的用户身份运行【英文标题】:Delphi run as different user 【发布时间】:2014-01-24 10:19:30 【问题描述】:

我想要在 Delphi 中以不同的用户身份运行 exe 文件以获得不同的权限。我不想提升权限。 截图:

我想从 delphi 代码中以不同的用户身份启动应用程序,如图所示。

【问题讨论】:

请检查您的链接。它模棱两可。 @SpyrosKaravanis 如果非管理员运行需要提升的应用程序,则会显示肩上 UAC 对话框 【参考方案1】:

您要查找的 API 函数是 CredUIPromptForCredentials。这将返回一个用户名和密码,您可以将其传递给CreateProcessWithLogonW

【讨论】:

谢谢,正是我需要的! @David 我已经在 c# 中使用 pInvoke 尝试过此操作,但与使用管理员凭据从非管理员“以不同用户身份运行”的 shell 运行时所做的不同。管理员的工作是在后台登录,或者如果从 shell 运行其他一些程序(无论哪个)作为不同的用户命令运行,但如果不是,我通过 CreateProcessWithLogonW 调用的进程在从 ReadOnly 文件夹运行时没有足够的权限。 .. 你有什么提示或想法还有什么可以/应该做的吗?似乎以这种方式完成了一些不同的事情......:/

以上是关于delphi 提升openprocess权限的主要内容,如果未能解决你的问题,请参考以下文章

openprocess提升为测试权限

delphi,有啥API或者函数能够提升权限至ring0或者system之类的

AdjustTokenPrivileges启用权限

程序的开机关机重启,开机启动,休眠功能delphi实现(使用AdjustTokenPrivileges提升权限)

Delphi编写的程序在Win7以上提升权限(以管理员身份运行)

Delphi编写的程序在Win7以上提升权限(以管理员身份运行)