首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将托管线程上的模拟令牌传递给非托管线程

将托管线程上的模拟令牌传递给非托管线程
EN

Stack Overflow用户
提问于 2008-09-15 14:24:49
回答 4查看 1.3K关注 0票数 2

我有一个案例,一个winforms应用程序需要播放网络上的VB.Net文件。无法向运行应用程序的用户授予对网络共享的直接访问权限。通过模拟,我可以看到文件是否存在(在没有模拟的情况下,File.Exists会为网络共享上的文件返回false )。然后,当我尝试将该文件加载到Windows Media Player控件中时,该控件仍然是黑色的。我推断,当Windows Media Player控件加载到内存中时,它在与.Net托管线程不同的非托管线程上运行。有没有办法将该安全令牌从托管线程传递到非托管线程?我是不是完全漏掉了什么?

EN

回答 4

Stack Overflow用户

发布于 2009-10-28 04:28:45

您是否尝试过在AppDomain上使用SetThreadPrincipal方法

示例:

IPrinicipal userPrincipal = new MyCustomPrincipal();

AppDomain currentDomain = AppDomain.CurrentDomain;

currentDomain.SetThreadPrincipal(userPrincipal);

你在你的问题中提到,WMV似乎是非托管运行的,所以如果这个前提是正确的,那么它真的不应该工作(参见我的第二个答案)。

票数 1
EN

Stack Overflow用户

发布于 2008-09-15 16:51:08

我猜你试着用

代码语言:javascript
复制
[DllImport("advapi32.dll", SetLastError=true)]
public static extern int LogonUser(string pszUsername, string pszDomain, string pszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);  

登录网络共享。

根据我的经验,它并不关心线程。

如果你觉得有用的话,我可以给你看一个用法例子。在这里提到它的可能性有点小。

票数 0
EN

Stack Overflow用户

发布于 2009-10-20 18:02:14

WMP很有可能启动它自己的线程,这些线程继承自你的进程令牌,这是::CreateThread()的默认行为。我很确定从外部改变线程令牌是不可能的,除非控件接受令牌作为参数,否则你不能做很多事情。

除了将其放入另一个进程并使用::CreateProcessAsUser()和您拥有的令牌创建该进程,或者将文件缓冲到本地某个地方之外,我不确定是否有其他解决方案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档