c ++ - Windows Credential Provider - ødelagt før du modtager legitimationsoplysninger

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skriver en Windows-legitimationsleverandør, og jeg kæmper for alvor på grund af manglende dokumentation om, hvordan sagen skal fungere.


Jeg startede fra Windows SDK-eksemplet (security/SampleCredentialProvider) og ændrede det for at modtage legitimationsoplysningerne fra en SYSTEM-tjeneste, der fungerer som en server gennem et rør.


Problemet er: Når credential provider-objektet (den som implementerer ICredentialProvider) har kaldt GetCredentialCount, har det ikke allerede modtaget legitimationsoplysningerne fra SYSTEM-tjenesten gennem det pågældende rør, returnerer jeg derfor et 0 legitimationsnummer (*pdwCount = 0;). [7]


Jeg er ikke sikker på, om dette er årsagen til problemet, men genstanden destructor kaldes snart derefter . Det ødelægger igen røret, hvor jeg ventede på, at SYSTEM-serviceoplysningerne skulle sendes og ingenting virker .


Mit spørgsmål er: hvorfor er genstanden, der gennemfører ICredentialProvider ødelagt? Hvordan kan jeg undgå ødelæggelsen for at få udbyderen vent til legitimationsoplysninger, der passeres gennem røret og derefter underrette LogonUI om, at vi har nye legitimationsoplysninger?


Jeg vedlægger nogle begivenheder taget fra Windows Event Viewer vedrørende mit legitimationsmodul:


- 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

Bedste reference


Fundet problemet: Jeg sidder fast ved Ctrl + Alt + Del skærmbilledet, og logfilen til legitimationsoplysninger, jeg kigger på, var RDP's one (jeg brugte den til at logge ind og fejre problemet).