Question

Comment puis-je trouver l'adresse d'un WndProc (d'une fenêtre de un autre processus ). Même si j'injecte une DLL et essayer de trouver avec soit GetClassInfoEx () ou GetWindowLong () ou GetWindowLongPtr () Je reçois toujours des valeurs comme 0xffff08ed, ce qui est certainement pas une adresse exécutable. Il est selon MSDN: «... l'adresse de la procédure de fenêtre, ou une poignée représentant l'adresse de la procédure de fenêtre »

Malheureusement, cela ne suffit pas bon pour moi, je besoin de l'adresse réelle. Spy ++ fait le bon travail la plupart du temps (mais même cela échoue parfois). Il doit donc être être possible. Thanx.


[EDIT]: Kudos Chris Becke pour fournir une solution super rapide et correcte mon petit problème!

Était-ce utile?

La solution

Peut-être vous êtes parce que vous stymied demandez la mauvaise version du WindowProc.

procs fenêtre, comme des applications, se produisent en deux saveurs: ansi et unicode. Windows ne peut pas renvoyer un pointeur brut vers une fenêtre ansi à une application unicode, ou vice versa, car ils vont tenter de l'appeler avec le type de chaîne erronée.

Alors, il n'y a pas de fonction GetWindowLongPtr. Son une macro qui résout deux fonctions « réelles » les fenêtres api fournit: GetWindowLongPtrA et GetWindowLongPtrW. Si la fenêtre est une fenêtre unicode et GetWindowLongPtrA est appelé Windows renverront une poignée au lieu du pointeur brut, de sorte qu'il puisse intercepter les appels (effectuée via CallWindowProc) et le maréchal de ansi à unicode de la chaîne. La conversion inverse est dans l'autre sens.

Même si vous appelez la fonction correcte, vous pouvez toujours obtenir une poignée arrière - son tout à fait possible que le code ansi a une fenêtre de sous-classé unicode. de sorte que le WindowProc a été entièrement remplacée par l'une des poignées de CallWindowProc.

Dans ce cas - je suppose que la chance dure

.

Autres conseils

Pour prolonger la réponse de Chris Becke (qui a résolu mon problème, merci!):

  

Alors, il n'y a pas de fonction GetWindowLongPtr. Son une macro qui résout deux fonctions « réelles » les fenêtres api fournit: GetWindowLongPtrA et GetWindowLongPtrW. Si la fenêtre est une fenêtre unicode et GetWindowLongPtrA est appelé Windows renverront une poignée au lieu du pointeur brut, de sorte qu'il puisse intercepter les appels (effectuée via CallWindowProc) et le maréchal de ansi à unicode de la chaîne. La conversion inverse est dans l'autre sens.

Vous pouvez vérifier si la fenêtre en question est une fenêtre unicode ou ANSI en appelant le IsWindowUnicode fonction . Grâce à ces informations, vous pouvez déterminer quelle fonction GetWindowLongPtr doit être appelée (à l'exécution),

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top