「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ で実行可能ファイルを安全に起動する方法: CreateProcess() が最良の選択である理由

C++ で実行可能ファイルを安全に起動する方法: CreateProcess() が最良の選択である理由

2024 年 11 月 9 日に公開
ブラウズ:523

How to Launch Executable Files Securely in C  : Why CreateProcess() Is Your Best Choice?

CreateProcess() を利用して実行可能ファイルを起動する

このガイドでは、別の C 実行可能ファイル内から実行可能ファイル (.exe) を開く方法について説明します。

system() 使用の落とし穴

解決策を掘り下げる前に、system() 関数を使用する危険性を強調することが重要です。 System() にはいくつかの欠点があります。

  • これはプログラムの速度を低下させる可能性があります。
  • 実行されるコマンドを制御できないため、セキュリティが損なわれます。これにより、悪意のあるプログラムが管理者権限で意図せず実行される可能性があります。
  • 多くの場合、ウイルス対策ソフトウェアによってセキュリティ上の脅威としてフラグが立てられます。

CreateProcess()

代わりに CreateProcess() を使用します。 system() の場合は、CreateProcess() 関数を使用することをお勧めします。この関数を使用すると、実行可能ファイルを起動して、独立したプロセスを作成できます。

#include 

VOID startup(LPCTSTR lpApplicationName)
{
  STARTUPINFO si;     
  PROCESS_INFORMATION pi;

  ZeroMemory( &si, sizeof(si) );
  si.cb = sizeof(si);
  ZeroMemory( &pi, sizeof(pi) );

  CreateProcess( lpApplicationName,   // executable path
                 argv[1],        // command line
                 NULL,           // process handle not inheritable
                 NULL,           // thread handle not inheritable
                 FALSE,          // no handle inheritance
                 0,              // no creation flags
                 NULL,           // parent's environment block
                 NULL,           // parent's starting directory 
                 &si,            // STARTUPINFO structure
                 &pi             // PROCESS_INFORMATION structure
                 );

  // Close process and thread handles. 
  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
}

エラーの解決

発生したエラーは、実行可能ファイルのフル パスを指定しなかったことが原因である可能性があります。ファイル名を含む完全なパスを必ず指定してください。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3