|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Response to Serotek's mirror driver document2007-03-14Response to Serotek's mirror driver documentRecently, a document titled, "The Facts About Mirror Drivers in Assistive Technology" was brought to my attention. This document was co-authored by Matt Campbell and Mike Calvo from Serotek. Unfortunately the document was written as an advertising technique interspersing fact with fiction, smoke and mirrors. This document has gained some attention because of the scare tactics employed. I plan on using my experience (over 25 years worth) in the assistive technology community and strong relationship with Microsoft over most of this time to clear up the fact from fiction. There are so many things that caught my attention while reading this document it is hard to know where to begin. I hope to cover all the issues. However, the biggest thing that caught my attention was the omission of the technique actually used by System Access. Knowing a great deal about screen readers, I made a guess at what they must be doing. We verified this using a demonstration version of their software. After confirming my guess was correct, I now understand why no specifics were mentioned. They used terms such as “emerging alternative techniques” which of course sounds impressive. I want to first start by examining these techniques they are using and then comparing them with what serious AT products are using along with Microsoft’s full support. System Access is not using an emerging technique. In fact this technique they are now using was used by Window-Eyes 1.0 under Windows 3.1x and even used by Window-Eyes 5.5 under Windows 9x/Me. The approach used is called API hooking. Basically, the application is hooking or patching Windows itself on the fly which means when their application is launched it hooks into the operating system. This is where you find, for example, the location where an application would send text to be displayed on the screen. You then insert a bit of your own code into that location which in turn causes the execution to temporarily jump to your own code first. This allows you to see the information before Windows gets a chance to fully process the information. Once you've had your look at the data, you simply call back to the original location you hooked into. To call this an emerging technique and imply this is the future is completely false and deceptive. In fact I remember reading a white paper written by Microsoft’s Greg Lowney back in the late 80’s discussing this exact technique. Greg was the sole accessibility person at Microsoft at that time. He, along with other Microsoft engineers, came up with this approach in order to make Windows 3.1X accessible to screen readers. As mentioned, we used this API hooking for all of Windows 3.1x, 95, 98, and Me. Window-Eyes never used a display driver for those operating systems, though the document implies all screen readers did. Not only is API hooking not a new technology, it has many issues—which is why Window-Eyes is moving away from API hooking. Microsoft is also pushing AT products to stop using API hooking, mainly because of security. Let me outline some of the issues:
Companies who truly understand the AT landscape know that the window of opportunity for API hooking is closing, and those of us who are still using them are actively looking for ways to reduce our reliance on them for all the reasons listed above. Yes, I did say “us.” Most screen readers and screen magnifiers still implement API hooking even under Vista, including Window-Eyes. However, we are becoming less and less dependent on API hooking with each release as we continue to work with Microsoft on long term solutions. Now, obviously, API hooking is encouraging given that you’ve seen the benefits. For example, the ability to hook on the fly (meaning when your product is launched) does make for impressive demos. Some people may see my 8 bullet points as using the same scare tactic employed by the original document, so let’s look at Windows Vista. It was stated that entrenched assistive technology products (got to love that phrase) require administration rights to install their mirror driver, which is very true. But they imply that you don’t need administrative rights when API hooking is used. That is not true. What is interesting about Windows Vista, is if you need support for the User Account Control (UAC) dialog, or any secure desktop for that matter, you must either be registered with the new Ease of Access option or install a service to basically do what Ease of Access does. However, in order to be registered with Ease of Access or install a service, you must have admin rights. This is a perfect example of the misleading statements in the original document. It also shows that Microsoft is serious about security and isn’t allowing an application to do anything they want without administration rights. So now that we know what technique Serotek is using, and the limitation it imposes, and the fact that Microsoft is strongly encouraging AT products to stop API hooking, lets look at what Window-Eyes is using. Window-Eyes uses a host of techniques to get access to your Windows applications. There isn’t just one technique that works. All the techniques are used together to get the job done. This is why Window-Eyes works the best out of the box with most Windows applications. The following are just a few techniques that are commonly used:
Hopefully that gives you an idea of the major techniques currently employed in Window-Eyes and most serious screen readers. I need to spend some time discussing mirror drivers, and discussing many of the scare tactics discussed about mirror drivers. Before doing this, I would like to talk about the history of Vista development. For the first time, Microsoft has kept the AT community well informed regarding the major changes in Vista. GW Micro, along with other AT companies, traveled to Microsoft several times. We worked with Microsoft to make sure that legacy applications as well as new technology applications using the new benefits of Windows Vista remained supported. It is only because of our active involvement that Vista is accessible today. Having Window-Eyes ship on the day Vista shipped is proof that we have been working hard with Microsoft. One of the turning points with Windows Vista accessibility support was back in January 2006. Microsoft offered a two week porting lab for all major AT companies. I don’t know why, but Serotek did not attend this porting lab. In fact, GW Micro was the only screen reader vendor that took this porting lab seriously. We sent two of our top programmers along with myself to Redmond for the entire two weeks. This commitment was unmatched by any other screen reader developer. This commitment paid off as by the end of the two weeks we had Window-Eyes running giving basic Vista support using the Microsoft documented mirror driver approach. This commitment continued and allowed us to have the first full featured screen reader support on the day Vista shipped. This initial release didn’t require any Vista features to be disabled. This was history in the making. It is true that mirror drivers have been around for a long time. Serotek’s continual use of “the Windows 2000 display driver model” terminology is calculated to make a psychological point. Even Microsoft calls it the XP display driver model. The choice of Windows 2000 is puzzling. Mirror drivers did exist in Windows 2000; however, this technology has evolved. In fact, under Windows 2000 Microsoft encouraged AT products to use the mirror driver approach instead of the pre-DCM video driver hooking. However, the mirror drivers didn’t have the necessary information required so they were not used by the AT community. Only with the release of Vista did Microsoft resolve the holes in mirror drivers making them usable for AT purposes. Why would Microsoft put time and money into developing mirror driver technology if they didn’t feel is was the solution for Windows Vista? Don’t get me wrong; I also don’t believe that mirror drivers are the long term solution. Just as I don’t believe MSAA is the long term solution. As operating systems and application developers continue to innovate, new accessibility techniques are needed to keep up. Of course what Serotek didn’t mention is that API hooking is already outdated and strongly discouraged by Microsoft. The computer industry is too volatile to expect to say we have a technology that will last forever. But let me go point by point through some of what I consider misinformation regarding mirror drivers.
Now, I’m not saying everything stated in the document is false. As was stated, there currently are no applications that directly support DWM, but, when there are, the mirror driver will not help those applications. But what wasn’t stated is API hooking as used by Serotek also won’t work with those applications. We are all going to have to use the new accessibility interfaces that were built in to WinFX through the cooperation of Microsoft and mainstream AT vendors. I apologize for the technical nature of this reply. I tried to keep it as readable as possible yet expose the scare tactics and misleading information used to promote one product over another. Window-Eyes is not entrenched to any technology. As stated, Window-Eyes 1.0 started with API hooking as Serotek is using today, but we learned with experience and a close relationship with Microsoft that this is not a good long term solution. That’s why, with our first version of Window-Eyes for Windows 2000, we switched to using a display driver. We then convinced Microsoft that each AT vendor writing their own video driver was not a good experience for the end user. With the aid of a few AT vendors, and Microsoft, we came up with the DCM specifications, which Microsoft contracted GW Micro to write. We then switched to using DCM. With the release of Vista we switched to using the better mirror driver approach. If we were entrenched with one way, why have we adjusted to the drastically different approaches over time? I have no doubt we’ll move on to other techniques leaving mirror drivers behind. But I can guarantee that approach won’t be the out-dated API hooking method Serotek is so proud of. We are a company that puts our sights on the future and have the rock solid base required to make core development changes as needed, which we proved with the release of Vista. We will continue to work with Microsoft to ensure Vista remains accessible as well as all future operating systems. Comments, Pingbacks:
Comment from: Darragh [Visitor]
Very well written. I do however have a question and excuse me if it is very simplistic however how does Nerrator work when Aero is enabled?
I'll probably a post a link to this on www.digitaldarragh.com
Narrator has no OSM (Off screen model). They only work with standard controls or controls implementing MSAA. It may have some UIA support but I'm not sure how much. Narrator is very limited in what it can do partly because it has no OSM. So without an OSM it does no API hooking and has no need for a video driver. This is why it works with Aero.
Comment from: Josh de Lioncourt [Visitor]
Thanks for the reply. I've been looking forward to reading your response to that article for quite some time. GW Micro's willingness to deal with these sorts of issues is just one more reason why I am a proud and happy supporter of your products. Keep it up.
I really appreciated your blogg. It's really gratifying to see such personable interest and interaction with your customers. I'm running boht JFW and WE on my new Vista machine. Window Eyes development for Vista is much further ahead then JFW. You may just hook me yet!
Cheers...rocker
Comment from: Stephen Clower [Visitor]
Very well written. I am thrilled to see such a willingness from GW Micro to stay in touch with its users and respond accurately and fairly to misleading information. I look forward to more fascinating articles in this blog.
Cheers, Steve
Won't API hooking end up using more ram since each application has to be patched?
To Mohaned Sayegh:
The amount of extra ram an API-hook is using is neglible. Comment on the article: I find these 2 articles, this one and the one it refers to, to not be much more than 2 companies trying to look the better choice for visually disabled persons. Both use rumors, scare-tactics and crystal-balls to get their point through. But what BOTH papers are severly lacking is WHY they haven't started using the UIA. This paper clearly states that it should be easy for them to implement support for it, and having been working closely with MS, why haven't this cooperation led to them using UIA? Simple answer: UIA is managed, while ALL current screen-readers are written in umanaged code. For current SR's to take advantage of UIA they would either have to write a bridge to managed code, OR rewrite their whole SR. The discussion mirror-drivers vs. api-hooking is a rather unintersting discussion for users of SR. As both papers claim of the opposing technology, they are ancient and BOTH should be considered in a phase-out for later versions of Windows. Another point with managed code: It is much easier to write a bridge FROM managed to unmanaged code, then it is the other way around. A clever company would have started the shift towards managed a LONG time ago. Something the current SR software have chosen not to do. They would rather argue what ancient technology is the better...go figure...
I know this blog post is old by now, however I'm wondering if Doug or anybody else at GW-Micro can comment on Mr. Finnoy about managed vs. unmanaged screen reading?
What is WE's approach to this? Leave a comment:
|
Archive
SearchMisc |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
© GW Micro, Inc. All Rights Reserved. GW Micro, Inc. 725 Airport North Office Park Fort Wayne, IN 46825Ph: 260-489-3671 Fax: 260-489-2608 www.gwmicro.com sales@gwmicro.com support@gwmicro.comHours: M-F, 8a-5p, EST |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||