Windows Vista, STI and a Story about Customer Service


One of the most exciting things I’ve seen since I started to work at Microsoft is how open the development teams are to listening and helping our customers when a problem arises. One case in point took place over the past couple of weeks.


 


Without stating specifics, a customer wrote me (via this blog) and asked if Windows Vista would continue to support ANSI code. He explained that his company produces a well-known imaging product that makes calls to the STI functions. (STI, or Still Image, is part of the Graphics and Multimedia APIs and provides a means of programmatically acquiring digital still images from cameras.)  Evidently, his application calls the StiCreateInstanceA function directly and while it works on Windows XP, they found that deploying and attempting to run the application on Windows Vista resulting in an (“Entry Point not Found”) error.


 


Now obviously, Windows Vista would have the shelf-life of a tsetse fly if it were not to support the countless ANSI applications in existence today. After some debugging with the customer, we determined that the XP version of the STI.DLL (5.1) was different than the Windows Vista version (6.0.5) and that his application works when he replaces the Windows Vista DLL with the XP version.


 


Therefore, this was definitely not a Windows Vista issue and I needed to communicate with the STI team. Armed with this information, I contacted the PM (Program Manager) for the STI team and, after a few back-and-forth emails, I learned that the ANSI versions of the STI functions were never originally supposed to ship with STI and were only discovered during code analysis. Once they were discovered, they were not removed, but they were never documented. In fact, the STI.H header file redefines StiCreateInstance as StiCreateInstanceW (Unicode) so that no one accidentally calls the undocumented StiCreateInstanceA (ANSI) version.


 


So how then did the customer call it? Evidently the customer’s programmer (for reasons unknown) explicitly called the StiCreateInstanceA function instead of converting the parameters to wide char so that the Unicode version could be used. I politely explained the situation to the customer and they were very cool with the globally acknowledged situation that if you use undocumented functions, you do so at your own risk.


 


However, Windows SDK PM Brent Rector made a great point. While we didn’t technically “document” the function in terms of formal documentation on MSDN, we as a company implicitly documented it by releasing it to the public in such a way that developers could make use of it and become dependent on it. At that point, I spoke to the STI PM and Lead Developer who listened to my advocacy on the part of the customer and were very open to at least considering putting the ANSI functions back. They asked that I create a bug in our internal database to track the issue and get feedback from other STI team members.


 


Will the ultimate resolution be to return the APIs. Honestly, I doubt it. First, this is the only customer that has even brought this issue up. Second, the customer has stated that this only impacts a very small piece of code and he’s migrating to full Unicode anyway. However, the key point here was that we could have easily blown the customer off with the standard reply of, “You used undocumented functions. Sorry, but we can’t help you.”, and the customer would have been cool with that. However, several people stepped up to not only ensure that we gave an acceptable answer, but that we did everything we could to do right by our customer.


 


 

