我已经编写了最简单的注入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,并将该dll的路径放置在注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]下。我还应该提到LoadAppInit_DLLs注册表值已设置为1。通过这样做,我期望在启动其他应用程序(如notepad.exe)时看到文件“D:\test.txt”出现,但实际上没有出现。我不明白。还有另一个.dll,非常古老,是用Visual Studio '97编写的(我正在尝试替换它),当我将AppInit_DLLs设置为指向它并启动任意应用程序时,它可以正常工作。我可以告诉当其他应用程序被启动时它正在被加载。
我不确定这里发生了什么,但这应该能够工作,对吧?它不能再简单了。我正在使用VS 2010,根据所有报告,我认为我已经创建了一个非常平凡的.dll,所以我不认为任何项目设置应该有问题,但我并不完全确定。我在这里缺少什么?
安装信息:
- 操作系统:Windows 7 64位 - 操作系统版本:6.1.7601 Service Pack 1 Build 7601 - IDE:Visual Studio 2010 - IDE版本:10.0.40219.1 SP1Rel