OpenThreadToken() error 1008, ERROR_NO_TOKEN

OpenThreadToken() error 1008, ERROR_NO_TOKEN

本文关键字:ERROR NO TOKEN 1008 error OpenThreadToken      更新时间:2023-10-16

我正试图从MineSaver的内存中读取内容来学习这类内容,但我遇到了一个小问题。

当我尝试打印模块时,它对我说我无权这样做。我知道这是因为该进程的内存受到保护,不受写-读的影响,要从中读取,我需要拥有调试权限。

现在,我的问题是,当我调用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 adjustn";
        return FALSE;
    }
}
else {
    cout << "fail if: " << GetLastError() << endl;
    cin.get();
    return FALSE;
}

我不知道它为什么失败。我也尝试过微软的例子,但同样的问题。

有人知道它为什么失败吗?

如果使用模拟API,线程只有自己的令牌,否则只有一个进程令牌。如果OpenThreadTokenERROR_NO_TOKEN发生故障,则简单地回退到OpenProcessToken