के खिलाफ निर्मित अनुप्रयोगों में Win32 हुक डीएलएल इंजेक्शन मैं एक परियोजना पर काम कर रहा हूं जो सभी उपयोगकर्ता इंटरैक्शन को कैप्चर करता है। एमएसडीएन बताता है (this)"किसी भी सीपीयू"
सेटविंडोशूकएक्स का उपयोग किसी अन्य प्रक्रिया में डीएलएल इंजेक्ट करने के लिए किया जा सकता है। एक 32-बिट डीएलएल को 64-बिट प्रक्रिया में इंजेक्शन नहीं दिया जा सकता है, और 64-बिट DLL को 32-बिट प्रक्रिया में इंजेक्शन नहीं दिया जा सकता है। यदि किसी एप्लिकेशन को अन्य प्रक्रियाओं में हुक के उपयोग की आवश्यकता है, तो यह आवश्यक है कि 32-बिट एप्लिकेशन कॉल SetWindowsHookEx 32-बिट प्रक्रियाओं में 32-बिट DLL इंजेक्ट करने के लिए, और 64-बिट एप्लिकेशन कॉल SetWindowsHookEx को इंजेक्ट करने के लिए 64-बिट डीएलएल 64-बिट प्रक्रियाओं में।
मेरा प्रश्न यह है कि यदि Any CPU
के खिलाफ कोई एप्लिकेशन बनाया गया तो क्या होता है। क्या मुझे Any CPU
के विरुद्ध बनाए गए डीएलएल से SetWindowsHookEx
पर कॉल करने की आवश्यकता है।
मैं HookFunctions_64.dll (दोनों 64) लोड हो रहा है WH_CBT
और WH_MOUSE
विश्व स्तर पर (नहीं एक विशिष्ट थ्रेड) की स्थापना HookFunctions_32.dll (दोनों 86) और HookLogger_64.exe लोड हो रहा है HookLogger_32.exe लिखा है।
HookLogger_32.exe, HookLogger_64.exe, HookFunctions_32.dll और HookFunctions_64.dll C++ में लिखे गए हैं।
जब मैं Any CPU
के विरुद्ध बनाए गए .NET अनुप्रयोग पर क्लिक करता हूं, तो इन डीएलएल इंजेक्शन (SetWindowHookEx
के माध्यम से) प्राप्त होते हैं। विंडोज ओएस & लटकता है मुझे अपनी मशीन को मजबूती से पुनरारंभ करना होगा।
जब एक ही .NET अनुप्रयोग x86 या x64 के खिलाफ बनाया गया है, और जब मैं हुकलॉगर्स (32 & 64 बिट दोनों) के बाद एप्लिकेशन पर क्लिक करता हूं, तो सब कुछ ठीक काम कर रहा है।
इस अपरिभाषित व्यवहार के लिए कोई कारण नहीं है।
जिस प्लेटफॉर्म पर मैं काम कर रहा हूं वह 64-बिट मशीन है।
क्या यह 32/64 के लिए बनाया गया है या वहां भी क्रैश होने पर सही तरीके से काम करता है? –
@pst: 32/64 के लिए बनाया गया जब यह सही ढंग से काम कर रहा है। यह एक हैलो वर्ल्ड डब्ल्यूपीएफ आवेदन है। – sri
इस तरह के ध्वनि संबंधित हो सकता है: http: // stackoverflow।कॉम/प्रश्न/1507268/बल-x86-clr-on-any-cpu-net-assembly – rene