2009-10-09 6 views
2

J'ai un problème avec le programme sur lequel je travaille actuellement. Il est causé par la sécurité accrue dans Vista/Windows 7, en particulier l'UIPI qui empêche une fenêtre avec un niveau d'intégrité inférieur «parler» à un niveau supérieur.Accès aux poignées de fenêtres externes

Dans mon cas, je veux dire à la fenêtre avec un niveau d'intégrité élevé pour passer à notre application, Il fonctionne parfaitement sur XP ou Windows 7 avec la sécurité off.

J'ai essayé de définir directement le HWND de la fenêtre IL supérieure, plutôt que d'utiliser la fonction findwindow(), cela fonctionne bien, mais le programme échoue en essayant de le déplacer ou d'interagir avec lui. Le handle de fenêtre est sauvegardé par l'application pour être intégré et lu par l'application fonctionnant à une IL inférieure.

J'ai également essayé de mettre UIaccess dans le manifeste à TRUE et de signer numériquement le programme mais pas de chance.

Des idées sur la façon de résoudre ce problème? merci.

Répondre

3

Je pensais juste que je suivrais cela pour tous ceux qui ont aussi lutté car j'ai enfin trouvé un moyen de le faire.

IL = niveau d'intégrité.

J'ai eu 2 applications, highIL.exe et lowIL.exe, le highIL voulait trouver la fenêtre lowIL.exe, le définir comme une fenêtre enfant et le déplacer dans une zone créée pour elle sur le highIL.exe. Cela a été bloqué par l'UIPI dans vista +. En fin de compte j'ai utilisé la méthode ChangeWindowMessageFilter dans Vista et le ChangeWindowMessageFilterEx dans Windows7, tous deux trouvés dans le user32.dll. Ces fonctions vous permettent de percer un trou dans l'UIPI pour permettre les messages que vous voulez à travers.

J'ai créé quelques messages personnalisés en utilisant la fonction RegisterWindowMessage, j'ai utilisé cette fonction pour enregistrer la méthode dans les deux applications highIL et lowIL, la ligne avait l'air un peu comme ceci:

const UINT MY_MOVEINTWINDOW_MSG = RegisterWindowMessage(_T("MyMsg.MoveWindow")); 

Le lowIL.exe est alors capable d'envoyer ces messages à la fenêtre highIL.exe sans qu'ils soient bloqués. Ensuite, il s'agissait simplement d'ajouter et d'écrire des gestionnaires de messages.

Cette méthode ne fonctionnera que si vous avez accès à la fois à l'IL haute et basse. Le MSDN a également un exemple de travail de la fonction ChangeWindowMessageFilterEx là-bas Website