Comments (18)

  1. graham_heather@hotmail.com says:

    It would be nice if you chose an example of you being responsive to a mistake made by your own company.  To make an example of you being responsive by saying that the customer did something he should not have done just comes accross as being self congratulatory.  Whilst I don’t understand the technology you describe, you do appear to be saying that what the customer did on XP (the current standard Windows) would not work on Vista, the new Windows, and whether the call made by the customers programmer was on something documented or undocumented, the concept of reverse compatability should have been maintained.

    Saying that the XP STI.DLL  (5.1) supported something which the Vista version (6.0.5) did not seems very much to be a Vista issue, how can you say that it is not?

    To say about the programmer ‘(for reasons unknown)’ implies that he was incorrect in writing something for XP which could not subsequently be read by Vista but I take the view that if he wrote something that worked in XP he did so because he could, and because it worked, and he therefore should be able to do the same with the next generation of Windows.

    I work on development of a DOS database for my own use which still works very well for me so the subject of reverse compatability is one very dear to my own heart.

  2. Wil says:

    **This** customer might have been satisified had you just blown him off with a "You use undocumented features at your own risk", but who knows how many other users would eventually have been making that same call and losing sleep over why things weren’t working?  If it shows up in a header file that programmers read, people will use it.  You made the right call in treating it as you did.

  3. tomarcher says:

    [Graham] It would be nice if you chose an example of you being responsive to a mistake made by your own company.  

    [Tom] It wasn’t my intention to go around looking for examples. This situation happened and I was pleased with how open dev was to going outside the typical response and I wanted to call that out.

    [Graham] To make an example of you being responsive by saying that the customer did something he should not have done just comes accross as being self congratulatory.  

    [Tom] How am I congratulating myself? This had nothign to do with me other than I’m pleased that dev was more open to at least looking at the customer’s issue than I had thought they would be.

    [Graham] Whilst I don’t understand the technology you describe, you do appear to be saying that what the customer did on XP (the current standard Windows) would not work on Vista, the new Windows, and whether the call made by the customers programmer was on something documented or undocumented, the concept of reverse compatability should have been maintained.

    [Tom] All devs realize the risk in using undocumented code. Even the company’s owner said that he didn’t expect us to do anything about it as he wouldn’t if he were in our shoes. I’ve worked for many other major software houses and not one of them would do it. I stand by my respect for the STI team in that they’re not taking the easy way out.

    [Graham] Saying that the XP STI.DLL  (5.1) supported something which the Vista version (6.0.5) did not seems very much to be a Vista issue, how can you say that it is not?

    [Tom] It’s not the "Vista version" as you put it. It just happens to be the first OS to see this version. STI is not tied to an OS and in future service packs for XP and 2003, those OSs will get the new version. Therefore, it is an STI issue and has nothing whatsoever to do with the Vista dev team.

    [Graham] To say about the programmer ‘(for reasons unknown)’ implies that he was incorrect in writing something for XP which could not subsequently be read by Vista but I take the view that if he wrote something that worked in XP he did so because he could, and because it worked, and he therefore should be able to do the same with the next generation of Windows.

    [Tom] 1) Those were the words of the customer. 2) He absolutely did something wrong. He committed the cardinal sin of using undocumented code to write a part of his company’s product. I’ve been writing code for 20 years and I’ve definitely used my share of undocumented code. However, *never* for a customer as it now puts that customer in a situation of having unsupported code.

    Anyway, the bottom line here is that every software company from IBM to Microsoft to Borland, etc. will tell you that if you use undocumented code, you do so at your own risk. This has always been the case. The fact that the STI team is willing to not take that easy way out impresses me.

  4. tomarcher says:

    I agree with you wholeheartedly, Wil and so does the STI team which is why they asked me to open a bug so that if we get similar complaints – and we will if people’s apps break – then we know it’s a big enough issue that we should incur the expense of putting the functions back in.

  5. LioNiNoiL says:

    [Tom] … I was pleased with how open dev was to going outside the typical response…

    The typical response being, "this was definitely not a Windows Vista issue". Say, wasn’t that *your* initial response, Tom?

    [Tom] …  if you use undocumented functions, you do so at your own risk.

    … He committed the cardinal sin of using undocumented code

    The StiCreateInstanceA function is "undocumented"?? Since when?!

  6. tomarcher says:

    LioNiNoiL:

    Not sure what you mean by initial response. When the customer said someting was amiss with Vista in that his STI app wasn’t working, I brought the issue up with that team who pointed me to the STI team who explaind the issue – that it was their decision and had nothing to do with the Vista dev team.

    The StiCreateInstanceA function has never been documented by Microsoft. StiCreateInstance is defined to use StiCreateInstanceW. Therefore, the only way to even use StiCreateInstanceA is to have looked through the header file and call it explicitly, which most people don’t do as they allow the header file to call the appropriate ANSI/Unicode version based on the build type and what the API supports. In this case, the API only (officially) supports Unicode.

  7. avenger218 says:

    will the public get access to a copy of windows vista

    before may (or whenever microsoft decides on the release of rc0) even a stripped down version of vista or a longhorn server build, It would be nice so we can road test it to find out what hardware changes need to be made.

    We (the public-non msdn or technet subscribers)

    are getting extremely anxious. some of us are very qualified for these tests but can’t afford an msdn or technet subscription and the "BetaReq" password on beta place doesn’t work and vista is not on connect.

  8. tomarcher says:

    avenger218: I believe there is a plan to get bits to the public, but can’t say anything else. Stay tuned :)

  9. manuel says:

    excelent

  10. JustCurious says:

    Hello,

    I have a question really on WinFx.net, but I was just curious if you’d know about it.

    I really like WPF based UI & would love to recommend it for some business solutions that we are planning to build in the next 6-9 months. However, these solutions will probably run on XP.

    Would you happen to know if the WPF/WinFx.Net will be getting out of the Beta version & if it is a good idea to think about serious WPF based solutions in the next 6-9 months timeframe.

    Thanks..

  11. vikram says:

    your software sucks core of every ones ass

  12. hello. i am hef a qesten kan i am here windows vista beta downloaden. fank you. of that kan.

    from jordy barends. fank you ferry match

  13. i want to load windows vista

  14. Ai_Vista says:

    if windows vista dus go as a public beta will it run windows xp drivers for my hardware (thats prob a daft question) and i think the relese date is december the seventh ma mums birth day :]

  15. tomarcher says:

    Ai_Vista:

    That completely depends on the driver. I know that with each build, Vista is able to recognize more and more drivers. For example, back in November, it wouldn’t automatically work with my Dell’s Network Adapter. I had to manually get a driver from the Dell site for it to work. Now it identifies and configures it up automatically.

    Regarding release dates, Windows Vista will be available via volume licensing for businesses in November ’06 and to consumers in January ’07.

  16. Carlos says:

    I want one copy ok windows Vista only lear please

    My Place is

    Po. Box 9

    Lawrence, MA 01842

  17. tomarcher says:

    Carlos: There is a world-wide "Windows Vista Beta Experience" program that you can register for:

    *Vista Beta Experience

    http://go.microsoft.com/fwlink/?LinkId=66411

    I would also recommend looking at the following page if you’re interested in developing for Vista as it walks you through which tools you need and where to get them.

    http://msdn.microsoft.com/windowsvista/downloads/getthebeta

  18. rape videos says:

    Your article is quite right, thanks.