Heim > Backend-Entwicklung > C++ > Wie bekomme ich den übergeordneten Prozess in .NET, ohne P/Invoke zu verwenden?

Wie bekomme ich den übergeordneten Prozess in .NET, ohne P/Invoke zu verwenden?

Linda Hamilton
Freigeben: 2025-01-28 05:12:10
Original
438 Leute haben es durchsucht

How to Get the Parent Process in .NET Without Using P/Invoke?

<.> Holen Sie sich den übergeordneten Prozess im .NET, kein P/Invoke

Das Erhalten des übergeordneten Prozesses in .NET ist eine gemeinsame Aufgabe, die mit Plattformaufrufen (P/Invoke) implementiert werden kann. In diesem Artikel wird jedoch eine Alternative eingeführt, die P/Invoke nicht verwenden muss.

Diese Lösung verwendet die NTQueryInformationProcess -Funktion in der Bibliothek von Ntdll.dll, interagiert jedoch nicht direkt über P/Invoke, sondern verwendet die Klasse der Elternprozessilities, um den Prozess abstrahieren.

ParentProcessutilities -Klassen enthalten statische Methoden wie GetParentProcess, die eine Instanz der Procestess -Klasse akzeptiert, die die Prozesse des übergeordneten Prozesses angibt.
[StructLayout(LayoutKind.Sequential)]
public struct ParentProcessUtilities
{
    // 这些成员必须与PROCESS_BASIC_INFORMATION匹配
    internal IntPtr Reserved1;
    internal IntPtr PebBaseAddress;
    internal IntPtr Reserved2_0;
    internal IntPtr Reserved2_1;
    internal IntPtr UniqueProcessId;
    internal IntPtr InheritedFromUniqueProcessId;
}
Nach dem Login kopieren

ntQueryInformationProcess -Funktion zum Abrufen der grundlegenden Informationen des angegebenen Prozesses, einschließlich der Vererbungsprozess -ID. Durch Abfragen dieser Informationen und der Konvertierung in eine Prozessinstanz können diese Lösung den übergeordneten Vorgang im Hosting -Code ohne Verwendung von P/Invoke problemlos abrufen.
public static Process GetParentProcess(IntPtr handle)
{
    ParentProcessUtilities pbi = new ParentProcessUtilities();
    int returnLength;
    int status = NtQueryInformationProcess(handle, 0, ref pbi, Marshal.SizeOf(pbi), out returnLength);
    if (status != 0)
        throw new Win32Exception(status);

    try
    {
        return Process.GetProcessById(pbi.InheritedFromUniqueProcessId.ToInt32());
    }
    catch (ArgumentException)
    {
        // 未找到
        return null;
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie bekomme ich den übergeordneten Prozess in .NET, ohne P/Invoke zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage