Ist es möglich, die Startinformationen eines anderen laufenden Prozesses zu erhalten? Ich möchte herausfinden, die cmd Zeilenargumente, wenn es minimiert/maximiert ausgeführt werden sollte, starten Sie im Verzeichnis, führen Sie als Administrator usw.Get STARTUPINFO für gegebenen Prozess
Antwort
müssen Sie RTL_USER_PROCESS_PARAMETERS von Remote-Prozess lesen. Dies kann wie folgt durchgeführt werden:
NTSTATUS GetProcessParameters(PCLIENT_ID pcid, PUNICODE_STRING CommandLine)
{
HANDLE hProcess;
NTSTATUS status;
static OBJECT_ATTRIBUTES zoa = { sizeof(zoa)};
if (0 <= (status = ZwOpenProcess(&hProcess, PROCESS_VM_READ|PROCESS_QUERY_INFORMATION, &zoa, pcid)))
{
PROCESS_BASIC_INFORMATION pbi;
_RTL_USER_PROCESS_PARAMETERS ProcessParameters, *pv;
if (0 <= (status = ZwQueryInformationProcess(hProcess, ProcessBasicInformation, &pbi, sizeof(pbi), 0)))
{
if (
(0 <= (status = ZwReadVirtualMemory(hProcess, (_PEB*)&pbi.PebBaseAddress->ProcessParameters, &pv, sizeof(pv), 0)))
&&
(0 <= (status = ZwReadVirtualMemory(hProcess, pv, &ProcessParameters, sizeof(ProcessParameters), 0)))
)
{
if (ProcessParameters.CommandLine.Length)
{
if (CommandLine->Buffer = (PWSTR)LocalAlloc(0, ProcessParameters.CommandLine.Length + sizeof(WCHAR)))
{
if (0 > (status = ZwReadVirtualMemory(hProcess, ProcessParameters.CommandLine.Buffer, CommandLine->Buffer, ProcessParameters.CommandLine.Length, 0)))
{
LocalFree(CommandLine->Buffer);
}
else
{
CommandLine->MaximumLength = (CommandLine->Length = ProcessParameters.CommandLine.Length) + sizeof(WCHAR);
*(PWSTR)RtlOffsetToPointer(CommandLine->Buffer, ProcessParameters.CommandLine.Length) = 0;
}
}
else
{
status = STATUS_INSUFFICIENT_RESOURCES;
}
}
}
}
ZwClose(hProcess);
}
return status;
}
UNICODE_STRING CommandLine;
if (0 <= GetProcessParameters(&cid, &CommandLine))
{
DbgPrint("CommandLine=%wZ\n", &CommandLine);
LocalFree(CommandLine.Buffer);
}
Dies hilft nicht, STARTUPINFO zu bekommen, was die eigentliche Frage war. –
Suchen Sie bitte nach STARTUPINFO Feldern und RTL_USER_PROCESS_PARAMETERS Feldern - das ist fast gleich. wirklich STARTUPINFO ist gefüllt von RTL_USER_PROCESS_PARAMETERS – RbMm
Wahrscheinlich erwähnenswert, dass die Dokumentation sagt: "Die ZwQueryInformationProcess-Funktion und die Strukturen, die es zurückgibt, sind intern im Betriebssystem und unterliegen Änderungen von einem Release von Windows zu einem anderen. Um die Kompatibilität Ihrer Anwendung zu erhalten Es ist besser, stattdessen öffentliche Funktionen zu verwenden, die in der Beschreibung des Parameters ProcessInformationClass erwähnt werden. " – theB
- 1. Get alle DLLS für einen Prozess
- 2. Get label einer gegebenen dbpedia-Ressource
- 3. Get Eigenschaften einer gegebenen DBpedia Kategorie
- 4. Get Prozess-Speicher unter Windows
- 5. C++ Get Benutzername vom Prozess
- 6. Get (real) Vordergrund-Prozess mit activityManager.getRunningAppProcesses()
- 7. in PHP für gegebenen Bereich
- 8. android runtime.getruntime(). Exec() get Prozess-ID
- 9. Get Kommandozeile von Prozess und Taskkill
- 10. Get PID von Firefox Prozess ausgeführt
- 11. Linux-get-Prozess von Hintergrund und wieder
- 12. Actionscript - Methodenliste für einen gegebenen Klassennamen abrufen
- 13. Bash get Prozess-ID eines Prozesses begann in Subshell
- 14. Get-Prozess Befehl geben negativen Wert während Prozess auf einem Remote-Computer überwachen
- 15. Get Pincode allein für eine Breite/Länge
- 16. Knoten js get und set Daten aus verschiedenen Prozess
- 17. Prozess für CPU-Nutzung in Powershell erhalten
- 18. Wie Kill-Knoten-Prozess beim Töten für immer Prozess
- 19. Workflow Foundation für geplanten Prozess
- 20. Basic PHP-Prozess für HTML
- 21. Kernel-Stack für Linux-Prozess
- 22. Bester Seed für parallelen Prozess
- 23. Benötigte Zeit für einen Prozess
- 24. Iterate über Unterklassen einer gegebenen Klasse in einem gegebenen Modul
- 25. Docker-Stopp funktioniert nicht für Node-Prozess
- 26. Merging gegebenen Objekte
- 27. Get Bildschirmauflösung für UWP
- 28. Get label für Eingabefeld
- 29. Get CompletionBlock für CABasicAnimation
- 30. Get MethodInfo für Erweiterungsmethode
1. Code in den Zielprozess injizieren. 2. Rufen Sie 'GetStartupInfo()' und 'GetCommandLine()' aus dem Kontext des Zielprozesses auf. 3. Übergeben Sie die Daten an den ursprünglichen Prozess zurück. –
@ JonathanPotter danke für Ihren Kommentar. Der Zweck besteht darin, dem Benutzer die Möglichkeit zu geben, Prozesse (mit den richtigen Startup-Attributen) durch Klicken auf eine Schaltfläche zu starten. Das Injizieren von Code, um die richtigen Startup-Attribute zu bekommen, wäre von Antiviren-Programmen verdächtig/markiert, nicht wahr? –
@JakeM: Die Befehlszeile eines Prozesses kann abgerufen werden, ohne die Injektion zu verwenden, entweder durch [Lesen der PEB-Struktur des Prozesses] (http://stackoverflow.com/a/11042947/65863) oder mithilfe von [WMI] (https : //blogs.msdn.microsoft.com/oldnewthing/20091125-00/? p = 15923). –