【问题标题】:Receiving a Sharing Violation Opening a File Code 32收到共享冲突 打开文件代码 32
【发布时间】: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 这样的东西可能是你真正想要的。

标签: c++ file winapi


【解决方案1】:

阅读 File Locking 维基百科条目的 Windows 部分:您无法修改当前正在执行的文件。

您可以重命名和复制它们,但不能更改它们。所以你想做的事情根本不可能。 (重命名文件根本不会解锁,重命名后还是同一个文件,所以还是不能修改。)

你可以复制你的可执行文件,修改那个副本,然后运行它。

【讨论】:

  • 这解释了混乱。我花了很多时间试图让这部分工作。至少我知道得更好。将尝试您的建议。非常感谢您的回复。维克多
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
相关资源
最近更新 更多