Home
Browse all 647 examples
Download all 647 examples
Download sample chapters
Reviews
Errata
Acknowledgments
Links on .NET
Paradoxal Press

Buy directly from Paradoxal Press at $33.99 (Save 43%)



Category: Programming
Level: Beginner to seasoned
900 pages
ISBN-10 097661322-0
ISBN-13 978-097661322-0
$59.99 USA
$79.99 CANADA


Listing 5-28 extracted from chapter Processes, threads and synchronization


Listing 5-27<     > Listing 5-29


This listing can be compiled with the command line:
csc.exe /target:exe Example_5_28.cs
Errors: 0 Warnings: 0


Example_5_28.cs
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Threading;
class Program {
   [DllImport("Advapi32.Dll")]
   static extern bool LogonUser(
      string sUserName,
      string sDomain,
      string sUserPassword,
      uint dwLogonType,
      uint dwLogonProvider,
      out   System.IntPtr pToken);
   [DllImport("Kernel32.Dll")]
   static extern void CloseHandle( System.IntPtr pToken );

   static void Main() {
      System.IntPtr pToken;
      if( LogonUser(
            "guest" ,     // login
            string.Empty, // Windows domain
            "guest_pwd" // password
            2,            // LOGON32_LOGON_INTERACTIVE
            0,            // LOGON32_PROVIDER_DEFAUT
            out pToken)) {
         WindowsIdentity.Impersonate( pToken );
         DisplayContext( "Main" );
         ExecutionContext.SuppressFlow();
         ThreadPool.QueueUserWorkItem( Callback, null );
         CloseHandle( pToken );
      }
   }
   static void Callback( object o ) {
      DisplayContext( "Callback" );
   }
   static void DisplayContext( string s ) {
      System.Console.WriteLine( s + " Thread#{0} Current user is {1}",
         Thread.CurrentThread.ManagedThreadId,
         WindowsIdentity.GetCurrent().Name);
   }
}	
Copyright Patrick Smacchia 2006 2007