nvaccess / nvda

NVDA, the free and open source Screen Reader for Microsoft Windows
Other
2.06k stars 625 forks source link

ESET NOD32 Antivirus 9 does not have full NVDA support #6016

Open herodees opened 8 years ago

herodees commented 8 years ago

Currently I am working on accessibility support for ESET software, and I discovered a problem that I can not solve. I finish support for MS Narrator and YAWS (It seems that in these cases works well ), but NVDA still not cooperating. I'm not sure if it is a result of the lack interface or a different philosophy in Sciter library (Embeddable HTML/CSS/script engine which we use). I have some experience with MSACC, but not expert level, so I would really appreciate some help with pointing to problem. Would you be willing to help me with the identified, what is wrong in the implementation of the ESET MSACC?

jcsteh commented 8 years ago

Hi. It'd be great if you could first provide a summary of what doesn't work with NVDA and how it works with Narrator/JAWS. Please be as specific as possible; e.g. steps you took, what you expected and what happened instead. Thanks.

herodees commented 8 years ago

NVDA OS: Win10 x64 Preconditions: Product installed,activated (NOD32 Antivirus 9) Product installed (NVDA 2016.1) Steps for repeating: Open product NVDA reads the main application window Press TAB NVDA goes silent Problem: Tab focus should be detected and interpreted as an action for reading Expected behavior: Each keypress, read the active element Repeatability: 100%

MS Narrator OS: Win10 x64 Preconditions: Product installed,activated (NOD32 Antivirus 9) MS Narrator active Steps for repeating: Open product MSNrr reads the active element Press TAB MSNrr reads the active element Problem: No problem Expected behavior: Each keypress, read the active element Repeatability: 100%

More info: Each change of focus state is notified as   NotifyWinEvent (EVENT_OBJECT_FOCUS, hWnd, OBJID_CLIENT, 0x8FFFFFFF);

Main window focus is notified as NotifyWinEvent(EVENT_OBJECT_FOCUS, hWnd, OBJID_CLIENT, CHILDID_SELF);

Here is the interface that we have a list of methods that we do not provide html::accessible::accDoDefaultAction html::accessible::accessible html::accessible::accHitTest html::accessible::accLocation html::accessible::accNavigate html::accessible::accSelect DISP_E_MEMBERNOTFOUND html::accessible::get_accChild html::accessible::get_accChildCount html::accessible::get_accDefaultAction html::accessible::get_accDescription html::accessible::get_accFocus DISP_E_MEMBERNOTFOUND html::accessible::get_accHelp html::accessible::get_accHelpTopic html::accessible::get_accKeyboardShortcut html::accessible::get_accName html::accessible::get_accParent html::accessible::get_accRole html::accessible::get_accSelection DISP_E_MEMBERNOTFOUND html::accessible::get_accState html::accessible::get_accValue html::accessible::put_accName DISP_E_MEMBERNOTFOUND; html::accessible::put_accValue DISP_E_MEMBERNOTFOUND;

Let me know if you need something more specific, and thanks for your quick reply

Adriani90 commented 5 years ago

@herodees how is it with the last version of the antivirus and NVDA 2018.4.1? Is it better now?

francipvb commented 5 years ago

@herodees how is it with the last version of the antivirus and NVDA 2018.4.1? Is it better now?

Hello,

No, NVDA doesn't work with latest ESET products versions.

I will upload a log chunk in a moment.

francipvb commented 5 years ago

Please see this chunk:

DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._get_IAccessibleRole (06:59:52.407):
accRole failed: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))
IO - speech.speak (06:59:52.486):
Speaking [u'ESET Internet Security']
IO - speech.speak (06:59:52.486):
Speaking [u'unknown']
IO - speech.speak (06:59:52.490):
Speaking [u'unknown']
IO - inputCore.InputManager.executeGesture (06:59:55.055):
Input: kb(desktop):tab
DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._get_IAccessibleRole (06:59:55.072):
accRole failed: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))
DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._get_IAccessibleRole (06:59:55.072):
accRole failed: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))
IO - speech.speak (06:59:55.072):
Speaking [u'unknown']
IO - inputCore.InputManager.executeGesture (06:59:55.447):
Input: kb(desktop):tab
DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._get_IAccessibleRole (06:59:55.467):
accRole failed: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))
DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._get_IAccessibleRole (06:59:55.477):
accRole failed: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))
IO - speech.speak (06:59:55.477):
Speaking [u'unknown']
IO - inputCore.InputManager.executeGesture (06:59:57.260):
Input: kb(desktop):NVDA+f1
DEBUGWARNING - NVDAObjects.IAccessible.IAccessible._get_IAccessibleRole (06:59:57.276):
accRole failed: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))
INFO - globalCommands.GlobalCommands.script_navigatorObject_devInfo (06:59:57.377):
Developer info for navigator object:
name: None
role: ROLE_UNKNOWN
states: 
isFocusable: False
hasFocus: False
Python object: <NVDAObjects.IAccessible.IAccessible object at 0x05DFA490>
Python class mro: (<class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <type 'object'>)
description: None
location: None
value: None
appModule: <'appModuleHandler' (appName 'egui', process ID 13624) at address 60c59b0>
appModule.productName: u'ESET Security'
appModule.productVersion: u'12.1.34.0'
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 328628
windowClassName: u'EsetBaseWindow'
windowControlID: 0
windowStyle: 1442906112
extendedWindowStyle: 0
windowThreadID: 4904
windowText: u''
displayText: exception: 'NoneType' object is not iterable
IAccessibleObject: <POINTER(IAccessible) ptr=0x795ae0 at 5b70e90>
IAccessibleChildID: -1894162080
IAccessible event parameters: windowHandle=328628, objectID=-4, childID=-1894162080
IAccessible accName: exception: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))
IAccessible accRole: exception: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))
IAccessible accState: exception: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))
IAccessible accDescription: exception: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))
IAccessible accValue: exception: (-2147024809, 'The parameter is incorrect.', (None, None, None, 0, None))

