So I want to make my dll only be injectable by my injector and I figured that a good way to do that is by only letting my dll be able to open when the injector is running. But I have no Idea how to do that.
As Mayur mentioned in comments, your DLL can enumerate running processes using EnumProcesses()
, and get their filenames looking for a match to your injector. You can do that in your DLL's entry point function during the DLL_PROCESS_ATTACH
stage. If the injector is not detected, your entry point can return FALSE to abort the load.
Alternatively, a much simpler way to detect your injector is to have it create a named mutex via CreateMutex()
in the global kernel namespace, and then have the DLL entry point try to access that same object via OpenMutex()
, and fail to load if the mutex does not exist. See Using Named Objects for more details.