Hello,
I am a software developer and I encounter a LogonUI problem on Windows 7 when I use a credential provider in particular conditions.
I have modified the SampleHardwareEventCredentialProvider sample of the RTMCredentialProviderSamples__FINAL archive (
Link Removed).
The original sample creates one credential at a time.
My credential provider creates a list of credentials.
This list is cleared and created each time that one calls the OnConnectStatusChanged method below.
My program has a loop that send a message to the CommandWindow.
When the CommandWindow receives this message it calls OnConnectStatusChanged.
The loop is the following:
Code:
while (1) {
::PostMessage(pCommandWindow->_hWnd, WM_TOGGLE_CONNECTED_STATUS, 0, 0);
Sleep(100);
}
This way each 100 milliseconds, the credentials list will be destroyed and created again.
We use here 100 milliseconds to reproduce quickly the problem that we entounter in our credential.
Of course, the loop above do something more useful in our final credential.
Here we want just to illustrate that we change the credentials list dynamically.
If we click many times very quickly on one of the displayed credentials during this loop, at some point, LogonUI freezes: there is no more credential displayed and the restart/stop button do not respond.
The only choice we have at this point is to either hard reboot the computer or reboot it remotely.
Notice that when we do remote reboot LogonUI diplays correctly the reboot message when make me think it is not totally frozen...
To reproduce the problem:
- Download the base source package at
Link Removed
- Replace the following files with the source code attached:
CommandWindow.cpp, CommandWindow.h, CSampleCredential.cpp, CSampleCredential.h, CSampleProvider.cpp, CSampleProvider.h
Is it justified to reset the list of credentials in this way (I mean asynchronously at any time)? If not, how should we do?
Is there a mechanism to be notified by LogonUI when it finished displaying the list of credentials?
Thank you in advance for your help.