Je travaille sur une injection de dll soft en C#, la dll injectée est aussi en C# et j'utilise pinvoke pour certaines fonctions du système. Lorsque j'utilise extTextOut, j'obtiens la chaîne brouillée et les lignes se mélangent Accrocher des problèmes extTextOut
I accroché ExtTextOut en utilisant EasyHook de codeplex.com comme ceci:
try
{
CreateFileHook = LocalHook.Create(
LocalHook.GetProcAddress("gdi32.dll", "ExtTextOutW"),
new DExtTextOutW(ExtTextOutW_Hooked),
this);
CreateFileHook.ThreadACL.SetExclusiveACL(new Int32[1]);
}
et ma méthode de ExtTextOut est
[DllImport("gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, CallingConvention = CallingConvention.StdCall)]
static extern bool ExtTextOutW(IntPtr hdc,
int X,
int Y,
uint fuOptions,
[In] ref RECT lprc,
string lpString,
uint cbCount,
[In] IntPtr lpDx);
static bool ExtTextOutW_Hooked(
IntPtr hdc,
int X,
int Y,
uint fuOptions,
[In] ref RECT lprc,
string lpString,
uint cbCount,
[In] IntPtr lpDx)
{
try
{
DemoInjection This = (DemoInjection)HookRuntimeInfo.Callback;
lock (This.Queue)
{
This.Queue.Push(lpString);
}
}
catch
{
}
return ExtTextOutW(
hdc,
X,
Y,
fuOptions,
ref lprc,
lpString,
cbCount,
lpDx
);
}
Et une autre question, si je peux me permettre. Comment puis-je surveiller en permanence une fenêtre qui est floue ou minimisée (en utilisant cette approche, il ne fonctionne pas correctement)
Merci beaucoup!
Pour l'instant j'expire le même problème. Même quand je passe juste les paramètres à la fonction ExtTextOutW, j'ai toujours des problèmes dans le programme hooké - il montre des hiéroglyphes au lieu du texte latin. Je suis sûr, le problème est que MarshalA change quelque chose dans les données sources lors de la conversion en chaîne CLR. Le problème se manifeste uniquement lorsque l'indicateur Glyphes est défini, sinon le crochet fonctionne correctement et le texte accroché n'est pas endommagé. –