私はプロセスを実行し、プロセスが終了するのを待って、実行可能ファイルを開いて何かを書き込もうとしています。だから私はちょうどそれを行う小さな "ローダー"を作成しました。 これは私のコードです:実行中の実行可能ファイルにデータを書き込む
;Run the executable
INVOKE GetStartupInfo,OFFSET startInfo
INVOKE CreateProcess, ADDR SomeExecutableFile, \
NULL, NULL, NULL, FALSE, \
NORMAL_PRIORITY_CLASS, NULL,NULL, \
OFFSET startInfo, OFFSET processInfo
INVOKE CloseHandle, processInfo.hThread
;Wait for it to finish & Close handle
INVOKE WaitForSingleObjectEx, processInfo.hProcess, INFINITE, FALSE
INVOKE CloseHandle, processInfo.hProcess
;Try to open the same exe file which just finished executing.
INVOKE CreateFile, OFFSET SomeExecutableFile,GENERIC_WRITE \
,0, 0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL
MOV hFile, EAX
.IF hFile== INVALID_HANDLE_VALUE
INVOKE MessageBox,NULL, OFFSET Problem, OFFSET Problem, MB_ICONWARNING
.ELSE
INVOKE WriteFile, hFile, Buffer, 5, OFFSET BytesWritten , NULL
INVOKE CloseHandle,hFile
.ENDIF
INVOKE ExitProcess,0
あなたが見ることができるように、「SomeExecutable」ファイルが実行されています。実行が停止すると、CreateFileで開かれます。 ファイルの作成に失敗し、INVALID_HANDLE ....、最終エラー0x20 - ERROR_SHARING_VIOLATIONが表示されます。
どうしてですか?
考え方&注:実行可能ファイルを開く「ローダー」から別のプロセスを作成して(実行が完了するのを待ってから)、書き込みを実行します。 2)プロセスがまだ開いているようです。つまり、エラーを説明するファイルはまだマップされていますが、マッピングされる理由はわかりません。 3)Ollyでデバッグ& ProcessExplorerプロセスが終了し、すべてのハンドルが閉じられても、Ollyはこのファイルのハンドルを持っていることがわかりました。なぜ、どうして私はそれを閉じることができますか?
どのようなアイデアも大歓迎です!使用する:)