2016-05-17 3 views
-1

У меня есть проблема с чтением командной строки указанного процесса непосредственно из PEB с помощью PowerShell. Я получаю данные PROCESS_BASIC_INFORMATION с помощью NtQueryInformationProcess.Командная строка процесса без WMI

# $proc - process handle 
if ($NtQueryInformationProcess(
    $proc, 0, $PROCESS_BASIC_INFORMATION, [Runtime.InteropServices.Marshal]::SizeOf(
    $PROCESS_BASIC_INFORMATION 
), [IntPtr]::Zero 
))) -eq 0) { 
    # pointer to RTL_USER_PROCESS_PARAMETERS 
    $ptr = [Runtime.InteropServices.Marshal]::ReadIntPtr($PROCESS_BASIC_INFORMATION.PebBaseAddress, 0x10) 
    # pointer to CommandLine field of structure above 
    $ptr = [Runtime.InteropServices.Marshal]::ReadIntPtr($ptr, 0x40) 
    # how to get CommandLine field (UNICODE_STRING structure)? 
} 

Все указатели правильно, но я не имею ни малейшего представления, как читать CommandLine поле с типом маршалом. Есть идеи?

+0

Этот образец не чувствует себя полным. А что такое '$ NtQuerInformationProcess'? '$' для переменных, а '()' для методов? –

+0

Прочитайте http://stackoverflow.com/help/mcve –

+0

Если у вас нет ответа на вопрос, не публикуйте его, пожалуйста. – kate

ответ

0

Несмотря на то, что в заголовке указано «без WMI», я бы по-прежнему рекомендовал WMI, поскольку его гораздо проще использовать. Ex. используя класс WMI Win32_Process.

Get-WmiObject -Class Win32_Process -Filter "ProcessID = '10708'" | Format-List ProcessID, Name, Path, Commandline 

ProcessID : 10708 
Name  : powershell.exe 
Path  : C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe 
Commandline : "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe" -version 2 
+0

Подпись: ** без WMI **. ** Я знаю, как найти CommandLine процесса с WMI, но я хочу получить тот же результат с WinAPI. – kate

+0

Извините, я этого не заметил. Я не могу понять, почему вы хотите WinAPI, когда WMI может упростить его для вас. WMI также доступен как локально, так и удаленно (при необходимости). Если вам не нужны накладные расходы WMI, вам также следует избегать PowerShell и использовать скомпилированный язык. –

+0

Во-первых, я не вижу принципиальной разницы в том, какой язык использовать. – kate

Смежные вопросы