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

Cross-process reading/writing of 64 bit memory #3339

Open
nvaccessAuto opened this issue Jul 7, 2013 · 8 comments
Open

Cross-process reading/writing of 64 bit memory #3339

nvaccessAuto opened this issue Jul 7, 2013 · 8 comments
Assignees
Labels
bug p3 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority

Comments

@nvaccessAuto
Copy link

Reported by tspivey on 2013-07-07 02:21
Sometimes, when running a 64-bit program such as Tween or TeamTalk, I get this error while trying to do something. In this case, reviewing the chat edit box in TeamTalk:

error executing event: gainFocus on <NVDAObjects.Dynamic_IAccessibleRichEdit20WindowNVDAObject object at 0x05AD5FF0> with extra args of {}
Traceback (most recent call last):
  File "eventHandler.pyo", line 136, in executeEvent
  File "eventHandler.pyo", line 84, in __init__
  File "eventHandler.pyo", line 91, in next
  File "NVDAObjects\behaviors.pyo", line 157, in event_gainFocus
  File "NVDAObjects\__init__.pyo", line 833, in event_gainFocus
  File "NVDAObjects\__init__.pyo", line 777, in reportFocus
  File "speech.pyo", line 328, in speakObject
  File "NVDAObjects\__init__.pyo", line 903, in makeTextInfo
  File "textInfos\offsets.pyo", line 279, in __init__
  File "NVDAObjects\window\edit.pyo", line 321, in _getStoryLength
  File "winKernel.pyo", line 95, in virtualAllocEx
WindowsError: [8](Error) Not enough storage is available to process this command.

Blocking #3534, #5442

@nvaccessAuto
Copy link
Author

Comment 1 by jteh on 2013-07-07 06:54
I imagine this will happen if the process can't allocate a 32 bit memory address, since NVDA is a 32 bit process and VirtualAllocEx can only handle 32 bit memory addresses for 32 bit processes. Replacing everything that uses this with in-process code is something I'd rather avoid doing. Hopefully, there's some way we can write our own VirtualAllocEx/ReadProcessMemory/WriteProcessMemory implementation that copes better with 64 bit processes.

@nvaccessAuto
Copy link
Author

Comment 2 by jteh on 2015-11-02 04:54
Changes:
Changed title from "WindowsError in VirtualAllocEx for 64-bit programs" to "Cross-process reading/writing of 64 bit memory"

@jcsteh
Copy link
Contributor

jcsteh commented Apr 3, 2017

We'll also need to implement our own in-proc SendMessage which can handle 64 bit values.

@Adriani90
Copy link
Collaborator

@tspivey are you still seeing this issue in NVDA 2019.1.1?

@Adriani90
Copy link
Collaborator

I guess this is not really an NVDA issue but rather a problem in your heap storage size atributed in your registry. This issue occurs with different applications if the size is too low. Are you by chance on Windows server? This issue is more common there.

@Adriani90
Copy link
Collaborator

@tspivey could you please test with NVDA 2020.1 RC1? See also my comments above. Thanks.

@feerrenrut
Copy link
Contributor

Possibly related (closed) PR: #8190

@LeonarddeR
Copy link
Collaborator

I opened #11745 to come up with an in proc implementation for syslistview32 column content. It was pretty easy to do it that way, but I agree, we'd better avoid doing in proc for every single case of this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug p3 https://github.com/nvaccess/nvda/blob/master/projectDocs/issues/triage.md#priority
Projects
None yet
Development

No branches or pull requests

6 participants