I’m writing a screen saver type app that needs to stop the user from accessing the system without typing a password. I want to catch/supress the various methods a user might try to exit the application, but all research I do seems to point me to “you can’t”.
Anything in C# or C++ would be great.
I’ve thought of disabling the keyboard, but then I would have other issues.
To add to what Shog9 said, if your application could intercept ctrl+alt+del, then your application would be able to pretend to be the Windows Login dialog, and by doing so trick the end-user into typing their credentials into your application.
If you do want to replace the Windows Login dialog, see Winlogon and GINA (but this says, “GINA DLLs are ignored in Windows Vista”, and I haven’t heard what’s what for Vista).
More specifically, your “application software” can’t: instead, by design, only “system software” can do this; and it isn’t that you’re not allowed to or not able to write system software, but your OP seemed to be quite clearly asking how to do it without writing system software … and the answer to that is that you can’t: because the system is designed to prevent an application from hooking these key combinations.
A keyboard filter device driver, or a GINA DLL, for example, would be considered system software: installed by an administrator (or OEM) and run as part of the O/S.
I don’t know about GINA beyond its name; and I’ve already (above) given a link it in MSDN. I expect that it’s Win32 user-mode code.
Device drivers are a different topic: e.g. Getting Started on Driver Development.
I still not sure that you and/or your boss have the right idea. IMHO you shouldn’t be an application which prevents the user from pressing Ctrl-Alt-Del. If you want to stop the user from accessing the system without typing a password, then you ought to lock (password-protect) the system, as if the user had pressed Ctrl Alt Del and then selected “Lock this computer”. To unlock the computer they would then need to press Ctrl Alt Del and enter their credentials into WinLogon.
However, ignoring what you ought to do and concentrating instead on what you’re capable of doing, if you want to intercept the keyboard, apparently it can be done. I haven’t studied keyboards myself, but this post and this post claim success, by writing a “Keyboard Filter Driver” (which is a kind of kernel-mode, not Win32, device driver). If you write one of these though you may get some push-back, e.g. like this reaction from a DDK MVP, or this reaction from an anti-snooping product.