vous pouvez utiliser la commande de poignée de windbg pour rechercher des procédés avec 0xf de drapeau pour obtenir le pid du processus enfant
Code compilé avec cl/Zi/nologo/W4/analyser % 1%/link/dE PRESSE
C:\>type codesnips\childdbg\childdbg.cpp
#include <stdio.h>
#include <windows.h>
int main (void)
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if(!CreateProcess("c:\\windows\\system32\\calc.exe",NULL,NULL, NULL, FALSE
,0,NULL,NULL,&si,&pi))
{
printf("CreateProcess failed (%d).\n", GetLastError());
return 0;
}
printf("waiting and watching when calc.exe will be no more\n");
WaitForSingleObject(pi.hProcess, INFINITE);
printf("calc.exe no more i am free to quit watching\n");
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
C:\> childdbg.exe
waiting and watching when calc.exe will be no more
processus
a commencé à courir au-dessus de la manière suivante (notez pid ou parent et enfant)
tlist -t montre l'arborescence **
C:\>tlist -t | grep -A 1 child
opera.exe (1164) windows - How Internet Explorer(IE11)Creates low Integrity child process without CreateProcess Call - Stack Overflow - Opera
childdbg.exe (6992) C:\codesnips\childdbg\childdbg.exe
calc.exe (7040) Calculator
ouvrir un windbg ou cdb rapide attacher au processus parent récupérer toutes les poignées sont de type processus et .detach du parent (comparer les pid via tlist récupérées et cdb)
C:> cdb -c "! 0 f poignée processus; .detach; q" pn childdbg.exe
0:001> cdb: Reading initial command '!handle 0 f Process;.detach;q'
Handle 28
Type Process
Attributes 0
GrantedAccess 0x1f0fff:
Delete,ReadControl,WriteDac,WriteOwner,Synch
Terminate,CreateThread,,VMOp,VMRead,VMWrite,DupHandle,CreateProcess,Set
Quota,SetInfo,QueryInfo,SetPort
HandleCount 4
PointerCount 18
Name <none>
Object Specific Information
Process Id 7040
Parent Process 6992
Base Priority 8
1 handles of type Process
Detached
quit:
C:\>
Excellent! Merci beaucoup pour cette excellente explication.Il m'a vraiment aidé. Que faire si le processus enfant est déjà en cours d'exécution et que nous ne pouvons pas définir BP @ CreateProcess *(). –
read ma réponse il répond en fait à la fois votre requête d'origine dans un autre fil, ce post et le commentaire que vous postez ci-dessus demandant comment récupérer pid d'un processus enfant en cours d'exécution. – blabb
@DavidA. blabb a raison. Tant que le processus parent a un handle pour le processus enfant ouvert, vous pouvez utiliser '! Handle 0 f Process'. Notez que * Process Id * et * Parent Process * sont donnés en décimal. Vous ne pouvez pas obtenir des processus enfant-enfant comme ça et vous ne serez pas en mesure de comprendre si le processus de l'enfant est mort mais l'enfant-enfant est toujours vivant. Process Explorer a le même problème. Windows ne gère pas les relations parent-enfant des processus. –