"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como iniciar arquivos executáveis ​​com segurança em C++: Por que CreateProcess() é sua melhor escolha?

Como iniciar arquivos executáveis ​​com segurança em C++: Por que CreateProcess() é sua melhor escolha?

Publicado em 2024-11-09
Navegar:802

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

Utilizando CreateProcess() para iniciar arquivos executáveis

Neste guia, exploraremos como abrir um arquivo executável (.exe) de outro executável C.

As armadilhas de usar system()

Antes de nos aprofundarmos na solução, é crucial destacar os perigos de empregar a função system(). System() apresenta várias desvantagens:

  • É ресурсоёмким, potencialmente tornando seu programa mais lento.
  • Isso prejudica a segurança, pois você não tem controle sobre os comandos executados. Isso pode levar à execução involuntária de programas maliciosos com privilégios de administrador.
  • Muitas vezes é sinalizado como uma ameaça à segurança por software antivírus.

Empregar CreateProcess()

Em vez de system(), recomendamos utilizar a função CreateProcess(). Esta função permite iniciar um arquivo executável, criando um processo independente.

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

Resolvendo o erro

O erro que você encontrou provavelmente decorre do fato de você não ter especificado o caminho completo do arquivo executável. Certifique-se de fornecer o caminho completo, incluindo o nome do arquivo.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3