Game time
You want to check if you are certifiable or just test your Windows skills ? Try the Are You Certifiable game here with music, lights and three life lines (à la Who Wants To Be Millionaire) dubbed second-shot, technet and hyper-v. If you register you unlock more questions (5 seasons, 20 episodes) and can save your score and come back to it later. I tried this unregistered and the game still had a lot of questions to
Read the rest of this entry »
Multithreaded synchronous I/O must be asynchronous ?!
I recently came across a situation where it was taking too long to process multi-threaded I/O requests in a driver. While investigating this issue it became apparent that all but one of the pending requests was actually hitting the driver dispatch. All the other threads ended up blocking in nt!IopAcquireFileObjectLock (via a call to KeWaitForSingleObject).
My first suspicion was to check if the the device was configured to be an exclusive1 device. The exclusive bit (DO_EXCLUSIVE) gets set in the Flags member of DEVICE_OBJECT and
Read the rest of this entry »
Vista/2008 Service Pack 2 is out
Microsoft has made Windows Vista and Windows Server 2008 Service Pack 2 (Build 6.0.6002.18005) available for public download. You can get x86 stand-alone installer (348.3 MB) from here and the x64 SP2 (577.4 MB) from here.
Read the rest of this entry »
Internet Explorer is not YAWA
From a programmer’s perspective Internet Explorer is not Yet Another Windows Application (YAWA1). Considering all the versions of IE out there, when I say Internet Explorer I mean for the most part 32-bit Internet Explorer 7 on Windows Vista onwards in the default configuration (ie. User Account Control on, Protected Mode on).
For starters, if you are launching IE, you cannot determine when IE has initialized and ready for user input. Usually when a child process is launched, parent uses WaitForInputIdle to determine whether the child has initialized completely since CreateProcess returns immediately without waiting for process initialization to complete. This does not work for IE
Read the rest of this entry »
Privileges play hard-to-get in Vista
Privileges are a way to control who has access to certain system-wide resources. For example if a user does not have SE_SHUTDOWN_PRIVILEGE aka SeShutdownPrivilege, she cannot shutdown the machine. Privileges are stored in the token and have to be present and enabled to take effect. If a privilege is absent or disabled in the process/thread token, attempts to shutdown the system by calling ExitWindowsEx or NtShutdownSystem will fail and GetLastError will return error 1314 (ERROR_PRIVILEGE_NOT_HELD )- A required privilege is not held by the client.
Read the rest of this entry »
Improving driver diagnostics
TRoy, a good friend and ex-colleague of mine, presented at Microsoft Global Escalation Conference 2009 about how programmers can help improve driver diagnostics and “support support” when hard to reproduce problems are reported and all you have is a memory dump. He shows several techniques complete with short examples of each and how each technique helped
Read the rest of this entry »
