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

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

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.