Listeur des processus et de ses childs. kill n'importe quel process (privilege se_debug_name)

Soyez le premier à donner votre avis sur cette source.

Vue 12 808 fois - Téléchargée 1 612 fois

Description

Code assez simple mais tout de même commenté. Exemple d'utilisation de plusieurs API tel que GetWindow, GetClassName, GetWindowText, GetWindowThreadProcessId, OpenProcess, OpenProcessToken, TerminateProcess, EnumProcess, GetCurrentProcessId, LookupPrivilegeValue, AdjustTokenPrivileges, ShowWindow, WindowFromPoint, SetForegroundWindow, SetActiveWindow, CreateToolhelp32Snapshot, Module32First etc...
Vous permez de trouver quelques info. sur les process ainsi de connaître leurs childs (boutton, label, edit etc.).
Il y a aussi un petit code pour rechercher un process avec plusieurs critères de recherche possible (avec wildcards ? *).
Utilisation d'un StringGrid pour l'affichage des résultats de la recherche.
La recherche est faîte dans un THREAD pour ne pas ralentir le programme.
Le process se met en SE_DEBUG_NAME pour pouvoir fermer(/accéder) n'importe quel processus.

Bref, aucun composant externe; Seulement API + Compo. standard
Code fait "à la va vite", donc il doit surment être façilement optimisable

--> Exemple de comment avoir un scrollbar horizonte dans une listbox

Source / Exemple :


[...]
function SetPrivDebug: boolean;   //fonction pour obtenir le droit de debug
var
  dwPid: DWORD;
  hProcess, hToken : THandle;
  tpDebug, tpPDebug: TOKEN_PRIVILEGES;
  rLenght: Cardinal;
begin
  Result := False;

  dwPid := GetCurrentProcessId; //on obtien le PID de notre process
  hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, dwPid); //on obtien un handle pour accéder au process qui a pour pid dwPid
  if hProcess = 0 then     //si OpenProcess a echoué
  begin
    ShowMessage('Error nº' + IntToStr(GetLastError) + ^M + SysErrorMessage(GetLastError));
    Exit;
  end;
  if OpenProcessToken(hProcess, TOKEN_ALL_ACCESS, hToken) = NULL then  //on obtien un handle sur les token de hProcess et on le met dans hToken
  begin
    ShowMessage('Can''t access token''s right' + ^M + 'Error nº' +
                IntToStr(GetLastError) + ^M + SysErrorMessage(GetLastError));
    Exit;        //^M saute une ligne
  end;

  if LookupPrivilegeValue(nil, SE_DEBUG_NAME, tpDebug.Privileges[0].Luid) = NULL then
  begin //on trouve le LUID (locally unique identifier) du privilège et on le met dans tpDebug.Privileges[0].Luid
    ShowMessage('Can''t retrieve the locally unique identifier (LUID)');
    Exit;
  end;
    tpDebug.PrivilegeCount := 1;     //nombre de privilège que l'on va activer
    tpDebug.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; //action a faire, ici on veut activer le privilège donc SE_PRIVIEGE_ENABLED
    rLenght := 0;
    tpPDebug := tpDebug;
    AdjustTokenPrivileges(hToken, False, tpDebug, SizeOf(tpDebug), tpPDebug, rLenght);
    //on active le privilege de debug (SE_DEBUG_NAME) , adjusttokenprivileges rempli tpPDebug avec l'ancien privilège
    Result := GetLastError = ERROR_SUCCESS; //la condition est vérifiée si tout s'est bien passé

    CloseHandle(hToken); //on ferme le handle hToken
end;
[...]

Conclusion :


//ZIP

wExplorer

Codes Sources

A voir également

Ajouter un commentaire Commentaires
kernel2007 Messages postés 7 Date d'inscription samedi 18 novembre 2006 Statut Membre Dernière intervention 22 novembre 2006
18 nov. 2006 à 19:13
Salut ,je suis débutant en matiere de programmation et je travail sur un projet,mais il y a un probléme qui m'intrigue
est ce que vous pouvez m'aider ladsus
le probléme se résume comme suit :
j'ai le nom et le nom de classe d'un window parent d'une application extérne alors j'ai obtenu son handle par la fonction
Findwindow
mais le probléme est comment obtenir le handle de child window tout en sachant le nom et le nom de classe de ce window (child) et que la fonction FindwindowEx n'est pas supporté par windows NT et XP sur lequel je travail
alors comment on fait pour obtenir ce handle ?
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
10 juil. 2005 à 05:51
C'est quand même plus joli en C, tous ces appels d'API :)
cs_MasterHack Messages postés 586 Date d'inscription jeudi 18 septembre 2003 Statut Membre Dernière intervention 13 février 2008 2
4 juil. 2005 à 01:31
pas mal du tout,Merci a toi ;)
taye78 Messages postés 106 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 13 janvier 2007
3 juil. 2005 à 16:23
haha 8)
cs_Alain Proviste Messages postés 908 Date d'inscription jeudi 26 juillet 2001 Statut Modérateur Dernière intervention 1 février 2015 2
3 juil. 2005 à 15:31
code très bien commenté !
néanmoins j'aurais apprécié de voir apparaitre :
" obtenir un manipulateur sur le jeton processus hProcess "

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.