【问题标题】:Microsoft Threads, setting Security and Access RightsMicrosoft Threads,设置安全和访问权限
【发布时间】:2013-01-09 23:24:37
【问题描述】:

我正在尝试制作一个基本的线程管理器。您可能已经看到我之前的一个问题,其中我提出了一些错误的代码,而我仍在处理该代码!但是我被卡住了,因为我希望能够调用函数 GetExitCodeThread(HANDLE, LPDWORD),但是我在实现它时遇到了麻烦。我遇到的第一个问题我想我知道我需要做什么,但我不知道如何实现它。我最初是在安全属性设置为 NULL 的情况下调用 CreateThread,从外观上看,我需要将其设置为 THREAD_QUERY_INFORMATION,但是我不知道如何填充它想要的 LPSECURITY_ATTRIBUTES 结构。 msdn的结构是:

typedef struct _SECURITY_ATTRIBUTES {
  DWORD  nLength;
  LPVOID lpSecurityDescriptor;
  BOOL   bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;

但我不知道如何用 THREAD_QUERY_INFORMATION 填充它,而且我不明白我用什么填充结构的其他部分。

我想如果我设置了创建线程的安全属性,我应该能够调用GetExitCodeThread,然后我的代码应该可以工作......有没有人有任何在创建线程时设置安全属性的示例代码我可以看看和参考吗?以及关于更好地理解 Windows 库的任何建议?

【问题讨论】:

  • 我想出了如何使这项工作,我实际上并不需要 security_attributes 结构。但是,我仍然想要更多关于如何使用它的信息,而且我对 msdn 网站的描述感到困惑。所以任何澄清都会很好!
  • 请使用_beginthreadex 而不是CreateThread
  • 为什么使用 _beginthreadex 而不是 CreateThread 更好?
  • 来自MSDN:“调用C运行时库(CRT)的可执行文件中的线程应该使用_beginthreadex_endthreadex函数进行线程管理,而不是CreateThreadExitThread;这需要使用 CRT 的多线程版本。如果使用 CreateThread 创建的线程调用 CRT,CRT 可能会在内存不足的情况下终止进程。 --- 另外,使用_beginthreadex 允许您使用线程句柄等待线程退出。您必须自己关闭手柄。
  • @paddy "另外,使用_beginthreadex 允许您使用线程句柄来等待线程退出。您必须自己关闭句柄" - 当也打电话给CreateThread。因此,_beginthreadexCreateThread 的唯一论据是 CRT 要求。

标签: c++ c windows multithreading


【解决方案1】:

lpThreadAttributes 参数确定句柄是否可继承以及线程对象上设置了哪些安全权限。它不影响授予CreateThread 返回的句柄的安全访问权限,该句柄始终为THREAD_ALL_ACCESS

同样,当新线程本身调用GetCurrentThread 时返回的句柄始终具有完全访问权限,但不支持旧版本的 Windows 除外。

如果您稍后要使用OpenThread 来获取额外的句柄,或者如果外部进程试图使用OpenThread 来获取句柄,那么线程安全权限就会发挥作用。

在受支持的 Windows 版本上,线程对象的默认安全权限(几乎?)总是合适的,因此 lpThreadAttributeslpSecurityDescriptor 应该是 NULL。处理加密、身份验证或其他特别敏感任务的软件可能在极少数情况下使用非默认线程安全权限。 (我想不出这有什么有用的目的,但可能有一些奇怪的情况是合适的。)

在旧版本的 Windows 上,如果调用 CreateThread 的线程正在模拟另一个用户,则可能需要指定 lpSecurityDescriptor,但建议的做法是在调用 CreateThread 之前停止模拟。

这一切都在MSDN documentation for CreateThread中详述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2012-03-08
    • 1970-01-01
    • 2015-11-26
    • 2014-12-26
    • 2015-01-24
    相关资源
    最近更新 更多