Criando Processos em Windows usando C

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).

Nenhum comentário:

Ratings:

Avaliação deste artigo

Copyright © Programming @ home