C++ 使用loadappinit_dll注册表项将dll挂接到正在运行的进程
目前,我正在开发一个应用程序,在这个应用程序中,我需要将dll挂接到正在运行的应用程序中。为了实现这一目标,我将C++ 使用loadappinit_dll注册表项将dll挂接到正在运行的进程,c++,.net,c,windows,dll,C++,.net,C,Windows,Dll,目前,我正在开发一个应用程序,在这个应用程序中,我需要将dll挂接到正在运行的应用程序中。为了实现这一目标,我将LoadAppInit_DLLs注册表项更新为1,并将AppInit_DLLs设置为dll的位置。 当应用程序get打开dll并将其注入到该应用程序的进程中时,这种方法可以很好地工作 然而,这个注入过程不仅将dll注入到我感兴趣的应用程序中,而且还将它注入到我在windows操作系统中启动的所有应用程序中。我怎样才能指定这种注入只针对我需要它注入的应用程序,而不是针对所有的应用程序。我
LoadAppInit_DLLs
注册表项更新为1,并将AppInit_DLLs
设置为dll的位置。
当应用程序get打开dll并将其注入到该应用程序的进程中时,这种方法可以很好地工作
然而,这个注入过程不仅将dll注入到我感兴趣的应用程序中,而且还将它注入到我在windows操作系统中启动的所有应用程序中。我怎样才能指定这种注入只针对我需要它注入的应用程序,而不是针对所有的应用程序。我正在寻找一种方法,从dll中知道它正在调用哪个应用程序,然后决定是加载它还是忽略加载它。在
LoadAppInit\u dll
注册表项中列出的所有dll都将加载到所有进程,并与user32.dll
链接。如果由于某种原因,您的dll无法加载(例如,您在dll\u-ATTACH
上从DllMain
返回了FALSE
),则进程将终止。使用LoadAppInit\u DLLs
即使是为了调试目的,也是混乱和相当危险的。也许您应该选择另一种挂钩机制,例如使用SetWindowsHookEx
将LoadAppInit\u dll
注册表项中列出的所有dll加载到所有进程,并链接到user32.dll
。如果由于某种原因,您的dll无法加载(例如,您在dll\u-ATTACH
上从DllMain
返回了FALSE
),则进程将终止。使用LoadAppInit\u DLLs
即使是为了调试目的,也是混乱和相当危险的。也许您应该选择另一种挂钩机制,例如使用SetWindowsHookEx
我怎样才能指定这种注入只针对我需要它注入的应用程序,而不是针对所有的应用程序
使用AppInit\u DLLs
,您不能
此值中指定的所有DLL由当前登录会话中运行的每个基于Microsoft Windows的应用程序加载
我正在寻找一种从dll中知道它正在调用哪个应用程序的方法
DLL加载到进程的地址空间中。DLL可以调用GetModuleFileName(NULL)
来获取
已加载到的进程的完整路径和文件名
然后决定是加载还是忽略加载
通常,DLL的DllMain()
入口点允许DLL通过向DLL\u进程\u附加
通知返回FALSE来选择性地中止加载。但是,AppInit_DLL
指定了成功初始化应用程序所需的附加DLL,类似于静态链接DLL,因此它不允许DLL进行选择性加载。如果AppInit
DLL返回FALSE,则整个过程将中止
您必须自己手动将DLL挂接到目标应用程序中。您可以通过以下两种方式之一实现:
LoadLibrary()
AppInit\u DLLs
,您不能
此值中指定的所有DLL由当前登录会话中运行的每个基于Microsoft Windows的应用程序加载
我正在寻找一种从dll中知道它正在调用哪个应用程序的方法
DLL加载到进程的地址空间中。DLL可以调用GetModuleFileName(NULL)
来获取
已加载到的进程的完整路径和文件名
然后决定是加载还是忽略加载
通常,DLL的DllMain()
入口点允许DLL通过向DLL\u进程\u附加
通知返回FALSE来选择性地中止加载。但是,AppInit_DLL
指定了成功初始化应用程序所需的附加DLL,类似于静态链接DLL,因此它不允许DLL进行选择性加载。如果AppInit
DLL返回FALSE,则整个过程将中止
您必须自己手动将DLL挂接到目标应用程序中。您可以通过以下两种方式之一实现:
LoadLibrary()