2014-09-29 32 views
1

,首先,如果這是一個noobie問題,我很抱歉,我只是這種事情的一個啓動。
我正在嘗試從MineSweeper的內存中讀取這些東西,但我遇到了一些問題。
當我嘗試打印它對我說的模塊時,我無權這樣做。我知道那是因爲該進程的內存不受寫入讀取的影響,並且需要讀取它,所以我需要具有調試權限。
而就在那裏,我的問題是當我調用OpenThreadToken(..)時,它代碼1008失敗,這是ERROR_NO_TOKEN。

給你的代碼,併爲長介紹遺憾:
OpenThreadToken()錯誤1008,ERROR_NO_TOKEN

int privileges(){ 
HANDLE token; 
TOKEN_PRIVILEGES tp; 
DWORD siz = sizeof(TOKEN_PRIVILEGES); 

if (OpenThreadToken(GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, 
FALSE, &token) != 0){ //HERE IT FAILS 
    LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid); 
    tp.PrivilegeCount = 1; 
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    if (AdjustTokenPrivileges(token, 0, &tp, siz, NULL ,NULL) != 0){ 
     cout << "--Conseguido acceso debug.\n"; 
     return TRUE; 
    } 
    else { 
     cout << "fail adjust\n"; 
     return FALSE; 
    } 
} 
else { 
    cout << "fail if: " << GetLastError() << endl; 
    cin.get(); 
    return FALSE; 
} 

我不知道它爲什麼失敗。我也試過微軟的例子,但同樣的問題。
有人知道它爲什麼會失敗嗎?

+0

順便提一下,您通常不需要SE_DEBUG_NAME來調試在同一用戶帳戶下運行的程序。 – 2014-09-29 20:07:32

+0

那麼爲什麼我無法從MineSweeper進程內存讀取?有沒有其他方法可以訪問它? (我會發布另一個問題,但限制是每90分鐘一個問題) – Norwelian 2014-09-29 20:27:02

+0

不知道。我們需要看代碼。 – 2014-09-29 20:45:03

回答

4

如果您使用模擬API,線程只有自己的標記,否則只有一個進程標記。如果OpenThreadTokenERROR_NO_TOKEN失敗,則只需回退到OpenProcessToken即可。

+0

我試過了,它能正常工作,但並不像預期的那樣。當我嘗試打開HMODULES時,問題出現了,這是我的目標,就像我沒有激活SE_DEBUG_NAME一樣,它一直說這是讀寫保護。 – Norwelian 2014-09-29 19:52:41

+0

@Norwelian:這是一個不同的問題。請發佈一個新問題幷包含失敗的代碼。 – 2014-09-29 20:02:32

+0

好的,我會用更多的信息創建一個新的問題。 – Norwelian 2014-09-29 20:08:26

相關問題