全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4302
推到 Plurk!
推到 Facebook!

有方法可以做到切換"執行身份"嗎

尚未結案
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-29 11:04:54 IP:211.20.xxx.xxx 未訂閱
原因: 公司想要鎖user的隨身碟功能,我找到了從登錄檔限制的方法了, 也可以從程式去改登錄檔,可是因為user端的pc是 winXP 且使用 個人帳號登入,沒有administrator的權限,因此程式也不能去改 變那一段機碼的值,會error,只好請問各位大大有什麼方法可以 解決。    目前試過的方法 1. 將要變更的機碼存成reg檔,在檔案總管對它按右鍵,選"執行身份" 改成administrator的身份來執行,可是它要user輸入密碼,過程太 繁鎖了,而且我不希望讓user輸入密碼。    1. Win 2000/XP 有個指令叫 runas 可以在執行程式時先變更user 權限再執行,可是密碼不能用代入的,一定要手動key in,但是 我不可能讓user知道administrator的密碼,也試過使用 dos command 的 重導向指令( 
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-30 08:43:13 IP:211.75.xxx.xxx 未訂閱
用Service方式來做,如何 也就是說你需要兩支AP 其中一隻為Service,另一隻是單純的AP
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-02 08:22:14 IP:211.20.xxx.xxx 未訂閱
Service 是否需要用 administrator 權限才能安裝, 如果是的話,那就很不方便,因為要去100個user那裡 一個一個的裝。 不知論譠這裡有沒有AP程式控制Service的範例可以參 考的。 不知還有沒有其他大大有另外的解決方案
daywb
一般會員


發表:4
回覆:7
積分:2
註冊:2002-04-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-03 13:15:07 IP:61.220.xxx.xxx 未訂閱
試試看以下程式碼 Var UserToken : Cardinal; Username,Password:String; begin RevertToSelf; Username:='administrator'; Password:='******';//administrator 的 Password if not LogonUser(PChar(Username), '.', PChar(Password), LOGON32_LOGON_INTERACTIVE , LOGON32_PROVIDER_DEFAULT, UserToken) then RevertToSelf //不成功 轉回原先的login user else ImpersonateLoggedOnUser(UserToken); ....... { finally RevertToSelf; //轉回原先的login user }
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-03 13:21:25 IP:61.228.xxx.xxx 未訂閱
folkchen你好, 我針對你提出的第一項去模擬與實作,我的做法是程式中執行RUNAS然後到要輸入密碼的時候,使用sendinput去模擬輸入密碼,以下是我簡單的寫了一些CODE供參用.
void sendkey(const char*);    int main(int argc, char *argv[])
{
    WinExec("runas /evn /user:administrator \"notepad\"",SW_SHOW);
    Sleep(1000);
    char pw[20]={};
    strcpy(pw,"12345678"); //password
    st[strlen(pw)]=(char)13; //enter code
    sendkey(pw);
    Sleep(1000);
    system("PAUSE");
    return 0;
}    void sendkey(const char* str)
{
     INPUT in;
     for(;*str!=0;str  ){
                         in.type=INPUT_KEYBOARD;
                         in.ki.wVk=0;
                         in.ki.wScan=MapVirtualKey(VkKeyScan(*str),0);
                         in.ki.time=1000;
                         in.ki.dwFlags=KEYEVENTF_SCANCODE;
                         in.ki.dwExtraInfo=GetMessageExtraInfo();
                         SendInput(1,&in,sizeof(INPUT));
                         in.ki.dwFlags=KEYEVENTF_SCANCODE|KEYEVENTF_KEYUP;
                         SendInput(1,&in,sizeof(INPUT));
                         }
                         
}
GeorgeKu
中階會員


發表:1
回覆:120
積分:74
註冊:2004-10-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-03 14:14:41 IP:61.228.xxx.xxx 未訂閱
folkchen, 我想正規的做法應該如同daywb大大所提的方式,之前我有試過用LogonUser方式去做,但是我的作業系統是WIN2000的,所以會有Privileges(SE_TCB_NAME)的問題存在,因此做不出來,目前還在學習如何解決privilege的問題.
folkchen
高階會員


發表:9
回覆:232
積分:173
註冊:2003-10-09

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-03 15:24:32 IP:211.20.xxx.xxx 未訂閱
看起來daywb的方法安全性比較高 但是仍然感謝大家的幫忙
系統時間:2024-04-29 12:44:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!