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-29 extracted from chapter
Processes, threads and synchronization
Listing 5-28< > Listing 6-1
This listing can be compiled with the command line: csc.exe /target:exe Example_5_29.cs Errors: 0 Warnings: 0
Example_5_29.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 ctx = ExecutionContext.Capture();
ExecutionContext.SuppressFlow();
ThreadPool.QueueUserWorkItem(
SetContextAndThenCallback, ctx.CreateCopy());
CloseHandle( pToken );
}
}
static void SetContextAndThenCallback( object o ) {
ExecutionContext ctx = o as ExecutionContext;
ExecutionContext.Run( ctx, Callback, null );
}
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
|