1

Nous courons deux applications, chacun d'entre eux enregistrer le même message en utilisant RegisterWindowMessage(): application A en tant qu'utilisateur régulier et l'application B en tant qu'administrateur de la même session de l'utilisateur sur la machine, et les applications enverrait ce message un à l'autre. Lorsque A et B étaient exécutés en tant qu'utilisateur, tout allait bien et nous pouvions communiquer en utilisant la messagerie PostMessage(). Maintenant que l'application B est exécutée en tant qu'administrateur, les messages ne sont plus reçus. Que pouvons-nous y faire?Win32: Comment envoyer un message à un processus exécuté par un utilisateur différent dans Windows?

Est-ce que cette situation nous mandat d'utiliser d'autres mécanismes (autres que les messages)?

+0

Les espaces de noms de noyau ne s'appliquent pas aux messages de fenêtre. –

+1

Pourquoi ne pas utiliser un autre type d'IPC? – rkosegi

+0

@rkosegi Je ne voulais pas recoder ce qui a déjà été codé. – Artem

Répondre

9

Dans Windows Vista et versions ultérieures, User Interface Privilege Isolation (UIPI) empêche un processus d'intégrité plus faible d'envoyer des messages de fenêtre à un processus d'intégrité plus élevé. Dans les versions antérieures de Windows, le code malveillant pouvait attaquer les processus administratifs en utilisant abusivement les messages de la fenêtre. Par défaut, UIPI bloque tous les messages dont la valeur est supérieure à WM_USER, ce qui inclut les messages enregistrés via RegisterWindowMessage(). Ainsi, afin de permettre à A d'envoyer de tels messages à B, B doit d'abord appeler ChangeWindowMessageFilter() ou ChangeWindowMessageFilterEx() pour chaque message bloqué qu'il souhaite recevoir des processus d'intégrité inférieurs.

+0

Exceptionnel! Vraiment apprécier, merci! – Artem

+0

A travaillé comme charme! :) – Artem

Questions connexes