ホームページ  >  記事  >  バックエンド開発  >  C で実行可能ファイルを安全に起動する方法 : CreateProcess() が最良の選択である理由

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-29 18:35:03996ブラウズ

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

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

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

system() 使用の落とし穴

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

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

代わりに CreateProcess() を使用する

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

#include <windows.h>

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

  ZeroMemory( &amp;si, sizeof(si) );
  si.cb = sizeof(si);
  ZeroMemory( &amp;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 
                 &amp;si,            // STARTUPINFO structure
                 &amp;pi             // PROCESS_INFORMATION structure
                 );

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

エラーの解決

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

以上がC で実行可能ファイルを安全に起動する方法 : CreateProcess() が最良の選択である理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。