Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Windows]: process_iter will sometimes return a WindowsError: The operation completed successfully: (originated from NtWow64ReadVirtualMemory64) #1839

Closed
dusans opened this issue Sep 30, 2020 · 1 comment · Fixed by #1888

Comments

@dusans
Copy link

dusans commented Sep 30, 2020

Windows

  • Windows 10 1909 (64 bit) (OS Build 18363.1082)
  • psutil version: 5.6.3
  • Python 2.7 32 bit

Bug description
psutil.process_iter will sometimes return a WindowsError.

Test script

import os
import psutil


def get_pids(name, cmdline_param=None):
    "Return a list of processes pids matching 'name'."
    ls = []
    for p in psutil.process_iter(attrs=["name", "exe", "cmdline"]):
        if (name == p.info['name']
                or p.info['exe'] and os.path.basename(p.info['exe']) == name
                or p.info['cmdline'] and p.info['cmdline'][0] == name):
            if (cmdline_param is None
                    or p.info['cmdline'] and cmdline_param in " ".join(p.info['cmdline'])):
                ls.append(p.pid)
    return ls


for i in range(10000):
    print i, get_pids("some_gui.exe")
    print i, get_pids("pythonw.exe", "some_gui.pyw")

Traceback

2294 []
2294 []
2295

Traceback (most recent call last):
  File "test_get_pids.py", line 19, in <module>
    print i, get_pids("some_gui.exe")
  File "test_get_pids.py", line 8, in get_pids
    for p in psutil.process_iter(attrs=["name", "exe", "cmdline"]):
  File "lib\site-packages\psutil\__init__.py", line 1566, in process_iter
    yield add(pid)
  File "lib\site-packages\psutil\__init__.py", line 1543, in add
    proc.info = proc.as_dict(attrs=attrs, ad_value=ad_value)
  File "lib\site-packages\psutil\__init__.py", line 638, in as_dict
    ret = meth()
  File "lib\site-packages\psutil\__init__.py", line 790, in cmdline
    return self._proc.cmdline()
  File "lib\site-packages\psutil\_pswindows.py", line 718, in wrapper
    raise convert_oserror(err, pid=self.pid, name=self._name)
  File "lib\site-packages\psutil\_pswindows.py", line 708, in convert_oserror
    raise exc
WindowsError: [Error 0] The operation completed successfully: '(originated from NtWow64ReadVirtualMemory64)'
Traceback (most recent call last):
  File "test_get_pids.py", line 19, in <module>
    print i, get_pids("some_gui.exe")
  File "test_get_pids.py", line 8, in get_pids
    for p in psutil.process_iter(attrs=["name", "exe", "cmdline"]):
  File "lib\site-packages\psutil\__init__.py", line 1566, in process_iter
    yield add(pid)
  File "lib\site-packages\psutil\__init__.py", line 1543, in add
    proc.info = proc.as_dict(attrs=attrs, ad_value=ad_value)
  File "lib\site-packages\psutil\__init__.py", line 638, in as_dict
    ret = meth()
  File "lib\site-packages\psutil\__init__.py", line 790, in cmdline
    return self._proc.cmdline()
  File "lib\site-packages\psutil\_pswindows.py", line 718, in wrapper
    raise convert_oserror(err, pid=self.pid, name=self._name)
  File "lib\site-packages\psutil\_pswindows.py", line 708, in convert_oserror
    raise exc
WindowsError: [Error 998] Invalid access to memory location: '(originated from NtWow64ReadVirtualMemory64)'

Test results

Traceback (most recent call last):
  File "<string>", line 1, in <module>
NameError: name 'psutil' is not defined
@dusans dusans added the bug label Sep 30, 2020
@dusans
Copy link
Author

dusans commented Oct 9, 2020

Works with 64 bit and psutil 5.7.2

I have tested the same thing with 64 bit and psutil 5.7.2 and there was no such issue.

I think this might be a bug in the Windows 32 bit layer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants