【发布时间】:2011-09-24 08:57:25
【问题描述】:
我一直在尝试以下不起作用的代码。我要做的是开始执行我的 exe(我使用 VC6.0 创建了一个简单的基于对话框的应用程序),然后从这个应用程序内部修改它自己存储在硬盘上的内容。
所以有一个exe的运行副本,它会从这个运行副本打开磁盘副本到缓冲区。一旦加载到缓冲区中,然后开始搜索字符串。一旦找到字符串,它将被另一个字符串替换,该字符串的大小可能与原始字符串不同。
现在我遇到无法打开磁盘上的文件进行读/写的问题。 GetLastError 返回以下错误“ERROR_SHARING_VIOLATION The process cannot access the file because it is being used by another process.”。
所以我做了什么,我将磁盘上的文件重命名为另一个名称(除了扩展名之外基本相同的名称)。关于共享违规再次出现同样的错误。我不确定为什么会收到此共享违规错误代码 32。任何建议将不胜感激。我将在另一个线程中问我问题的第二部分。
FILE * pFile;
pFile = fopen ("Test.exe","rb");
if (pFile != NULL)
{
// do something like search for a string
}
else
{
// fopen failed.
int value = GetLastError(); // returns 32
exit(1);
}
【问题讨论】:
-
您真正想要完成什么?
-
感谢您的回复。首先,我不想写任何会被认为是恶意的东西。我只是想学习如何修改位于硬盘驱动器上的文件,但修改的细节将来自同一硬盘文件的运行实例。仅此而已。感谢回复。
-
嗯,这取决于你想要做什么,像WriteProcessMemory 这样的东西可能是你真正想要的。