Olá,
Para criar um executável Windows escrito em C que cria um novo processo veja o seguinte código:
#include "<"windows.h">" // aspas inseridas para tags aparecerem
int main(int argc, char **argv) {
PROCESS_INFORMATION pi; /*preenchido em CreateProcess */
STARTUPINFO si;
GetStartupInfo(&si);
CreateProcess(NULL, /* Nome do módulo executável*/
"notepad.exe", /* String da linha de comando */
NULL, /* Atributos de segurança do processo */
NULL, /* Atributos de segurando do encadeamento*/
FALSE, /* Sinalizador indicativo de herança */
DETACHED_PROCESS, /* Sinalizadores de criação */
NULL, /* Ponteiro para o novo bloco de ambiente */
NULL, /* Ponteiro para o diretório atual */
&si, /* Ponteiro para STARTUPINFO */
&pi /* Ponteiro para PROCESS_INFORMATION */
);
return 0;
}
A string contendo o nome do processo vão os argumentos de linha de comando.
É possível usar funções como execl e spawnl para abrir executáveis (funciona em linux), porém, essas funções não retornam informações interessantes em relação ao processo aberto. Por exemplo, o comando "pi.dwProcessId" retorna o ID do processo.
Veja a estrutura de PROCESS_INFORMATION:
typedef struct _PROCESS_INFORMATION {
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
O HANDLE do processo serve para diversas operações (que não serão descritas nesse post).
Passed in SCBCD 5 exam
Há 14 anos
Nenhum comentário:
Postar um comentário