Click here to Skip to main content
15,914,323 members
Home / Discussions / C#
   

C#

 
GeneralRe: Is it possible to battery status of Digital camera using c# and WIA? Pin
Dave Kreskowiak1-Mar-12 12:59
mveDave Kreskowiak1-Mar-12 12:59 
GeneralRe: Is it possible to battery status of Digital camera using c# and WIA? Pin
Icarii1-Mar-12 16:50
Icarii1-Mar-12 16:50 
QuestionExchange Server 2007 - Commands Pin
Sebastian T Xavier29-Feb-12 22:53
Sebastian T Xavier29-Feb-12 22:53 
AnswerRe: Exchange Server 2007 - Commands Pin
Dave Kreskowiak1-Mar-12 3:37
mveDave Kreskowiak1-Mar-12 3:37 
QuestionQuick Constructor Question Pin
Kevin Marois29-Feb-12 12:01
professionalKevin Marois29-Feb-12 12:01 
AnswerRe: Quick Constructor Question Pin
RobCroll29-Feb-12 13:36
RobCroll29-Feb-12 13:36 
GeneralRe: Quick Constructor Question Pin
J4amieC1-Mar-12 5:22
J4amieC1-Mar-12 5:22 
AnswerRe: Quick Constructor Question Pin
GParkings29-Feb-12 22:47
GParkings29-Feb-12 22:47 
AnswerRe: Quick Constructor Question Pin
BobJanova1-Mar-12 5:27
BobJanova1-Mar-12 5:27 
QuestionPassing values between classes Pin
CCodeNewbie29-Feb-12 10:33
CCodeNewbie29-Feb-12 10:33 
AnswerRe: Passing values between classes Pin
Wes Aday29-Feb-12 10:54
professionalWes Aday29-Feb-12 10:54 
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 

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.