Click here to Skip to main content
15,900,818 members
Home / Discussions / C#
   

C#

 
GeneralRe: Passing values between classes Pin
CCodeNewbie29-Feb-12 11:11
CCodeNewbie29-Feb-12 11:11 
GeneralRe: Passing values between classes Pin
Wes Aday29-Feb-12 11:24
professionalWes Aday29-Feb-12 11:24 
GeneralRe: Passing values between classes Pin
CCodeNewbie29-Feb-12 11:37
CCodeNewbie29-Feb-12 11:37 
GeneralRe: Passing values between classes Pin
Pete O'Hanlon29-Feb-12 11:45
mvePete O'Hanlon29-Feb-12 11:45 
GeneralRe: Passing values between classes Pin
CCodeNewbie29-Feb-12 11:56
CCodeNewbie29-Feb-12 11:56 
GeneralRe: Passing values between classes Pin
Wes Aday29-Feb-12 12:44
professionalWes Aday29-Feb-12 12:44 
GeneralRe: Passing values between classes Pin
Pete O'Hanlon29-Feb-12 22:14
mvePete O'Hanlon29-Feb-12 22:14 
GeneralRe: Passing values between classes Pin
CCodeNewbie5-Mar-12 6:07
CCodeNewbie5-Mar-12 6:07 
Hi Pete,

Please pardon my ignorance/incompetence but I'm still not getting it. If I follow suggestions and use
C#
public string LogonUser { get; set;}

I get the compile errors
'Uinfo.LogonUser.get' must declare a body because it is not marked abstract or extern
'Uinfo.LogonUser.set' must declare a body because it is not marked abstract or extern

OK, so I go
C#
public string LogonUser { get { return LogonUser; } set { LogonUser = value; } }

and get 'An unhandled exception of type 'System.StackOverflowException' occurred in whatever.exe'. I think this may be because LogonUser is Null.

If I do this
C#
public string LogonUser;

then in Main() I get
"from main" with no value for ui.LogonUser.

I am probably missing something really simple but can't seem to grasp what it is.

Code follows:
C#
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security;
using System.Security.Principal;
using System.Text;

namespace Something
{
    public class whatever 
    {
        public static void Main()
        {
            UInfo ui = new UInfo();
            Console.WriteLine("from main" + ui.LogonUser);
            Console.ReadLine();
        }
   }
    public class UInfo
    {
        [DllImport("advapi32", SetLastError = true), SuppressUnmanagedCodeSecurityAttribute]
        static extern int OpenProcessToken(System.IntPtr ProcessHandle, int DesiredAccess, ref IntPtr TokenHandle);

        [DllImport("kernel32", SetLastError = true), SuppressUnmanagedCodeSecurityAttribute]
        static extern bool CloseHandle(IntPtr handle);
        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public extern static bool DuplicateToken(IntPtr ExistingTokenHandle, int SECURITY_IMPERSONATION_LEVEL, ref IntPtr DuplicateTokenHandle);

        public const int TOKEN_DUPLICATE = 2;
        public const int TOKEN_QUERY = 0X00000008;
        public const int TOKEN_IMPERSONATE = 0X00000004;

        public string LogonUser;

        public static void Uinfo()
        {
            IntPtr hToken = IntPtr.Zero;
            IntPtr dupeTokenHandle = IntPtr.Zero;
            int p = Process.GetProcessesByName("explorer")[0].Id;
            Process r = Process.GetProcessById(p);
            if (OpenProcessToken(r.Handle, TOKEN_QUERY | TOKEN_IMPERSONATE | TOKEN_DUPLICATE, ref hToken) != 0)
            {
                WindowsIdentity newId = new WindowsIdentity(hToken);
                try
                {
                    const int SecurityImpersonation = 2;
                    dupeTokenHandle = DupeToken(hToken, SecurityImpersonation);
                    if (IntPtr.Zero == dupeTokenHandle)
                    {
                        string s = String.Format("Dup failed {0}, privilege not held",
                        Marshal.GetLastWin32Error());
                        throw new Exception(s);
                    }
                    WindowsImpersonationContext impersonatedUser = newId.Impersonate();
                    IntPtr accountToken = WindowsIdentity.GetCurrent().Token;

                   string LogonUser = WindowsIdentity.GetCurrent().Name;
                }
                finally
                {
                    CloseHandle(hToken);
                }
            }
            else
            {
                string s = String.Format("OpenProcess Failed {0}, privilege not held", Marshal.GetLastWin32Error());
                throw new Exception(s);
            }
        }
    }
    static IntPtr DupeToken(IntPtr token, int Level)
    {
        IntPtr dupeTokenHandle = IntPtr.Zero;
        bool retVal = DuplicateToken(token, Level, ref dupeTokenHandle);
        return dupeTokenHandle;
    }
}


Could you tell me what I missed in the tutorials please?
SuggestionRe: Passing values between classes Pin
Pete O'Hanlon29-Feb-12 11:28
mvePete O'Hanlon29-Feb-12 11:28 
GeneralRe: Passing values between classes Pin
CCodeNewbie29-Feb-12 11:53
CCodeNewbie29-Feb-12 11:53 
AnswerRe: Passing values between classes Pin
CCodeNewbie29-Feb-12 12:11
CCodeNewbie29-Feb-12 12:11 
AnswerRe: Passing values between classes Pin
BobJanova1-Mar-12 5:23
BobJanova1-Mar-12 5:23 
GeneralRe: Passing values between classes Pin
DaveyM691-Mar-12 9:47
professionalDaveyM691-Mar-12 9:47 
GeneralRe: Passing values between classes Pin
Pete O'Hanlon1-Mar-12 11:29
mvePete O'Hanlon1-Mar-12 11:29 
GeneralRe: Passing values between classes Pin
BobJanova1-Mar-12 23:31
BobJanova1-Mar-12 23:31 
QuestionCan't create Workflow projects? Pin
SledgeHammer0129-Feb-12 6:39
SledgeHammer0129-Feb-12 6:39 
AnswerRe: Can't create Workflow projects? Pin
Richard MacCutchan29-Feb-12 7:14
mveRichard MacCutchan29-Feb-12 7:14 
QuestionGet Namespaces and/or Assemblies In A Solution Pin
Kevin Marois29-Feb-12 6:05
professionalKevin Marois29-Feb-12 6:05 
AnswerRe: Get Namespaces and/or Assemblies In A Solution Pin
Pete O'Hanlon29-Feb-12 6:14
mvePete O'Hanlon29-Feb-12 6:14 
AnswerRe: Get Namespaces and/or Assemblies In A Solution Pin
Ennis Ray Lynch, Jr.29-Feb-12 6:15
Ennis Ray Lynch, Jr.29-Feb-12 6:15 
QuestionCorrection needed in SQL Query Pin
Abdul Anoop29-Feb-12 5:45
Abdul Anoop29-Feb-12 5:45 
AnswerRe: Correction needed in SQL Query Pin
Pete O'Hanlon29-Feb-12 5:50
mvePete O'Hanlon29-Feb-12 5:50 
AnswerRe: Correction needed in SQL Query Pin
Shameel29-Feb-12 8:05
professionalShameel29-Feb-12 8:05 
QuestionEmail button in Datagridview Pin
pmcm29-Feb-12 5:38
pmcm29-Feb-12 5:38 
AnswerRe: Email button in Datagridview Pin
Montasser Ben Ouhida2-Mar-12 4:48
Montasser Ben Ouhida2-Mar-12 4:48 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.