2011-09-24 48 views
1

我一直在嘗試下面那段不起作用的代碼。我試圖做的是開始執行我的exe文件(我使用VC6.0創建了一個簡單的基於對話框的應用程序),然後從該應用程序內部修改其存儲在硬盤上的內容。收到共享衝突打開文件代碼32

因此,有一個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

你究竟在努力完成什麼? – user786653

+0

感謝您的回覆。首先,我不想寫任何可能被認爲是惡意的東西。我只是試圖學習如何修改位於硬盤上的文件,但修改的細節將來自同一個硬盤文件的運行實例。沒有更多的那個。欣賞答覆。 – user743543

+0

那麼取決於你想要做什麼,像[WriteProcessMemory](http://msdn.microsoft.com/en-us/library/ms681674 \(VS.85 \).aspx)可能是你真的在之後。 – user786653

回答

2

閱讀File Locking維基百科條目的Windows部分:您無法修改當前正在執行的文件。

您可以重命名並複製它們,但不能更改它們。所以你想做的事情根本不可能。 (重命名文件根本沒有解鎖,重命名後它仍然是同一個文件,所以仍然不可修改。)

您可以複製您的可執行文件,修改該副本,然後運行它。

+0

這解釋了混亂。我花了很多時間試圖讓這部分工作。至少我更瞭解。將嘗試你的建議。非常感謝答覆。勝利者 – user743543