Sous Windows Vista, je ne parviens pas à faire glisser/déposer des fichiers sur la fenêtre de mon application, car il fonctionne comme un processus de niveau d'intégrité élevé. J'ai besoin de l'exécuter aussi haut, mais je dois également être en mesure d'accepter les fichiers abandonnés à partir de processus de niveau d'intégrité bas/moyen comme Windows Explorer. Je crois que c'est UIPI qui bloque l'opération glisser/déposer. Je sais que je peux utiliser la fonction ChangeWindowMessageFilter pour permettre à certains messages Windows de contourner UIPI, mais je ne suis pas sûr de savoir quels messages ajouter pour permettre l'opération glisser/déposer. ChangeWindowMessageFilter est-il la bonne approche pour permettre cela, ou existe-t-il un meilleur moyen? Merci!Glisser/Déposer entre les processus de niveau d'intégrité moyen/élevé sous Windows Vista
Répondre
Vu le titre de cette entrée de blog:
« Why you shouldn’t touch ChangeWindowMessageFilter
with a 10-ft pole… »,
Je suppose que ce n'est pas la meilleure approche;)
Maintenant, cela peut sembler une bonne approche dans un premier temps - après tout , vous n'utiliserez que
ChangeWindowMessageFilter
lorsque vous êtes sûr de pouvoir valider complètement un message reçu même s'il provient d'une source non fiable, de sorte que rien ne puisse aller mal, n'est-ce pas?Eh bien, le problème est que même si vous faites cela, vous ouvrez souvent votre programme pour attaquer involontairement.
Considérons pour un instant comment les messages de fenêtre personnalisés sont généralement utilisés; virtuellement tous les contrôles communs existants ont des messages "dangereux" dans la gamme de message de classe personnalisée (par exemple WM_USER et amis).En outre, de nombreux programmes et bibliothèques de tiers confondons
WM_USER
etWM_APP
, de sorte que vous pouvez avoir des programmes de communication cross process via les deuxWM_USER
etWM_APP
, via des messages « dangereux » qui sont utilisés pour prendre des décisions sensibles ou inclure des paramètres de pointeur.
Dans les commentaires de cette entrée de blog, une autre approche a été discutée, mais avec à peu près la même conclusion:
Je voudrais utiliser
RegisterWindowMessage
et permettre alors que parChangeWindowMessageFilter
.
Toutefois, sachez que vous ne pouvez pas concevoir une interface de message de fenêtre de processus croisé qui transmet des pointeurs ou d'autres valeurs non fiables ou que vous créez un trou de sécurité. Pour cette raison, j'éviterais d'utiliser la fenêtre à tous les messages pour la plupart des IPC inter-processus (si possible), car il est généralement très difficile de faire des choses non-triviales de manière sécurisée en les utilisant.
Note: cette entrée "So, who wants to design a feature today?" illustre le même problème, et des points aux articles perspicaces de Raymond Chen:
- Why aren't console windows themed on Windows XP?
- Windows Vista has more extended options on the context menu
toutes deux détailler le problème.
Cette question ServerFault "Why can’t I drag/drop a file for editing in notepad in Windows Server 2008?" inclut également quelques réponses, mais pas de solution rapide.
Voir aussi ce article on IE
- 1. VDMEnumProcessWOW ne renvoie aucun processus sous Vista
- 2. Installation de cc.net sous Windows Vista
- 3. Comment transférer des données sensibles entre les processus dans Windows?
- 4. Installer MySQL sous Windows Vista (avec IIS)
- 5. PrintTestPage avec C# sous Windows Vista
- 6. Construction statique dans Qt sous Windows Vista
- 7. Quels sont les autres programmes OCaml de niveau supérieur? (Vista)
- 8. socket passant entre les processus
- 9. Compatability entre Windows Vista et Visual Studio 2008
- 10. Capture d'écran du processus sous Windows Service
- 11. Comment puis-je lister tous les processus s'exécutant sous Windows?
- 12. Affichage d'un processus caché sous Windows?
- 13. Meilleur hôte sous Windows pour les processus sans interface utilisateur
- 14. Différences entre la programmation des gadgets sous Vista et Windows 7?
- 15. Installation de VB6 sous Windows Vista en tant qu'utilisateur standard
- 16. TortoiseSVN conserve l'Explosion de l'Explosion sous Windows Vista
- 17. Partage de mémoire entre deux processus (C, Windows)
- 18. Expliquez les différences entre ImageMagick sous Windows et CentOS linux?
- 19. Détection des processus à l'aide de l'audio sous Windows
- 20. Est-il possible d'abaisser le niveau de privilège lors de l'appel de CoCreateInstance sous Vista?
- 21. CBT Hook ne fonctionne pas sous Windows Vista
- 22. Ecraser l'exécutable dans C: \ Program \ MyProg sous Windows Vista
- 23. Calculez par programme l'heure de début d'un processus sous Windows
- 24. Méthodes de partage d'instances de classe entre les processus
- 25. Développement d'applications .NET sous Windows 7 pour XP/Vista
- 26. Accès à la partition brute sous Windows Vista
- 27. exécuter plusieurs versions d'Internet Explorer sous Windows Vista
- 28. par programme tuer un processus dans Vista/Windows 7 en C#
- 29. Emacs - installation sous Vista
- 30. Watin Help - Fileupload sous VISTA
Je suis conscient des dangers de l'ouverture de ma demande à l'aide de cette méthode, et en tant que tel, je ne suis pas passer des structures de pointeur autour. J'ai vraiment besoin de la fonctionnalité glisser/déposer pour travailler, et la "sécurité" de Vista commence vraiment à m'agacer. –
Je comprends: notez que vous pouvez trouver d'autres suggestions à cette question: http://serverfault.com/questions/39600/why-cant-i-drag-drop-a-file-for-editing-in-notepad-in -windows-server-2008 (y compris la désactivation de l'interface UIPI (User Interface Privilege Isolation)) – VonC
Malheureusement, je ne peux pas demander aux utilisateurs de mon application de désactiver UIPI. Je comprends le raisonnement derrière le blocage de l'opération glisser/déposer entre les niveaux de priorité, mais cela rend le développement de l'application inutilement compliqué. :( –