Cheers,

francipvb commented 5 years ago

CC @leonardder @feerrenrut @jcsteh

Have you any suggestion how to fix this?

herodees commented 5 years ago

Remote control of the product with NVDA has been evaluated by HIPS (Host-based Intrusion Prevention System) as a security risk, as it allows malware to compromise protection. If you want this option, you'll need to turn off self defence, what is not recommended.

Adriani90 commented 5 years ago

@Qchristensen haver there been any conversations with the guys from ESET to cathegorize NVDA as secure product? I guess the program cathegorizes NVDA as unsecure and that's maybe why NVDA does not work properly with this anti virus.

Qchristensen commented 5 years ago

I have written to ESET several times over the past year or so, without ever getting a reply. Perhaps @herodees can help with that?

Re remote control of ESET by NVDA, can you clarify what you mean? NVDA itself wouldn't make changes to ESET, but would simply read out the options the program presents to allow the user to choose which options to set. If this still works with Narrator and Jaws, can you perhaps confirm whether ESET sees them as "secure" in a way it does not see NVDA as secure?

And you mentioned you could get access with NVDA by turning off "self defence" - for the exercise, if you turn off that option, can NVDA then read the options and information presented by ESET?

Qchristensen commented 4 years ago

I had an email today from a user basically saying the same issue is still present. The main thing that catches my attention with this issue is that evidently it works with Narrator and Jaws but not NVDA:

I writ for report that the last version of the products ESET NOD32 Antivirus (version 13) and Eset Smart Security Premiun not work with NVDA, but Narrator work whit this products in Windows 8.1 and 10.

The installer is accessible with NVDA, but in the interface NVDA only says unknown, and read the contend with OCR and the revision. But in Windows 8.1 and 10, Narrator can work with this antivirus and is very accessible with the focus.

NVDA also have this problem with the addons disabled.

This is the information about the object (in the log with NVDA+f1):

