我的程序在xp如果用户用标准身份登陆就无法用tool32help.dll里的函数
管理员身份是可以的
如何提升程序权限?

解决方案 »

  1.   

    这是在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。";    }
    }