可能な限り単純なインジェクション DLL を作成しました。コード全体は次のとおりです。
#include "stdafx.h"
#include <stdio.h>
BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
FILE * File = fopen("D:\\test.txt", "w");
if(File != NULL)
{
fclose(File);
}
return TRUE;
}
超シンプルでしょ?まあ、私はこれを機能させることさえできません。このコードは dll にコンパイルされ、[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs] の下のレジストリにこの dll へのパスを配置しました。また、LoadAppInit_DLLs レジストリ値が 1 に設定されていることにも言及する必要があります。これを行うことで、他のアプリケーション (notepad.exe など) を起動したときに "D:\test.txt" ファイルが表示されることを期待していますが、表示されません。理解できません。非常に古く、Visual Studio '97 で記述された別の .dll があります (これを置き換えようとしています)。これは、AppInit_DLLs をそれを指すように設定し、任意のアプリケーションを開始すると正常に動作します。他のアプリケーションが開始されたときにロードされていることがわかります。
ここで何が起こっているのかわかりませんが、これはうまくいくはずですか?これ以上簡単なことはありません。私はVS 2010を使用しています。すべてのアカウントで、非常にプレーンなJane .dllを作成したと思うので、プロジェクトの設定がうまくいかないとは思いませんが、それについては完全にはわかりません。ここで何が欠けていますか?
設定情報
- OS:Windows7 64ビット
- OS バージョン: 6.1.7601 サービス パック 1 ビルド 7601
- IDE: ビジュアル スタジオ 2010
- IDE バージョン: 10.0.40219.1 SP1Rel