From what I understand of your requirement, you want to display a custom user interface at the Credential Provider level. You can achieve this by one of the following approaches:
(1) Write a custom CP that includes your UI as a modal dialog in the SetSelected method of the credential : This approach will allow you to customize any UI. Once the modal window gets dismissed, the actual password CP gets built (assuming you wrap the default password CP).
(2) Launch the application from a Windows Service: This approach will not stop the providers from getting initialized. Basically, the Windows Service is used to launch a process in Winsta0\Winlogon desktop. You can access the process launched using Alt+TAB. Here's the basic steps you would need to use:
- WTSGetActiveConsoleSessionId to get the active session ID
- WTSQueryUserToken() to get the winlogon pid
- DuplicateTokenEx to duplicate the token
- Adjust the token privileges by calling AdjustTokenPrivileges
- CreateProcessAsUser with lpDesktop as Winsta0\Winlogon
I have used both approaches. The first one is used to introduce more secure login. The second is used to launch remote access tools, cmd prompt etc.