Прочитать параметры запуска чужого процесса - VB

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, коллеги! Требуется подсказка вот в каком вопросе. Запускается процесс с именем "msaccess.exe" и ему при запуске передаются параметры типа : "C:\Program Files\PIMSlider\Start_SI.vbs" "C:\Program Files\TTT\ttt.mde" /bla_bla_bla Необходимо из другой программы найти этот процесс и прочитать путь к файлу ttt.mde. Процесс нахожу, далее :
Листинг программы
  1. Dim ntStatus As Long
  2. Dim objBasic As PROCESS_BASIC_INFORMATION
  3. Dim objFlink As Long
  4. Dim objPEB As Long, objLdr As Long
  5. Dim objBaseAddress As Long
  6. Dim bytName(260 * 2 - 1) As Byte
  7. Dim strModuleName As String, objName As Long
  8. Dim objCid As CLIENT_ID
  9. Dim objOa As OBJECT_ATTRIBUTES
  10. Dim hProcess As Long
  11. Dim lngRet As Long, lngReturn As Long
  12. objOa.Length = Len(objOa)
  13. objCid.UniqueProcess = dwProcessId ' здесь pid процесса access.exe
  14. ntStatus = NtOpenProcess(hProcess, PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, objOa, objCid)
  15. If hProcess = 0 Then
  16. GetProcessCommandLine = ""
  17. Exit Function
  18. End If
  19. ntStatus = NtQueryInformationProcess(hProcess, ProcessBasicInformation, VarPtr(objBasic), Len(objBasic), ByVal 0&)
  20. If (NT_SUCCESS(ntStatus)) Then
  21. objPEB = objBasic.PebBaseAddress
  22. lngRet = ReadProcessMemory(hProcess, ByVal objPEB + &H10, objLdr, 4, ByVal 0&)
  23. If lngRet <> 1 Then Exit Function
  24. lngRet = ReadProcessMemory(hProcess, ByVal objLdr + &H44, objName, 4, ByVal 0&)
  25. If lngRet <> 1 Then Exit Function
  26. lngRet = ReadProcessMemory(hProcess, ByVal objName, bytName(0), 260 * 2, ByVal 0&)
  27. If lngRet <> 1 Then Exit Function
  28. strModuleName = bytName
  29. If InStr(strModuleName, """") = 0 Then
  30. strModuleName = Mid(strModuleName, InStr(strModuleName, Chr(0)) + 1, Len(strModuleName) - InStr(strModuleName, Chr(0)))
  31. Else
  32. strModuleName = Mid(strModuleName, InStr(strModuleName, """"), Len(strModuleName) - InStr(strModuleName, """"))
  33. End If
  34. strModuleName = Left(strModuleName & Chr(0), InStr(strModuleName & Chr(0), Chr(0)) - 1)
  35. GetProcessCommandLine = strModuleName
  36. End If
  37. CloseHandle hProcess
  38. End Function
В результате возвращается такая строка : "C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" -Embedding "C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" WinSta0\Default ????C:\Windows\SYSTEM32\ntdll.dll ????C:\Windows\system32 ?????#???#?? ????gnp?#?#? ? ?&?????# ?#?#?#? Где ж запрятана ссылка на базу ttt.mde, путь к которой передается процессу "msaccess.exe" как параметр? Прошу помощи

Решение задачи: «Прочитать параметры запуска чужого процесса»

textual
Листинг программы
  1. Sub Test()
  2. Dim objWMI As Object, objCollection  As Object, objApp  As Object
  3. Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
  4. Set objCollection = objWMI.ExecQuery("SELECT * FROM Win32_Process WHERE Name='excel.exe'")
  5. Select Case objCollection.Count
  6.     Case 1
  7.         Set objApp = GetObject(, "Excel.Application")
  8.         MsgBox objApp.ActiveWorkbook.Path & "\" & objApp.ActiveWorkbook.Name
  9.         Set objApp = Nothing
  10.     Case 0: MsgBox "Не найдено ни одного процесса."
  11.     Case Else: MsgBox "Найдено более одного процесса."
  12. End Select
  13. Set objCollection = Nothing
  14. Set objWMI = Nothing
  15. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы