Maison > développement back-end > C++ > le corps du texte

Comment lancer des fichiers exécutables en toute sécurité en C : Pourquoi CreateProcess() est votre meilleur choix ?

Linda Hamilton
Libérer: 2024-10-29 18:35:03
original
994 Les gens l'ont consulté

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

Utiliser CreateProcess() pour lancer des fichiers exécutables

Dans ce guide, nous explorerons comment ouvrir un fichier exécutable (.exe) à partir d'un autre exécutable C.

Les pièges de l'utilisation de system()

Avant d'approfondir la solution, il est crucial de souligner les dangers de l’utilisation de la fonction system(). System() présente plusieurs inconvénients :

  • C'est un ressource, qui peut potentiellement ralentir votre programme.
  • Cela compromet la sécurité, car vous n'avez aucun contrôle sur les commandes exécutées. Cela peut conduire à l'exécution involontaire de programmes malveillants avec des privilèges d'administrateur.
  • Cela est souvent signalé comme une menace de sécurité par les logiciels antivirus.

Utiliser CreateProcess()

Au lieu de system(), nous vous recommandons d'utiliser la fonction CreateProcess(). Cette fonction vous permet de lancer un fichier exécutable, créant ainsi un processus indépendant.

#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 );
}
Copier après la connexion

Résoudre l'erreur

L'erreur que vous avez rencontrée provient probablement du fait que vous n'avez pas spécifié le fichier complet chemin du fichier exécutable. Assurez-vous de fournir le chemin complet, y compris le nom du fichier.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!