如何检查Win32中使用c++的窗口句柄是否在管理模式下运行
How do I check if the window handle is running in administration mode in Win32 using C++?
我有应用程序的窗口句柄。如何知道应用程序是否以管理员模式运行?
只是一个简单的答案,它基本上会指向一些API调用来阅读。
首先,您需要获得所属进程的ID,然后获得该进程的句柄:
DWORD proc_id = 0U;
DWORD thread_id = GetWindowThreadProcessId(hWnd, &proc_id);
// assuming it all works, open the process
HANDLE hProc = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, proc_id);
PROCESS_QUERY_INFORMATION
表示您正在尝试打开具有查询其信息的权限的进程…例如它的令牌等。然后你有几个选项——你使用哪个部分取决于你为什么需要这些信息。
选项1是使用GetSecurityInfo API获取有关进程的安全信息。这将允许您请求诸如进程的所有者(SID)、安全访问信息(SACL/DACL)等信息。我突然想到,像这样:
GetSecurityInfo(hProc, SE_KERNEL_OBJECT, ...);
传入的参数将取决于您想要的信息。请记住,您可能没有权利要求这些信息。
选项2是获得进程令牌,它允许您以不同的方式获得类似的信息。您可以通过调用OpenProcessToken和GetTokenInformation来实现这一点。同样,您传递的参数将取决于您想要这些信息的目的。像这样的东西应该让你开始:
HANDLE hToken;
OpenProcessToken(hProc, TOKEN_READ, &hToken);
GetTokenInformation(hToken, TOKEN_USER, ...); // get the user associated with the token
请注意,我没有尝试过这些,我只是看了看MSDN并做出了有根据的猜测。我也没有进行错误检查……请记住,如果您正在查询进程,那么某些调用可能会失败,因为您没有请求该信息的权限。
您可以使用以下代码,如果User是admin则返回TRUE,否则返回False。
BOOL IsUserAnAdmin()
更多参考:http://msdn.microsoft.com/en-us/library/windows/desktop/bb776463(v=vs.85).aspx
相关文章:
- 如何获取边缘窗口句柄 (HWND)?
- 从运行服务的应用程序代码中提取窗口句柄
- 我需要通过窗口句柄(HWND)获取文件,我该怎么办?
- QOpenGLWidget:检索第三方库的窗口句柄
- 将窗口句柄从一个进程使用到另一个进程(插件 vst 音频)
- 编写 Windows 桌面应用程序时,我应该在哪里跟踪我的窗口句柄?
- 为什么错误1400无效的窗口句柄
- 如何从exe文件的名称中查找窗口句柄
- 捕获新创建的模态对话框的窗口句柄
- 获取 ActiveX 窗口句柄
- 如何正确传递窗口句柄
- 如何将窗口句柄从C#传递到C Win32 DLL
- 窗口句柄无法正确保存
- 获取光标下窗口的窗口句柄
- C++:通过进程id、进程句柄和标题名称从进程中获取唯一窗口的窗口句柄的最佳方法
- 错误 1400 无效的窗口句柄
- 将消息发送到窗口句柄
- 将 C# 窗口句柄传递给非托管代码 - 跨线程异常
- 渲染和窗口系统的独立性,通过窗口句柄进行连接
- 如何使用Windows应用商店C++在没有窗口句柄的情况下渲染路径几何体