如何使自己的程序在winxp下拥有管理员权限?

lk2000 2003-08-01 09:13:32
我的程序在xp如果用户用标准身份登陆就无法用tool32help.dll里的函数
管理员身份是可以的
如何提升程序权限?
...全文
82 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongliqiu 2003-08-01
  • 打赏
  • 举报
回复
这是在CB中测试强行关机、重启程序,其中用到了提升特权的方法(API函数),不想用Delphi重写了,将就着看看吧。

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
switch (RadioGroup1->ItemIndex)
{
case 0 :
ExitWindowsEx(EWX_LOGOFF, 0);break;
case 1 :
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
{
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//获取特权
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
ExitWindowsEx(EWX_SHUTDOWN|EWX_POWEROFF, 0);
}
break;
case 2 :
if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken))
{
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//获取特权
AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
ExitWindowsEx(EWX_REBOOT, 0);
}

}



}
//---------------------------------------------------------------------------
void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
switch (RadioGroup1->ItemIndex)
{
case 0 :
Label2->Caption="结束回话,在完全耗电状态下运行计算机。";break;
case 1 :
Label2->Caption="结束回话并关闭Windows。这样就可以安全的关掉电源了";break;
case 2 :
Label2->Caption="结束回话,关闭Windows,重新启动Windows。";

}
}
lk2000 2003-08-01
  • 打赏
  • 举报
回复

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