2009-07-23 7 views
1

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

1

Vu le titre de cette entrée de blog:
« Why you shouldn’t touch Change­Window­Message­Filter 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 Change­Window­Message­Filter 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 et WM_APP, de sorte que vous pouvez avoir des programmes de communication cross process via les deux WM_USER et WM_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 par ChangeWindowMessageFilter.
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:

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

+0

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. –

+0

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

+0

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é. :( –

Questions connexes