Heim  >  Artikel  >  Backend-Entwicklung  >  So starten Sie ausführbare Dateien sicher in C: Warum ist CreateProcess() Ihre beste Wahl?

So starten Sie ausführbare Dateien sicher in C: Warum ist CreateProcess() Ihre beste Wahl?

Linda Hamilton
Linda HamiltonOriginal
2024-10-29 18:35:03996Durchsuche

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

Verwenden von CreateProcess() zum Starten ausführbarer Dateien

In diesem Handbuch erfahren Sie, wie Sie eine ausführbare Datei (.exe) aus einer anderen ausführbaren C-Datei heraus öffnen.

Die Fallstricke bei der Verwendung von system()

Bevor wir uns mit der Lösung befassen, ist es wichtig, die Gefahren der Verwendung der system()-Funktion hervorzuheben. System() weist mehrere Nachteile auf:

  • Es ist ressourcenschonend und verlangsamt möglicherweise Ihr Programm.
  • Es untergräbt die Sicherheit, da Sie keine Kontrolle über die ausgeführten Befehle haben. Dies kann dazu führen, dass unbeabsichtigt Schadprogramme mit Administratorrechten ausgeführt werden.
  • Es wird von Antivirensoftware oft als Sicherheitsbedrohung gekennzeichnet.

Einsatz von CreateProcess()

Stattdessen system() empfehlen wir die Verwendung der Funktion CreateProcess(). Mit dieser Funktion können Sie eine ausführbare Datei starten und so einen unabhängigen Prozess erstellen.

#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 );
}

Beheben des Fehlers

Der aufgetretene Fehler ist wahrscheinlich darauf zurückzuführen, dass Sie nicht die vollständigen Angaben gemacht haben Pfad der ausführbaren Datei. Stellen Sie sicher, dass Sie den vollständigen Pfad einschließlich des Dateinamens angeben.

Das obige ist der detaillierte Inhalt vonSo starten Sie ausführbare Dateien sicher in C: Warum ist CreateProcess() Ihre beste Wahl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn