Hook Low Level n'appel pas DllMain

Signaler
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011
-
Messages postés
59
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
4 avril 2007
-
<name>
</name>
<link href="../../../../../css/ie4.css" type="text/css" rel="stylesheet" />
<!-- @ -->
<link href="../../../../../css/inetsdk.css" type="text/css" rel="stylesheet" />
<!-- @ -->
<style type="text/css"><![CDATA[
PRE.clsCode { font-size:110%; }
PRE.clsSyntax { font-size:100%; }
TD DIV.clsBeta { display:none;}

A:link { color:#0000ff; text-decoration:underline;}
A:visited { color:#0000ff; text-decoration:underline;}
A:hover { color:#3366ff; text-decoration:underline;}
MSHelp\:link {
color:#0000ff;
text-decoration:underline;
cursor:hand;
hoverColor:#3366ff;
filterString: ;}
]]></style>

<link href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet" />



<xml id="_topicdata" pagetype="function" proj="WinUIHXS" name="SetWindowsHookEx" pubpath="/WinUI/WindowsUserInterface/Windowing/Hooks/HookReference/HookFunctions/SetWindowsHookEx.htm">
<!-- topic data -->
<root>
</root>
</xml>


<xml xmlns="">
<mshelp:keyword index="A" term="_win32_SetWindowsHookEx">
</mshelp:keyword>
<mshelp:keyword index="A" term="_win32_SetWindowsHookEx_cpp">
</mshelp:keyword>
<mshelp:toctitle title="SetWindowsHookEx Function">
</mshelp:toctitle>
<mshelp:rltitle title="SetWindowsHookEx Function ()">
</mshelp:rltitle>
<mshelp:keyword index="F" term="SetWindowsHookEx">
</mshelp:keyword>
<mshelp:keyword index="K" term="SetWindowsHookEx">
</mshelp:keyword>
<mshelp:attr name="TopicType" value="kbRef">
</mshelp:attr>
<mshelp:attr name="Locale" value="kbEnglish">
</mshelp:attr>
<mshelp:attr name="DevLang" value="C++">
</mshelp:attr>
<mshelp:attr name="Technology" value="WinUI">
</mshelp:attr>
<mshelp:attr name="TechnologyVers" value="kbWinUI">
</mshelp:attr>
<mshelp:attr name="DocSet" value="WCSDK">
</mshelp:attr>
<mshelp:attr name="DocSet" value="LHSDK">
</mshelp:attr>
<mshelp:attr name="DocSet" value="PSDK">
</mshelp:attr>
<mshelp:attr name="TargetOS" value="Windows">
</mshelp:attr>
<mshelp:attr name="APIName" value="SetWindowsHookExA">
</mshelp:attr>
<mshelp:attr name="APIName" value="SetWindowsHookExW">
</mshelp:attr>
<mshelp:attr name="TopicType" value="apiref">
</mshelp:attr>
<mshelp:attr name="APIName" value="SetWindowsHookEx">
</mshelp:attr>
<mshelp:attr name="APIType" value="DllExport">
</mshelp:attr>
<mshelp:attr name="APILocation" value="user32.dll">
</mshelp:attr> n'est donc plus appellé, par contre le hook fonctionne, la fonction de hook est bien appellée. Est ce normal ?

J'ai trouvé ça sur MSDN :
</xml>"If the input comes from a call to keybd_event, the input was "injected". However, the WH_KEYBOARD_LL hook is not injected into another process. Instead, the context switches back to the process that installed the hook and it is called in its original context. Then the context switches back to the application that generated the event."

J'utilisais le DLL_PROCESS_ATTACH pour initialiser mes variables du coup je peux plus.

Thanks <xml xmlns=""> in advance <mshelp:attr name="TopicType" value="kbSyntax"></mshelp:attr></xml>
<dd><dl><dt>
</dd></dl>

5 réponses

Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011

ça a coupé une partie du message...grrr

Bonjour,

J'utilisais un hook clavier classic qui fonctionnait nickel avec fonction de hook dans une DLL externe,puis je suis passé à un hook Low Level <name>WH_KEYBOARD_LL, et la problème, le point d'entrée de ma DLL (DllMain) n'est plus appellé, par contre le hook fonctionne, la fonction de hook est appellée. Est ce normal ? </name><link href="../../../../../css/ie4.css" type="text/css" rel="stylesheet" /><!-- @ --><link href="../../../../../css/inetsdk.css" type="text/css" rel="stylesheet" /><!-- @ --><style type="text/css"><![CDATA[
PRE.clsCode { font-size:110%; }
PRE.clsSyntax { font-size:100%; }
TD DIV.clsBeta { display:none;}

A:link { color:#0000ff; text-decoration:underline;}
A:visited { color:#0000ff; text-decoration:underline;}
A:hover { color:#3366ff; text-decoration:underline;}
MSHelp\:link {
color:#0000ff;
text-decoration:underline;
cursor:hand;
hoverColor:#3366ff;
filterString: ;}
]]></style><link href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet" />

<xml id="_topicdata" pagetype="function" proj="WinUIHXS" name="SetWindowsHookEx" pubpath="/WinUI/WindowsUserInterface/Windowing/Hooks/HookReference/HookFunctions/SetWindowsHookEx.htm"><!-- topic data --><root></root></xml>

<xml xmlns=""><mshelp:keyword index="A" term="_win32_SetWindowsHookEx"></mshelp:keyword><mshelp:keyword index="A" term="_win32_SetWindowsHookEx_cpp"></mshelp:keyword><mshelp:toctitle title="SetWindowsHookEx Function"></mshelp:toctitle><mshelp:rltitle title="SetWindowsHookEx Function ()"></mshelp:rltitle><mshelp:keyword index="F" term="SetWindowsHookEx"></mshelp:keyword><mshelp:keyword index="K" term="SetWindowsHookEx"></mshelp:keyword><mshelp:attr name="TopicType" value="kbRef"></mshelp:attr><mshelp:attr name="Locale" value="kbEnglish"></mshelp:attr><mshelp:attr name="DevLang" value="C++"></mshelp:attr><mshelp:attr name="Technology" value="WinUI"></mshelp:attr><mshelp:attr name="TechnologyVers" value="kbWinUI"></mshelp:attr><mshelp:attr name="DocSet" value="WCSDK"></mshelp:attr><mshelp:attr name="DocSet" value="LHSDK"></mshelp:attr><mshelp:attr name="DocSet" value="PSDK"></mshelp:attr><mshelp:attr name="TargetOS" value="Windows"></mshelp:attr><mshelp:attr name="APIName" value="SetWindowsHookExA"></mshelp:attr><mshelp:attr name="APIName" value="SetWindowsHookExW"></mshelp:attr><mshelp:attr name="TopicType" value="apiref"></mshelp:attr><mshelp:attr name="APIName" value="SetWindowsHookEx"></mshelp:attr><mshelp:attr name="APIType" value="DllExport"></mshelp:attr><mshelp:attr name="APILocation" value="user32.dll"></mshelp:attr><mshelp:attr name="TopicType" value="kbSyntax"></mshelp:attr></xml>
<dd><dl><dt>
</dd></dl>
Messages postés
59
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
4 avril 2007

Tu utilise quel compilateur ? Si c'est GCC (avec Dev-Cpp par exemple) essaye de déclarer DllMain en __declspec(dllexport) car je crois qu'il ne le fait pas par défaut
Messages postés
223
Date d'inscription
mercredi 13 juillet 2005
Statut
Membre
Dernière intervention
8 août 2011

Bonjour [auteurdetail.aspx?ID=414682 clempar55],

Merci pour la réponse.

J'utilise Visual C++ 2005 Express Edition, effectivement j'avais deja rencontré ce problème quand je codais sous CodeBlocks avec un hook classic <name>WH_KEYBOARD. Mais la ça n'est pas ça. En fait lors d'un hook de bas niveau la DLL n'est plus injectée dans l'espace mémoire des processus il est donc normale que la fonction DllMain ne soit pas appellée. (corrigez moi si je me trompe) </name><link href="../../../../../css/ie4.css" type="text/css" rel="stylesheet" /><!-- @ --><link href="../../../../../css/inetsdk.css" type="text/css" rel="stylesheet" /><!-- @ --><style type="text/css"><![CDATA[
PRE.clsCode { font-size:110%; }
PRE.clsSyntax { font-size:100%; }
TD DIV.clsBeta { display:none;}

A:link { color:#0000ff; text-decoration:underline;}
A:visited { color:#0000ff; text-decoration:underline;}
A:hover { color:#3366ff; text-decoration:underline;}
MSHelp\:link {
color:#0000ff;
text-decoration:underline;
cursor:hand;
hoverColor:#3366ff;
filterString: ;}
]]></style><link href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet" />

<xml id="_topicdata" pagetype="function" proj="WinUIHXS" name="SetWindowsHookEx" pubpath="/WinUI/WindowsUserInterface/Windowing/Hooks/HookReference/HookFunctions/SetWindowsHookEx.htm"><!-- topic data --><root></root></xml>

<xml xmlns=""><mshelp:keyword index="A" term="_win32_SetWindowsHookEx"></mshelp:keyword><mshelp:keyword index="A" term="_win32_SetWindowsHookEx_cpp"></mshelp:keyword><mshelp:toctitle title="SetWindowsHookEx Function"></mshelp:toctitle><mshelp:rltitle title="SetWindowsHookEx Function ()"></mshelp:rltitle><mshelp:keyword index="F" term="SetWindowsHookEx"></mshelp:keyword><mshelp:keyword index="K" term="SetWindowsHookEx"></mshelp:keyword><mshelp:attr name="TopicType" value="kbRef"></mshelp:attr><mshelp:attr name="Locale" value="kbEnglish"></mshelp:attr><mshelp:attr name="DevLang" value="C++"></mshelp:attr><mshelp:attr name="Technology" value="WinUI"></mshelp:attr><mshelp:attr name="TechnologyVers" value="kbWinUI"></mshelp:attr><mshelp:attr name="DocSet" value="WCSDK"></mshelp:attr><mshelp:attr name="DocSet" value="LHSDK"></mshelp:attr><mshelp:attr name="DocSet" value="PSDK"></mshelp:attr><mshelp:attr name="TargetOS" value="Windows"></mshelp:attr><mshelp:attr name="APIName" value="SetWindowsHookExA"></mshelp:attr><mshelp:attr name="APIName" value="SetWindowsHookExW"></mshelp:attr><mshelp:attr name="TopicType" value="apiref"></mshelp:attr><mshelp:attr name="APIName" value="SetWindowsHookEx"></mshelp:attr><mshelp:attr name="APIType" value="DllExport"></mshelp:attr><mshelp:attr name="APILocation" value="user32.dll"></mshelp:attr><mshelp:attr name="TopicType" value="kbSyntax"></mshelp:attr></xml>
<dd><dl><dt>
</dd></dl>
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Le point d'entrée d'un binaire exécutable n'a pas à être exporté, c'est seulement là où il débutera son exécution.

ciao...
BruNews, MVP VC++
Messages postés
59
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
4 avril 2007

@HeavenForsaker: Si tu n'utilise pas GCC alors ce n'est pas ca le problème. Je n'ai jamais utilisé de hook WH_KEYBOARD_LL mais si en effet la dll n'est pas mappée il paraitrait logique que DllMain ne soit pas apellé (reste à confirmer). Sinon pour initialiser tes variables tu peux le faire au moment de leur déclaration.

@BruNews: désolé je viens de refaire un test et en fait ce n'est pas
__declspec(dllexport) qu'il fallait préciser mais extern "C" (enfin,
uniquement lorsqu'on compile en C++), sinon DllMain n'est pas appellé
au chargment de la dll. Donc en effet pas besoin de l'exporter mais il
faut quand même préciser extern "C". GCC est parfois bien étrange ...