Получение нарушения совместного доступа Открытие кода файла 32 - PullRequest
1 голос
/ 24 сентября 2011

Я пробовал следующий фрагмент кода, который не работает. То, что я пытаюсь сделать, - это запустить исполняемый файл (тот, который я создал в виде простого диалогового приложения с использованием VC6.0), а затем внутри этого приложения изменить свое собственное содержимое, хранящееся на жестком диске.

Итак, есть запущенная копия exe, и из этой запущенной копии она откроет копию диска в буфер. После загрузки в буфер начните поиск строки. Как только строка будет найдена, она будет заменена другой строкой, размер которой может отличаться от исходного.

Сейчас у меня проблема с невозможностью открыть файл на диске для чтения / записи. GetLastError возвращает следующую ошибку «ERROR_SHARING_VIOLATION Процесс не может получить доступ к файлу, потому что он используется другим процессом.».

Итак, что я сделал, я переименовал файл на диске в другое имя (необходимо то же имя, за исключением расширения). Та же ошибка снова о нарушении обмена. Я не уверен, почему я получаю этот код ошибки нарушения обмена 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);
}

1 Ответ

2 голосов
/ 24 сентября 2011

Прочитайте часть Windows в File Locking записи в википедии: вы не можете изменять файлы, которые выполняются в данный момент.

Вы можете переименовывать и копировать их, но вы не можете их изменить. То, что вы пытаетесь сделать, просто невозможно. (Переименование файла вообще не разблокирует его, после переименования он остается тем же файлом, поэтому не подлежит изменению.)

Вы можете скопировать свой исполняемый файл, изменить его, а затем запустить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...