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
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.
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.
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).
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.
- 1. Un thread non géré s'exécutant Code managé
- 2. Jeton C++ non résolu géré
- 3. Nettoyage de thread géré C#
- 4. Marshalling C# (passage la structure à un type non géré)
- 5. Dernier gestionnaire d'exceptions géré dans un exécutable mixte natif/géré?
- 6. C# à C non géré ++
- 7. code dll non géré
- 8. Pourquoi un appel au code non géré à partir d'un thread .NET BackgroundWorker affecte-t-il l'interface utilisateur?
- 9. Code de rappel non géré de C géré
- 10. Comment intégrer/mélanger le code géré et non géré
- 11. Transmettre DataTable à un environnement non géré (Visual C# 2005)
- 12. Strange comportement non géré XmlException
- 13. Comment convertir un type non géré défini par l'utilisateur en type géré?
- 14. WPF: Passage d'objets entre thread Thread et Background UI
- 15. Création d'un formulaire sur un thread non-gui
- 16. Comment convertir un doublon non géré en une chaîne managée?
- 17. Possible de créer un bitmap géré (non-GDI)?
- 18. Existe-t-il un gestionnaire d'exceptions non géré dans Java?
- 19. Marquage de code non géré dans silverlight
- 20. Faire le dossier non géré par SVN
- 21. CoreData récupère une requête via un objet géré abstrait vers un objet géré concret
- 22. Géré DirectX
- 23. WPF - BitmapEffect géré
- 24. Comment l'accès au thread de l'interface utilisateur est-il géré en C#?
- 25. en utilisant pyunit sur un thread réseau
- 26. Multi-thread FFTW 3.1.2 sur un ordinateur à mémoire partagée
- 27. Comment connecter un bean géré par message JBoss4 à un sujet sur un serveur distant?
- 28. Qu'est-ce qu'un module géré (par rapport à un assemblage)?
- 29. Géré DirectX comme prérequis
- 30. Accès à BackgroundWorkerThread dans un thread