如果你的进程只有一个线程或线程不多,你可以使用SetThreadToken。
这是一个简单的例子。(为简洁起见,已经删除了错误检查)
现有流程:
#include <windows.h>
#include <iostream>
using namespace std;
int main(void)
{
cout << GetCurrentThreadId() << endl;//For example: I get currentthreadid = 17608 this time.
getchar();
char user[100] = { 0 };
DWORD size = 100;
GetUserNameA(user, &size);
cout << user << endl;
getchar();
return 0;
}
SetThreadToken.cpp:
#include <windows.h>
#include <iostream>
using namespace std;
int main(void)
{
HANDLE hToken, DToken;
BOOL i = LogonUserA("user","domain","password", LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT,&hToken);
HANDLE hThread = OpenThread(THREAD_ALL_ACCESS,false,17608);
DuplicateToken(hToken, SecurityImpersonation,&DToken);
SetThreadToken(&hThread, DToken);
getchar();
return 0;
}
如果你想给进程设置一个令牌,ntdll.dll中有一个未记录的方法NtSetInformationProcess,试试this question中的答案设置进程访问令牌。