 |
操作系统:Win2000
编程工具:VC++
问题:我想利用
hThread = OpenThread(THREAD_TERMINATE, FALSE, dwThreadid);//te32.th32ThreadID);
Re = GetLastError();
来停止一个知道了线程ID号的线程,但总是返回错误号5(Access is denied)
是我的进程的权限不够,能告诉我如何使我的进程有超级用户的权限,谢谢!!
水平: 中级(刘东)
|
| |
|
 |
li_xf的意见:
首先使用LogonUser函数创建一个token.
根据调用参数,有可能需要调用 DuplicateTokenEx 函数,将impersonation token 转换为a primary token.
然后使用这个token 调用CreateProcessAsUser函数,创建一个拥有该用户安全上下文(context)的进程.
(具体例子详见MSDN)
函数原型:
BOOL LogonUser(
LPTSTR lpszUsername,
LPTSTR lpszDomain,
LPTSTR lpszPassword,
DWORD dwLogonType,
DWORD dwLogonProvider,
PHANDLE phToken
);
BOOL CreateProcessAsUser(
HANDLE hToken,
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
BOOL DuplicateTokenEx(
HANDLE hExistingToken,
DWORD dwDesiredAccess,
LPSECURITY_ATTRIBUTES lpTokenAttributes,
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,
TOKEN_TYPE TokenType,
PHANDLE phNewToken
);
Michael Jin的意见:
应该不是权限不够,想要中止的线程是界面线程,只能在线程内部使用THREAD_TERMINATE。
此问题由Michael Jin等回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, Windows API, win32, api, windows api, gdi32, kernel。
|
| |
|
| |
|
| |
|
|