2008-09-15 9 views
2

J'ai un cas où une application WinForms VB.Net doit lire des fichiers WMV à travers le réseau. L'utilisateur qui exécute l'application ne peut pas accéder directement au partage réseau. Par l'emprunt d'identité, je peux voir que les fichiers existent (sans usurpation d'identité, File.Exists renvoie false pour les fichiers sur le partage réseau). Lorsque j'essaie ensuite de charger le fichier dans un contrôle Windows Media Player, le contrôle reste noir. J'ai déduit que lorsque le contrôle Windows Media Player est chargé en mémoire, il s'exécute sur un thread séparé non géré que le thread géré .Net. Est-il possible de transmettre ce jeton de sécurité du thread géré au thread non géré? Ai-je manqué quelque chose complètement?Passage d'un jeton d'emprunt d'identité sur un thread géré à un thread non géré

Répondre

0

Je suppose que vous essayé d'utiliser

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

pour se connecter au partage réseau.

Dans mon expérience, il ne se soucie pas des discussions.

Je peux vous montrer un exemple d'utilisation si vous pensez qu'il peut être utile du tout. C'est un peu long pour le mentionner ici.

0

Il y a de fortes chances que WMP démarre ses propres threads qui héritent de votre jeton de processus, c'est le comportement par défaut de :: CreateThread(). Je suis à peu près sûr qu'il n'est pas possible de changer un jeton de threads de l'extérieur et à moins que le contrôle n'accepte un jeton comme paramètre, il n'y a pas grand chose à faire.

Je ne suis pas sûr qu'il existe une réponse en dehors de la mettre dans un autre processus et en créant ce processus en utilisant :: CreateProcessAsUser() avec le jeton que vous avez ou en mettant le fichier dans un endroit local.

1

Avez-vous essayé d'utiliser la méthode SetThreadPrincipal sur AppDomain?

Exemple:

IPrinicipal userPrincipal = new MyCustomPrincipal();

AppDomain currentDomain = AppDomain.CurrentDomain;

currentDomain.SetThreadPrincipal(userPrincipal);

Vous avez mentionné dans votre question, que WMV semble fonctionner non géré, donc si cette hypothèse est correcte, cela ne devrait vraiment pas travail (voir ma deuxième réponse).

0

En supposant que le lecteur WMV s'exécute en dehors de votre AppDomain, j'essayerais d'héberger le lecteur multimédia WPF/Silverlight pour accéder au fichier sur le réseau.

Questions connexes