nvaccess / nvda

NVDA, the free and open source Screen Reader for Microsoft Windows
https://www.nvaccess.org/
Other
2.12k stars 637 forks source link

UAC breaks touch interaction. #13591

Open jticket1024 opened 2 years ago

jticket1024 commented 2 years ago

Steps to reproduce:

Disable UAC

Actual behavior:

Touch interaction support stops working.

Expected behavior:

Touch interaction should work either way.

System configuration

NVDA installed/portable/running from source:

Installed

NVDA version:

2021.3.5

Windows version:

Windows 11

Name and version of other software in use when reproducing the issue:

Other information about your system:

Other questions

Does the issue still occur after restarting your computer?

Yes

Have you tried any other versions of NVDA? If so, please report their behaviors.

If NVDA add-ons are disabled, is your problem still occurring?

Yes

Does the issue still occur after you run the COM Registration Fixing Tool in NVDA's tools menu?

Yes

lukaszgo1 commented 2 years ago

@jticket1024 Please set your log level to debug in general settings, open Python console with NVDA -Ctrl+_Z and paste the following exactly as shown:

import touchHandler
touchHandler.touchSupported(True)

After that upload your NVDA log here - be ware that at the debug level it contains all your key presses and all content spoken by NVDA so you may want to trim it.

seanbudd commented 2 years ago

@lukaszgo1 - This user is noting that NVDA's touch interaction is disabled on secure screens, such as the UAC dialog when running an application as administrator. I believe this is a feature of Windows, and there's nothing we can do about it.

You cannot open the python console on secure screens or capture debug logging without setting the serviceDebug parameter.

michaelDCurran commented 2 years ago

@jticket1024 I think we need some clarification here. I think what you mean is that touch no longer works if you set your UAC security level to 0 in Windows, so that elevating to admin no longer asks for permission before doing so. @seanbudd to my knowledge, touch interaction and audio ducking should function perfectly fine on secure screens, as NVDA is being run as system. If this is not the case, there is either an unknown bug in Windows or NVDA. Certainly touch interaction was expected to / must work on the Windows logon screen / User Account Control dialog.

seanbudd commented 2 years ago

Strangely, after setting the serviceDebug parameter, touch interaction works as expected in secure screens. This means it's an issue specifically in secure mode in secure screens.

jticket1024 commented 2 years ago

Yes, when setting UAC to zero, touch interaction stops working everywhere.

lukaszgo1 commented 2 years ago

@jticket1024 What about the log I asked you to collect in my last comment?

jticket1024 commented 2 years ago

I've pasted that in, and here's what I get. I've only copied the relevant bit that happens after I run that. Nothing else about touch is said. When UAC is turned on and enabled, touch interaction works just fine. The only thing in the log when UAC is set to 0 is: DEBUGWARNING - touchHandler.touchSupported (09:15:03.994) - MainThread (5284): NVDA doesn't have UI Access so touch isn't supported.

michaelDCurran commented 2 years ago

I believe that systemUtils.hasUIAccess() returns false if UAC is set to 0, because our process token does not seem to get TokenUIAccess if UAC is set to 0. To fix this, we will need to find a way of detecting that we already have admin / a high integrity level and don't actually require UIAccess.