Pergunta : Impersonate um usuário entrado

Eu tenho um serviço que esteja funcionando como um cliente do sistema local.  Eu preciso de começ a acesso ao o logg no registro dos usuários.  Eu tentei não impersonate o usuário entrado mas nenhuma sorte.  Parece mudar a personificação, mas quando eu alcanço o registro ele é ainda os serviços.  Qualquer um tem todas as idéias? o

I tentou começ os usuários simbólicos como este using a função below.

de GetLoggedOnUserToken {o
System.IntPtr userToken = GetLoggedOnUserToken ();

pLog.InfoFormat (“nome da identidade antes da personificação: {0}. ”, WindowsIdentity.GetCurrent (). Nome);
ImpersonateLoggedOnUser (userToken);
pLog.InfoFormat (“nome da identidade após a personificação: {0}. ”, WindowsIdentity.GetCurrent (). Nome); Chave do
Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey (@ " Software \ teste "); sSessionId do
= Convert.ToString (key.GetValue (“Session”));
RevertToSelf do
();
do

IntPtr GetLoggedOnUserToken do
} () {o
IntPtr primaryToken = IntPtr.Zero; o

//Either especific a tentativa do explicitly
//Or do processID para começ a de um processo possuído pelo user.
//In este caso que supor que há somente um processo de explorer.exe

[] picosegundo = Process.GetProcessesByName (“explorer"); processId do
int = -1; //=processId
se (picosegundo. Comprimento > 0)
{processId do
= picosegundo [0]. Identificação;

do
} se (processId > 1)
{símbolo do
IntPtr = IntPtr.Zero; bool do
retVal = falso;
Process p = zero; try
do

{
p = Process.GetProcessById (processId);
do prendedor do

do
} (ArgumentException) {corda do

detalha = String.Format (“ProcessID {0} nao disponíveis”, processId);
Debug.WriteLine (detalhes); lance do
; token
da personificação do

//Gets do
} retVal = OpenProcessToken (p.Handle, TOKEN_ALL_ACCESS, símbolo da referência);
se (== retVal verdadeiro)
{SECURITY_ATTRIBUTES sa do

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

//Convert o símbolo da personificação no token
retVal = DuplicateTokenEx (símbolo do
,
TOKEN_ALL_ACCESS, referência sa do
,
(int) ProcessUtility.SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation,
(int) ProcessUtility.TOKEN_TYPE.TokenImpersonation, referência do
primaryToken);

//Close o símbolo que era previamente opened.
CloseHandle (símbolo);
se (== retVal falso)
{mensagem da corda do
= String.Format (de “erro DuplicateTokenEx: {0}”, Marshal.GetLastWin32Error ());
Debug.WriteLine (mensagem); else
do
do
do
}} {mensagem da corda do
= String.Format (de “erro OpenProcessToken: {0}”, Marshal.GetLastWin32Error ());
Debug.WriteLine (mensagem); o retorno do
do
do

}} primaryToken;
do
} class= do

Resposta : Impersonate um usuário entrado

Olá! fitaliano,

Estalar algumas das etiquetas existentes, a seguir as ferramentas do clique - etiquetas XY da carta - adicionam etiquetas da carta. Estalar no campo da escala da etiqueta e selecionar as pilhas I2: I44. Ajustar a posição da etiqueta para centrar e estalar a APROVAÇÃO.

Ver unido para o resultado.

elogios, teylyn
Outras soluções  
 
programming4us programming4us