Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Creat0R, не пойму зачем EnumProcessModules, и без нее вроде работает...
Код: Выделить весь код
$sProcess  = "svchost.exe"
$sFilePath = _WinAPI_ProcessGetFilePath($sProcess)
If @error Then Exit MsgBox(16, "Ошибка", "код ошибки:"&@TAB& @error &@CRLF&"расширение:"&@TAB& @extended)
MsgBox(0, "Сообщение", "процесс:"&@TAB& $sProcess &@CRLF&"путь:"&@TAB& $sFilePath)

Func _WinAPI_ProcessGetFilePath($process)
    $process = ProcessExists($process)
    If $process =0 Then Return SetError(1, 0, "") ; ОШИБКА: процесс не найден
    ; Открытие процесса
    Local $aRet = DllCall('kernel32.dll', 'ptr', 'OpenProcess', _
        'int', BitOR(0x400,0x10), 'int', 0, 'int', $process)
    Local $hProc = $aRet[0], $tFilePath = DllStructCreate("char[300]")
    If $aRet[0]=0 Then
        $aRet = DllCall('kernel32.dll', 'int', 'GetLastError')
        Return SetError(2, $aRet[0], "")          ; ОШИБКА открытия процесса
    EndIf
    ; Получение пути к файлу образа
    $aRet = DllCall("Psapi.dll", "dword", "GetModuleFileNameExA", _
        "ptr", $hProc, "ptr", 0, "ptr", DllStructGetPtr($tFilePath), "dword", 300)
    If $aRet=0 Then
        $aRet = DllCall('kernel32.dll', 'int', 'GetLastError')
        Return SetError(3, $aRet[0], "")          ; ОШИБКА получения имени
    EndIf
     ; Закрытие описателя и возврат значения
    DllCall('kernel32.dll','ptr', 'CloseHandle','ptr', $hProc)
    Return DllStructGetData($tFilePath, 1)
EndFunc ;==> _WinAPI_ProcessGetFilePath

Последний раз редактировалось amel27, 17-04-2009 в 11:13.

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:17, 17-04-2009 | #4