INFO - globalCommands.GlobalCommands.script_navigatorObject_devInfo
(21:05:38.396) - MainThread (3716):
Developer info for navigator object:
name: None
role: ROLE_UNKNOWN
roleText: None
states:
isFocusable: False
hasFocus: False
Python object:
<NVDAObjects.Dynamic_ClipboardCommandAnnouncementIAccessible object at
0x04DF9AB0>
Python class mro: (<class
'NVDAObjects.Dynamic_ClipboardCommandAnnouncementIAccessible'>, <class
'globalPlugins.NVDAExtensionGlobalPlugin.clipboardCommandAnnouncement.ClipboardCommandAnnouncement'>,
<class 'NVDAObjects.IAccessible.IAccessible'>, <class
'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class
'documentBase.TextContainerObject'>, <class
'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>,
<class 'object'>)
description: None
location: None
value: None
appModule: <'appModuleHandler' (appName 'egui', process ID 4964) at
address 4df9230>
appModule.productName: 'ESET Security'
appModule.productVersion: '13.0.24.0'
TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'>
windowHandle: 918748
windowClassName: 'EsetBaseWindow'
windowControlID: 0
windowStyle: 1442906112
extendedWindowStyle: 0
windowThreadID: 5248
windowText: ''
displayText: exception: cannot unpack non-iterable NoneType object
IAccessibleObject: <POINTER(IAccessible) ptr=0x8179440 at 639b800>
IAccessibleChildID: -1620907846
IAccessible event parameters: windowHandle=918748, objectID=-4,
childID=-1620907846
IAccessible accName: exception: (-2147024809, 'El parámetro no es
correcto.', (None, None, None, 0, None))
IAccessible accRole: exception: (-2147024809, 'El parámetro no es
correcto.', (None, None, None, 0, None))
IAccessible accState: exception: (-2147024809, 'El parámetro no es
correcto.', (None, None, None, 0, None))
IAccessible accDescription: exception: (-2147024809, 'El parámetro no es
correcto.', (None, None, None, 0, None))
IAccessible accValue: exception: (-2147024809, 'El parámetro no es
correcto.', (None, None, None, 0, None))
herodees commented 4 years ago

I had an email today from a user basically saying the same issue is still present. The main thing that catches my attention with this issue is that evidently it works with Narrator and Jaws but not NVDA:

"I writ for report that the last version of the products ESET NOD32 Antivirus (version 13) and Eset Smart Security Premiun not work with NVDA, but Narrator work whit this products in Windows 8.1 and 10.

The installer is accessible with NVDA, but in the interface NVDA only says unknown, and read the contend with OCR and the revision. But in Windows 8.1 and 10, Narrator can work with this antivirus and is very accessible with the focus.

NVDA also have this problem with the addons disabled.

This is the information about the object (in the log with NVDA+f1):

INFO - globalCommands.GlobalCommands.script_navigatorObject_devInfo (21:05:38.396) - MainThread (3716): Developer info for navigator object: name: None role: ROLE_UNKNOWN roleText: None states: isFocusable: False hasFocus: False Python object: <NVDAObjects.Dynamic_ClipboardCommandAnnouncementIAccessible object at 0x04DF9AB0> Python class mro: (<class 'NVDAObjects.Dynamic_ClipboardCommandAnnouncementIAccessible'>, <class 'globalPlugins.NVDAExtensionGlobalPlugin.clipboardCommandAnnouncement.ClipboardCommandAnnouncement'>, <class 'NVDAObjects.IAccessible.IAccessible'>, <class 'NVDAObjects.window.Window'>, <class 'NVDAObjects.NVDAObject'>, <class 'documentBase.TextContainerObject'>, <class 'baseObject.ScriptableObject'>, <class 'baseObject.AutoPropertyObject'>, <class 'object'>) description: None location: None value: None appModule: <'appModuleHandler' (appName 'egui', process ID 4964) at address 4df9230> appModule.productName: 'ESET Security' appModule.productVersion: '13.0.24.0' TextInfo: <class 'NVDAObjects.NVDAObjectTextInfo'> windowHandle: 918748 windowClassName: 'EsetBaseWindow' windowControlID: 0 windowStyle: 1442906112 extendedWindowStyle: 0 windowThreadID: 5248 windowText: '' displayText: exception: cannot unpack non-iterable NoneType object IAccessibleObject: <POINTER(IAccessible) ptr=0x8179440 at 639b800> IAccessibleChildID: -1620907846 IAccessible event parameters: windowHandle=918748, objectID=-4, childID=-1620907846 IAccessible accName: exception: (-2147024809, 'El parámetro no es correcto.', (None, None, None, 0, None)) IAccessible accRole: exception: (-2147024809, 'El parámetro no es correcto.', (None, None, None, 0, None)) IAccessible accState: exception: (-2147024809, 'El parámetro no es correcto.', (None, None, None, 0, None)) IAccessible accDescription: exception: (-2147024809, 'El parámetro no es correcto.', (None, None, None, 0, None)) IAccessible accValue: exception: (-2147024809, 'El parámetro no es correcto.', (None, None, None, 0, None))"

We are preparing NVDA support in the near future. Our main focus was to prepare a basic accessibility interface, but we didn't have enough time to investigate why NVDA has different behavior from JAWS and Narrator. In the worst case, we will prepare a custom addon, but I hope it won't be necessary.

josephsl commented 4 years ago

Hi, hmmm, whoever gave you that info didn’t restart with add-ons off. If this happens with add-ons off, chances are that it might be something to do with UI access privilege. A possible alternative might be forcing NVDA to treat controls in this app as UIA objects, but in order to make it work effectively, UIA info must be exposed correctly by the app itself. Thanks.

Adriani90 commented 11 months ago

@herodees it seems NVDA is still treated differently than others, I can use the Antivirus right after the installation process and the elements are recognized by NVDA. How ever, as soon as the automatic system scan starts directly after the installation, NVDA does not work anymore with the antivirus at all. In only reports "unknown" on every tab press. It's like it doesn't allow any interaction with the accessibility APIs. Usually NVDA uses either MSAA, IAccessible2 or UIA to access information on the screen.

I was testing with NVDA 2023.2 and Eset NOD32 antivirus 2023.

Adriani90 commented 11 months ago

I wonder if there is a COM DLL for this software registered in Windows after Installation?

Adriani90 commented 4 months ago

@herodees the interface is accessible with NVDA, but a blind person will not be able to turn off the self defence if NVDA is not allowed to access the controls via the accessibility API. This issue is still reproducible with NVDA 2024.1 in Eset NOD32 17.1.9. I don't know how HIPS (Host-based Intrusion Prevention System) really checks the security risks, but I wonder why they didn't find the same issue for Jaws or Narator which use exactly the same technology behind reading elements on the screen. Can you give some more details on this?

cc: @gerald-hartig