Frage : Einen angemeldeten Benutzer verkörpern

Ich habe einen Service, der als Konto des lokalen Systems läuft.  Ich muss Zugang zu das logg auf Benutzerregister erhalten.  Ich habe versucht, den angemeldeten Benutzer aber kein Glück zu verkörpern.  Es scheint, die Personifizierung zu ändern, aber, wenn ich auf das Register zurückgreife, es ist noch die Dienstleistungen.  Jedermann haben alle mögliche Ideen?

I versuchte, die Benutzer Schein zu erhalten so using die GetLoggedOnUserToken Funktion below.

{
System.IntPtr userToken = GetLoggedOnUserToken ();

pLog.InfoFormat („Name der Identität vor Personifizierung: {0}. “, WindowsIdentity.GetCurrent (). Name);
ImpersonateLoggedOnUser (userToken);
pLog.InfoFormat („Name der Identität nach Personifizierung: {0}. “, WindowsIdentity.GetCurrent (). Name);
Microsoft.Win32.RegistryKey Schlüssel = Microsoft.Win32.Registry.CurrentUser.OpenSubKey (@ " Software \ Test ");
sSessionId = Convert.ToString (key.GetValue („Session“));

RevertToSelf ();
}

allgemeines statisches IntPtr GetLoggedOnUserToken ()
{
IntPtr primaryToken = IntPtr.Zero;

//Either spezifizieren den processID explicitly
//Or Versuch, um ihn von einem Prozess zu erhalten, der durch das user.
//In dieser Fall besessen wird, der annimmt, dass es nur einen explorer.exe

Prozess [] ps = Process.GetProcessesByName gibt („explorer");
int processId = -1; //=processId
wenn (ps. Länge > 0)
{
processId = ps [0]. Identifikation;
}

wenn (processId > 1)
{
IntPtr Zeichen = IntPtr.Zero;
bool retVal = falsch;
Prozess p = Null;

try
{
p = Process.GetProcessById (processId);
}

Fang (ArgumentException)
{

Schnur = String.Format einzeln auf („ProcessID {0} nicht vorhanden“, processId);
Debug.WriteLine (Details);
Wurf;
}

//Gets Personifizierung token
retVal = OpenProcessToken (p.Handle, TOKEN_ALL_ACCESS, Hinweis-Zeichen);
wenn (retVal == zutreffend)
{

SECURITY_ATTRIBUTES sa = neues SECURITY_ATTRIBUTES ();
sa.nLength = (uint) Marshal.SizeOf (sa);

//Convert das Personifizierungzeichen in das Primärtoken
retVal = DuplicateTokenEx (
Zeichen,
TOKEN_ALL_ACCESS,
Hinweis sa,
(int) ProcessUtility.SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation,
(int) ProcessUtility.TOKEN_TYPE.TokenImpersonation,
Hinweis);

//Close das Zeichen, das vorher opened.
CloseHandle (Zeichen) war;
, wenn (retVal == falsch)
{
Schnurmitteilung = String.Format („DuplicateTokenEx Störung: {0}“, Marshal.GetLastWin32Error ());
Debug.WriteLine (Mitteilung);
}
}
else
{
Schnurmitteilung = String.Format („OpenProcessToken Störung: {0}“, Marshal.GetLastWin32Error ());
Debug.WriteLine (Mitteilung);

}
}
Rückkehr primaryToken;
}

Antwort : Einen angemeldeten Benutzer verkörpern

Hallo fitaliano,

Irgendwelche der bestehenden Aufkleber anklicken, dann addieren Klicken Werkzeuge - X-Ydiagramm-Aufkleber - Diagrammaufkleber. Klicken im Aufkleber-Streckenfeld und in den auserwählten Zellen I2: I44. Die Aufkleberposition einstellen, um O.K. zu zentrieren und anzuklicken.

Sehen angebracht für das Resultat.

Beifall, teylyn
Weitere Lösungen  
 
programming4us programming4us