我正在编写Windows凭据提供程序,由于缺少有关该方法应如何工作的文档,我一直在苦苦挣扎。
我从Windows SDK示例(security/SampleCredentialProvider
)开始并对其进行了修改,以便从充当管道的服务器的SYSTEM服务接收凭据。
问题是:当凭据提供程序对象(实现ICredentialProvider
的对象)已调用GetCredentialCount
时,它尚未通过该管道从SYSTEM服务接收凭据,因此我返回一个0个凭证号(*pdwCount = 0;
)。
我不确定这是否是导致问题的原因,但此后不久将调用对象析构函数。反过来,这破坏了我等待系统服务凭证通过的管道,而没有任何效果。
我的问题是:为什么实现ICredentialProvider
的对象被销毁?我如何避免破坏它,以便提供程序等待通过管道传递凭据,然后通知LogonUI我们有新的凭据?
我将附加一些从Windows事件查看器中获取的有关我的凭据提供程序模块的事件:
- Credential provider object is created
- SetUsageScenario is called, only CPUS_LOGON is supported
- Advise is called, pcpe parameter is saved and AddRef'd
- GetCredentialCount, 0 is returned (no credential received yet)
- UnAdvise is called (this is unexpected, does this mean I can no longer pass credentials? Why is this called?)
- pipe to receive credentials is created
- Credential provider object's destructor is called -> pipe is destroyed and everything terminates
答案 0 :(得分:0)
发现了问题:我被困在Ctrl + Alt + Del屏幕上,而我正在查看的凭据提供程序日志是RDP的(我正在使用它来登录并调试问题)。