CreateProcessを使用していますが、プロセスを開始できません。次のコードを使用していますが、「メモリの場所が無効です」というエラーが表示されます。 。 私のコードに問題はありますか?CreateProcessプロセスを開始できません。
#include <Windows.h>
#include <stdio.h>
//#include "common.h"
int main(void)
{
DWORD creation_flags = DEBUG_PROCESS;
STARTUPINFO startupinfo;
PROCESS_INFORMATION process_information;
char *path_to_exe = "D:\\dbg\\calc.exe";
startupinfo.dwFlags = 0x1;
startupinfo.wShowWindow = 0x0;
startupinfo.cb = sizeof(startupinfo);
if(CreateProcess( path_to_exe,
NULL,
NULL,
NULL,
NULL,
creation_flags,
NULL,
NULL,
&startupinfo,
&process_information)){
printf("We have successfully launched the process!\n");
printf("[*] PID: %d\n", process_information.dwProcessId);
}
else
printf("[*] Error: %d.\n", GetLastError());
}
[MSDNのドキュメント](http://msdn.microsoft.com/en-us/library/ms682425.aspx)では、「* lpCommandLine *パラメータはNULLにすることができます。この場合、関数は文字列を使用します* lpApplicationName *がコマンドラインとして指しているので、問題の原因ではないはずです。 –
すべてをゼロに初期化する最も簡単な方法は次のとおりです。STARTUPINFO startupinfo = {0}; – Ferruccio
@Ferruccio:それはすべて0に初期化されます。しかし、それは必ずしも多くの場合に必要なものではないかもしれません。仮のフィールド "int timeout; //プロセスを中止するまでの秒数を考えてください。永遠に待機するには-1に設定してください。ゼロに設定すると、直ちに失敗します。 -1がそこに必要です。すべてをゼロにするブランケットは危険です。 – abelenky