c ++ - Få UNC-sti fra kortlægningsdrev efter efterligning

Indlæg af Hanne Mølgaard Plasc

Problem



Hvis jeg kalder funktion WNetGetUniversalName() for at få UNC-sti fra drev kortlagt i den aktuelle session, lykkes funktionen.


Men...



  • Hvis jeg opretter en ny logon sesssion ved at ringe LogonUser() (Logon-brugeren er den samme som processkaberen)

  • Tænd med den logget bruger ved at kalde ImpersonateLoggedOnUser() funktionen

  • Og igen ring WNetGetUniversalName(), returnerer funktionen fejl 2250 (ERROR\_NOT\_CONNECTED)



Sagen er, jeg burde, bør køre denne proces som en tjeneste (i SYSTEM-konto), så jeg kan kræve, at brugeren bliver nødt til at få de kortlagte drev fra den pågældende bruger og tilhørende netværksbaner. Som jeg kontrollerede, kan oplysningerne ikke nås på tværs af bruger-sessioner.


Hvor gemmer Windows disse oplysninger, så det er muligt at ombygge drevene, når brugeren logger ind igen? Jeg fandt ud af, at kortlagte netværksbaner historien er gemt i registreringsdatabasen under nøgle: HKEY\_USERS<User SID>SoftwareMicrosoftWindowsCurrentVersionExplorerMap Network Drive MRU, men det siger ikke, om UNC-stien bliver kortlagt, når brugeren logger på igen og det tilhørende drevbogstav.


Hjælp venligst.

Bedste reference


Hvis jeg husker korrekt, tror jeg, at disse drevmapperinger gemmes i logon-sessionen. Da LogonUser () opretter en ny logon-session, har den ikke drevmappings; du skal bruge ImpersonateLoggedOnUser () med et eksisterende token.