ミューテックスハンドル、子プロセストラフコマンドライン、または他の方法で渡そうとしています。子プロセスにハンドルを渡す方法
どうすればいいですか? 子供からミューテックスにアクセスするにはどうしたらいいですか?
HANDLE ghMutex;
if(!CreateProcess(_T("C:\\Users\\Kumppler\\Documents\\Visual Studio 2010\\Projects\\teste3\\Debug\\teste3.exe"), // No module name (use command line)
aux2, // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
TRUE, // Set handle inheritance to TRUE
STARTF_USESTDHANDLES, // inherit the standard input, standard output, and standard error handles
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si[j], // Pointer to STARTUPINFO structure
&pi[j]) // Pointer to PROCESS_INFORMATION structure
)
EDIT:
これは私が子プロセス作成しています方法です
私は複数の子プロセスのためにミューテックスを使用する必要があるが、それは大丈夫でしょうか?だからここ
は、私が今やっていることです:
HANDLE ghMutex;
int mutex;
char mutexstring[7];
mutex=(int)ghMutex;
itoa(mutexValue,mutexString,10);
私はmutexStringトラフコマンドラインを通過し、その後、子プロセスに戻ってそれを変換されます:
mutexValue=atoi(argv[2]);
Mutex=(HANDLE)mutexValue;
私の質問、(HANDLE)キャストをするのは大丈夫ですか?
+1の名前付きミューテックス。彼らは明らかな解決策です。衝突を避けるためにコマンドラインからGUIDを渡すのは大変です:すべてのプログラムでハードコーディングしてください:とにかくユニークです。 –
"子プロセスは、コマンドライン文字列を値に戻し、単純にそれを使用して開始することができます。 – Caio
@Serge - appTranslator:名前のハードコードには2つの問題があります。 (1)アプリケーションの1つのインスタンスに制限します。 (2)攻撃者があなたの前にミューテックスを作成した場合のサービス拒否の脆弱性(私の答えに記載されているように) –