線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1335
推到 Plurk!
推到 Facebook!

如何設定 Process 權限

 
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-10 20:29:25 IP:61.230.xxx.xxx 未訂閱
經測試發現 , 在Win32的環境裡 Login User 的執行權限並不代表Process的執行權限, 許多Win32 API 都需要AdjustTokenPrivileges來調整 Process對系統的控制能力.以關機為例 , User 可以執行關機動作卻無法以程式直接呼叫 ExitWindows or ExitWindowsEx 作關機動作 . RegSaveKey 也是 , 若不將Process 設為 E_BACKUP_NAME 也無法順利將Registry的資料備份或還原。    see "Windows NT Privileges" in MSDN    
bool AdjustPrivileges( LPCTSTR lpstrName )
{
    bool brc = false ;
    OSVERSIONINFO osv;
    osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); // 要記得設定        bool bc = GetVersionEx (&osv); // 取得OS版本        if (osv.dwPlatformId == VER_PLATFORM_WIN32_NT) {            TOKEN_PRIVILEGES tp;
        HANDLE hToken;
        LUID luid;            if (!::OpenProcessToken (::GetCurrentProcess (),TOKEN_ADJUST_PRIVILEGES, &hToken)) {
            // ShowMessage ("OpenProcessToken: Failure");
            return false ;
        }            if(!LookupPrivilegeValue(NULL, lpstrName , &luid)) {
            // ShowMessage ("LookupPrivilegeValue: Failure");
            return false ;
        }            tp.PrivilegeCount = 1;
        tp.Privileges[0].Luid =luid;
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
        ::AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),NULL, NULL );
        if (::GetLastError() != ERROR_SUCCESS){
            // ShowMessage ("AdjustTokenPrivileges: Failure");
            return false ;
        }        }
    return true ;
}    //
// for Win98/98 ok
//    MyShutdown16( )
{
    ExitWindows(0,0);
}    //
// for WinNT/2000
//    MyShutdown32( )
{
    if ( AdjustPrivileges( SE_SHUTDOWN_NAME ) )
        ExitWindowsEx(EWX_FORCE | EWX_SHUTDOWN,0);
}    MySaveRegistry( )
{
    if ( AdjustPrivileges( SE_BACKUP_NAME ) )
        RegSaveKey( HKEY_CURRENT_USER , "c:\\backup.dat" , NULL ) ;
}
發表人 - allenchan 於 2004/12/10 20:38:21
系統時間:2024-06-27 22:35:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!