2008-09-15 16 views
2

VB.Net winformsアプリケーションがネットワーク経由でWMVファイルを再生する必要がある場合があります。アプリを実行しているユーザーにネットワーク共有に直接アクセスすることはできません。偽装によって、ファイルが存在することがわかります(偽装されていない場合、File.Existsはネットワーク共有上のファイルに対してfalseを返します)。 Windows Media Playerコントロールにファイルを読み込もうとすると、コントロールは黒いままです。 Windows Media Playerコントロールをメモリにロードすると、.Net管理スレッドとは別のアンマネージスレッドで実行されていると推測しました。そのセキュリティトークンをマネージスレッドからアンマネージドスレッドに渡す方法はありますか?完全に何かを逃していますか?マネージスレッド上の偽装トークンをアンマネージスレッドに渡す

答えて

0

私はあなたがネットワーク共有にログインするために

[DllImport("advapi32.dll", SetLastError=true)] 
public static extern int LogonUser(string pszUsername, string pszDomain, string pszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken); 

を使用してみましたとします。

私の経験上、スレッドについては気にしません。

私はあなたがそれがまったく役に立つと思う場合は、使用例を表示できます。ここでそれを言及するのに長い時間を費やしています。

0

WMPがプロセストークンから継承する独自のスレッドを開始する可能性は非常に高いですが、これは:: CreateThread()のデフォルトの動作です。私は、スレッドトークンを外部から変更することは不可能であると確信しています。また、コントロールがトークンをパラメータとして受け入れない限り、多くのことはできません。

私は、別のプロセスに入れておき、あなたが持っているトークンを使って:: CreateProcessAsUser()を使ってそのプロセスを作成したり、ローカルのどこかにファイルをバッファリングしたりして、

1

SetThreadPrincipalメソッドをオフにしてみましたか?AppDomain

例:

IPrinicipal userPrincipal = new MyCustomPrincipal();

AppDomain currentDomain = AppDomain.CurrentDomain;

currentDomain.SetThreadPrincipal(userPrincipal);

あなたはWMVアンマネージ実行するように思われること、あなたの質問に言及したので、その前提が正しければ、これは本当にいけません仕事(私の2番目の答えを見てください)。

0

WMVプレーヤーがAppDomainの外で動作すると仮定して、WPF/Silverlightメディアプレーヤーをホストしてネットワーク経由でファイルにアクセスしようとします。