Une approche gérée pour récupérer les processus parents dans .NET
L'obtention du processus parent dans le framework .NET nécessite souvent l'utilisation de la plate-forme Invoke (P / Invoke), l'introduction de complexités potentielles. Cet article présente une solution gérée, éliminant le besoin de p / invoquer et améliorer l'efficacité.
Utilisation d'une classe d'utilité personnalisée:
La solution utilise une classe personnalisée, ParentProcessUtilities
, pour récupérer les informations du processus parent sans recourir à un code non géré:
public struct ParentProcessUtilities { public IntPtr PebBaseAddress; public IntPtr InheritedFromUniqueProcessId; }
PebBaseAddress
stocke l'adresse de bloc d'environnement de processus (PEB), et InheritedFromUniqueProcessId
contient l'ID unique du processus parent.
Récupération des informations du processus parent:
Le processus parent du processus actuel peut être obtenu en utilisant:
Process parentProcess = ParentProcessUtilities.GetParentProcess();
Alternativement, vous pouvez spécifier l'ID de processus ou gérer:
Process parentProcess = ParentProcessUtilities.GetParentProcess(processId); Process parentProcess = ParentProcessUtilities.GetParentProcess(processHandle);
Détails de l'implémentation: Tire de la mise à jour de l'API native Windows
Cette méthode utilise la fonction NtQueryInformationProcess
de l'API native Windows (NTDLL):
[DllImport("ntdll.dll")] private static extern int NtQueryInformationProcess(IntPtr processHandle, int processInformationClass, ref ParentProcessUtilities processInformation, int processInformationLength, out int returnLength);
En utilisant la classe d'informations de processus appropriée (0), la fonction remplit la structure ParentProcessUtilities
avec les données requises. L'objet de processus parent est ensuite récupéré à l'aide de l'ID de processus hérité.
Cette approche gérée offre une alternative plus propre et plus efficace à P / Invoke, particulièrement bénéfique dans les applications sensibles à la performance. Il fournit une méthode robuste et fiable pour identifier les processus parents dans l'environnement .NET.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!