【问题标题】:Execute thread with same rights as main program? [closed]执行与主程序具有相同权限的线程? [关闭]
【发布时间】:2014-01-30 17:09:37
【问题描述】:

我的应用程序中有一个执行 LDAP 查询的表单。但是,由于每个结果项都需要一些处理,我决定在单独的线程中处理每个项。唉,我很快意识到处理(它调用 COM 对象中的某些方法)拒绝工作 - 因为(或者“也许”是一个更好的词)线程不会在同一个用户帐户下产生。 COM 部分工作正常,但如果作为程序的一部分执行将返回正确信息的代码 - 在线程中执行时不会返回正确信息。当我用谷歌搜索这个时,我发现了指向安全描述符和令牌的信息。我必须承认我对此没有什么经验。

谁能告诉我你是如何让 TThread 类作为启动并操作我的主程序的用户执行的?

我们使用 Delphi XE3。该程序通过 Citrix/AD 在 Windows 7 上执行。

非常感谢您的帮助

更新:** 这原来是 COM 问题而不是线程问题。 COM 的用户名参数应为 UTF8。现在线程工作正常。

感谢大家分享他们的知识!

【问题讨论】:

  • 你是如何做出这个诊断的?
  • 结果 AD 对象仅显示访客帐户可见的信息。当我点击访客帐户不可见的用户时 - 数据是空白的。
  • 你想访问什么样的信息?
  • 该用户的 AD 对象,用于从 SID 中提取帐户 GUID。我还检查帐户是否被锁定/禁用并获取用户描述。这很奇怪。如果我在主线程中执行它,它工作正常,但它拒绝在线程下工作。是的,为线程设置了 coInitialize,并且 COM 助手响应没有错误。
  • 也许你正试图访问一个被封送到另一个线程的对象

标签: windows multithreading delphi


【解决方案1】:

你的理解是错误的。线程确实在与其父进程相同的用户帐户和访问权限中运行。改变这种行为需要额外的代码(模拟等)。所以其他事情正在发生。你需要继续调查。如果你需要帮助,你需要展示你的实际代码。

【讨论】:

  • 谢谢。更新了问题以更好地反映问题。
  • 你是对的。这不是线程问题,而是 COM 问题。现在可以了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 2013-07-08
  • 2017-06-19
  • 2014-10-29
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
相关资源
最近更新 更多