1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| LPSECURITY_ATTRIBUTES create_permission()
{
LPSECURITY_ATTRIBUTES secur;
PSECURITY_DESCRIPTOR desc;
if (my_test_malloc(secur = malloc(sizeof(*secur))) < 0)
return (NULL);
secur->lpSecurityDescriptor = NULL; // descripteur à creer ici
secur->bInheritHandle = TRUE;
secur->nLength = sizeof(secur);
return (secur);
}
t_process *create_process(t_process *proc, char *path)
{
LPSECURITY_ATTRIBUTES secur;
kill_process(proc);
if (proc == NULL)
{
if (my_test_malloc(proc = malloc(sizeof(*proc))) < 0)
return (NULL);
}
secur = create_permission();
if ((proc->job = CreateJobObject(secur, NULL)) == NULL)
{
printf("impossible de creer le job\n");
return (NULL);
}
ZeroMemory(&(proc->si), sizeof(proc->si));
if (CreateProcess( path, NULL, secur, NULL, TRUE, 0, NULL, NULL, &(proc->si), &(proc->pi)) != 0)
{
if (AssignProcessToJobObject(proc->job, proc->pi.hProcess) == 0)
{
printf("erreur assigne\n");
TerminateProcess(proc->pi.hProcess, 0);
CloseHandle(proc->pi.hProcess);
CloseHandle(proc->pi.hThread);
return (NULL);
}
proc->etat = 1;
return (proc);
}
else
printf("impossible de creer le process\n");
return (NULL);
}
int kill_process(t_process *proc)
{
if (proc == NULL || proc->etat == 0)
return (0);
printf("kill job\n");
TerminateJobObject(proc->job, 0);
CloseHandle(proc->job);
CloseHandle(proc->pi.hProcess);
CloseHandle(proc->pi.hThread);
proc->etat = 0;
return (0);
}
void *thread_vgo(void *ptr)
{
t_gobio *gobio = (t_gobio *)ptr;
gobio->proc_vgo = create_process(gobio->proc_vgo, "c:\\Program Files (x86)\\VGo\\VGoApp.exe");
return (NULL);
}
void *thread_tab(void *ptr)
{
t_gobio *gobio = (t_gobio *)ptr;
gobio->proc_tab = create_process(gobio->proc_tab, "c:\\Program Files (x86)\\TOOTI Visio\\TootiVisio.exe");
return (NULL);
}
void *thread_domo(void *ptr)
{
t_gobio *gobio = (t_gobio *)ptr;
gobio->proc_domo = create_process(gobio->proc_domo, "C:\\Users\\Johan\\Documents\\test\\domotique\\bin\\Debug\\domotique.exe");
return (NULL);
} |
Partager