錯誤13表示權(quán)限被拒絕。要提升進程的訪問權(quán)限,你需要使用特權(quán)令牌(privilege token)去請求提升的權(quán)限。下面是一個可以參考的代碼示例:
#include <Windows.h>
#include <iostream>
int main()
{
HANDLE hToken;
TOKEN_PRIVILEGES tokenPrivileges;
LUID luid;
// 打開當前進程的令牌
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
std::cout << "OpenProcessToken failed. Error: " << GetLastError() << std::endl;
return 1;
}
// 獲取SE_DEBUG_NAME的權(quán)限特權(quán)
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid))
{
std::cout << "LookupPrivilegeValue failed. Error: " << GetLastError() << std::endl;
return 1;
}
// 設(shè)置特權(quán)令牌
tokenPrivileges.PrivilegeCount = 1;
tokenPrivileges.Privileges[0].Luid = luid;
tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 提升進程權(quán)限
if (!AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
{
std::cout << "AdjustTokenPrivileges failed. Error: " << GetLastError() << std::endl;
return 1;
}
std::cout << "Process access level has been elevated." << std::endl;
return 0;
}
這個示例代碼打開當前進程的令牌,獲取了SE_DEBUG_NAME的權(quán)限特權(quán),并使用AdjustTokenPrivileges函數(shù)提升進程權(quán)限。如果返回錯誤13,則表示權(quán)限被拒絕??赡苁怯捎谀銢]有足夠的權(quán)限去提升進程權(quán)限,或者操作系統(tǒng)不允許進程提升權(quán)限。