Pytanie : Uosabiać notować na użytkownik

I mieć usługa który biegać jako lokalny system konto.  I potrzebować dostęp the logg na użytkownik archiwum.  I próbować the notować na użytkownik ale żadny szczęście.  Ono pojawiać się the uosabianie, ale gdy I przystępować the archiwum ono być wciąż the usługa.  Pomysł mieć jakaś pomysł?

I próbować the użytkownik symboliczny jak getLoggedOnUserToken using the GetLoggedOnUserToken funkcja below.

{
System.IntPtr userToken = GetLoggedOnUserToken ();

pLog.InfoFormat ("Imię the tożsamość przed uosabianie: {(0)}. ", WindowsIdentity.GetCurrent (). Imię);
ImpersonateLoggedOnUser (userToken);
pLog.InfoFormat ("Imię the tożsamość po uosabianie: {(0)}. ", WindowsIdentity.GetCurrent (). Imię);
Microsoft.Win32.RegistryKey klucz = Microsoft.Win32.Registry.CurrentUser.OpenSubKey (@ " Software \ Test ");
sSessionId = Convert.ToString (key.GetValue ("Session"));

RevertToSelf ();
}

jawny statyczny IntPtr GetLoggedOnUserToken ()
{
IntPtr primaryToken = IntPtr.Zero;

//Either precyzować the processID explicitly
//Or próba ono od proces posiadać the user.
//In ten skrzynka tam  być tylko jeden explorer.exe

Proces [] ps = Process.GetProcessesByName ("explorer");
int processId = -1; //=processId
jeżeli (ps. Długość > (0))
{
processId = ps [(0)]. Id;
}

jeżeli (processId > 1)
{
IntPtr żeton = IntPtr.Zero;
bool retVal = fałszywy;
Proces p = null;

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

chwyt (ArgumentException)
{

smyczkowy szczegół = String.Format ("ProcessID {(0)} Dostępny", processId);
Debug.WriteLine (szczegół);
rzut;
}

//Gets uosabianie token
retVal = OpenProcessToken (p.Handle, TOKEN_ALL_ACCESS, ref żeton);
jeżeli (retVal == prawdziwy)
{

SECURITY_ATTRIBUTES suma = nowy SECURITY_ATTRIBUTES ();
sa.nLength = (uint) Marshal.SizeOf (suma);

//Convert the uosabianie żeton w Początkowy token
retVal = DuplicateTokenEx (
żeton,
TOKEN_ALL_ACCESS,
ref suma,
(int) ProcessUtility.SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation,
(int) ProcessUtility.TOKEN_TYPE.TokenImpersonation,
ref primaryToken);

//Close the Żeton który być poprzednio opened.
CloseHandle (żeton);
jeżeli (retVal == fałszywy)
{
smyczkowy wiadomość = String.Format ("DuplicateTokenEx Błąd: {(0)}", Marshal.GetLastWin32Error ());
Debug.WriteLine (wiadomość);
}
}
else
{
smyczkowy wiadomość = String.Format ("OpenProcessToken Błąd: {(0)}", Marshal.GetLastWin32Error ());
Debug.WriteLine (wiadomość);

}
}
powrót primaryToken;
}

Odpowiedź : Uosabiać notować na użytkownik

Cześć fitaliano,

Klikać jakikolwiek istniejący etykietka, then stuknięcie Narzędzie - ISTNIEJĄCY Mapa Etykietka - Dodawać mapa etykietka. Stuknięcie w the Etykietka Pasmo pole i wybiórka komórka I2: I44. Ustawiać the etykietka pozycja I OK.

Widzieć dołączać dla the rezultat.

otucha, teylyn
Inne rozwiązania  
 
programming4us programming4us