void RaisePrivilege()
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken))
{
if(LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid))
{
AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,0);
}
}
if(hToken)
CloseHandle(hToken);
}
void CTest_MFCDlg::OnBnClickedOk()
{
HWND hWnd = FindWindowA(NULL,"计算器");
DWORD WinID;
CONTEXT context;
RaisePrivilege();
int n;
GetWindowThreadProcessId(hWnd,&WinID);
//HANDLE hHand = OpenProcess(PROCESS_ALL_ACCESS,0,WinID);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, WinID); //获得系统内所以线程
if (hSnapshot != INVALID_HANDLE_VALUE)
{
THREADENTRY32 te;
ZeroMemory(&te, sizeof(te));
te.dwSize = sizeof(te);
BOOL bOK = Thread32First(hSnapshot, &te);
for (; bOK; bOK = Thread32Next(hSnapshot, &te))
{
if (te.th32OwnerProcessID == WinID)
{
HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, te.th32ThreadID);
if (hThread != NULL)
{
context.ContextFlags = CONTEXT_CONTROL;
GetThreadContext(hThread,&context);
n = GetLastError();
}
}
}
}
//OnOK();
}
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ALL_ACCESS,&hToken))
{
if(LookupPrivilegeValue(NULL,SE_DEBUG_NAME,&tp.Privileges[0].Luid))
{
AdjustTokenPrivileges(hToken,FALSE,&tp,NULL,NULL,0);
}
}
if(hToken)
CloseHandle(hToken);
}
void CTest_MFCDlg::OnBnClickedOk()
{
HWND hWnd = FindWindowA(NULL,"计算器");
DWORD WinID;
CONTEXT context;
RaisePrivilege();
int n;
GetWindowThreadProcessId(hWnd,&WinID);
//HANDLE hHand = OpenProcess(PROCESS_ALL_ACCESS,0,WinID);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, WinID); //获得系统内所以线程
if (hSnapshot != INVALID_HANDLE_VALUE)
{
THREADENTRY32 te;
ZeroMemory(&te, sizeof(te));
te.dwSize = sizeof(te);
BOOL bOK = Thread32First(hSnapshot, &te);
for (; bOK; bOK = Thread32Next(hSnapshot, &te))
{
if (te.th32OwnerProcessID == WinID)
{
HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, te.th32ThreadID);
if (hThread != NULL)
{
context.ContextFlags = CONTEXT_CONTROL;
GetThreadContext(hThread,&context);
n = GetLastError();
}
}
}
}
//OnOK();
}