nPad.Net
شنبه 01 آبان 1389, 20:28 عصر
کاربرد:بیشتر برا برنامه های تحت شبکه استفاده میشه که قراره با دسترسی admin برنامه ای رو روی user محدود شده اجرا کنیم!(اون user ی که استفاده میکنید میتونه admin هم نباشه)
تابع اصلی CreateProcessWithLogonW از advapi32.dll می باشد...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
publicconstUInt32 Infinite = 0xffffffff;
publicconstInt32 Startf_UseStdHandles = 0x00000100;
publicconstInt32 StdOutputHandle = -11;
publicconstInt32 StdErrorHandle = -12;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
publicstructStartupInfo
{
publicint cb;
publicString reserved;
publicString desktop;
publicString title;
publicint x;
publicint y;
publicint xSize;
publicint ySize;
publicint xCountChars;
publicint yCountChars;
publicint fillAttribute;
publicint flags;
publicUInt16 showWindow;
publicUInt16 reserved2;
publicbyte reserved3;
publicIntPtr stdInput;
publicIntPtr stdOutput;
publicIntPtr stdError;
}
internalstructProcessInformation
{
publicIntPtr process;
publicIntPtr thread;
publicint processId;
publicint threadId;
}
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
publicstaticexternbool CreateProcessWithLogonW(
String userName,
String domain,
String password,
UInt32 logonFlags,
String applicationName,
String commandLine,
UInt32 creationFlags,
UInt32 environment,
String currentDirectory,
refStartupInfo startupInfo,
outProcessInformation processInformation);
[DllImport("kernel32.dll", SetLastError = true)]
publicstaticexternbool GetExitCodeProcess(IntPtr process, refUInt32 exitCode);
[DllImport("Kernel32.dll", SetLastError = true)]
publicstaticexternUInt32 WaitForSingleObject(IntPtr handle, UInt32 milliseconds);
[DllImport("Kernel32.dll", SetLastError = true)]
publicstaticexternIntPtr GetStdHandle(IntPtr handle);
[DllImport("Kernel32.dll", SetLastError = true)]
publicstaticexternbool CloseHandle(IntPtr handle);
[STAThread]
staticvoid Main(string[] args)
{
StartupInfo startupInfo = newStartupInfo();
startupInfo.reserved = null;
startupInfo.flags &= Startf_UseStdHandles;
startupInfo.stdOutput = (IntPtr)StdOutputHandle;
startupInfo.stdError = (IntPtr)StdErrorHandle;
UInt32 exitCode = 123456;
ProcessInformation processInfo = newProcessInformation();
String command = @"C:\Windows\System\myApp.exe";// exe morede nazar
String user = "admin";
String domain = System.Environment.MachineName;
String password = "123";
String currentDirectory = System.IO.Directory.GetCurrentDirectory();
try
{
CreateProcessWithLogonW(
user,domain,password,(UInt32)1,command,command,
(UInt32)0,
(UInt32)0,
currentDirectory,
ref startupInfo,
out processInfo);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("Running ...");
WaitForSingleObject(processInfo.process, Infinite);
GetExitCodeProcess(processInfo.process, ref exitCode);
Console.WriteLine("Exit code: {0}", exitCode);
CloseHandle(processInfo.process);
CloseHandle(processInfo.thread);
}
}
}
موفق باشید
تابع اصلی CreateProcessWithLogonW از advapi32.dll می باشد...
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace ConsoleApplication1
{
class Program
{
publicconstUInt32 Infinite = 0xffffffff;
publicconstInt32 Startf_UseStdHandles = 0x00000100;
publicconstInt32 StdOutputHandle = -11;
publicconstInt32 StdErrorHandle = -12;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
publicstructStartupInfo
{
publicint cb;
publicString reserved;
publicString desktop;
publicString title;
publicint x;
publicint y;
publicint xSize;
publicint ySize;
publicint xCountChars;
publicint yCountChars;
publicint fillAttribute;
publicint flags;
publicUInt16 showWindow;
publicUInt16 reserved2;
publicbyte reserved3;
publicIntPtr stdInput;
publicIntPtr stdOutput;
publicIntPtr stdError;
}
internalstructProcessInformation
{
publicIntPtr process;
publicIntPtr thread;
publicint processId;
publicint threadId;
}
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
publicstaticexternbool CreateProcessWithLogonW(
String userName,
String domain,
String password,
UInt32 logonFlags,
String applicationName,
String commandLine,
UInt32 creationFlags,
UInt32 environment,
String currentDirectory,
refStartupInfo startupInfo,
outProcessInformation processInformation);
[DllImport("kernel32.dll", SetLastError = true)]
publicstaticexternbool GetExitCodeProcess(IntPtr process, refUInt32 exitCode);
[DllImport("Kernel32.dll", SetLastError = true)]
publicstaticexternUInt32 WaitForSingleObject(IntPtr handle, UInt32 milliseconds);
[DllImport("Kernel32.dll", SetLastError = true)]
publicstaticexternIntPtr GetStdHandle(IntPtr handle);
[DllImport("Kernel32.dll", SetLastError = true)]
publicstaticexternbool CloseHandle(IntPtr handle);
[STAThread]
staticvoid Main(string[] args)
{
StartupInfo startupInfo = newStartupInfo();
startupInfo.reserved = null;
startupInfo.flags &= Startf_UseStdHandles;
startupInfo.stdOutput = (IntPtr)StdOutputHandle;
startupInfo.stdError = (IntPtr)StdErrorHandle;
UInt32 exitCode = 123456;
ProcessInformation processInfo = newProcessInformation();
String command = @"C:\Windows\System\myApp.exe";// exe morede nazar
String user = "admin";
String domain = System.Environment.MachineName;
String password = "123";
String currentDirectory = System.IO.Directory.GetCurrentDirectory();
try
{
CreateProcessWithLogonW(
user,domain,password,(UInt32)1,command,command,
(UInt32)0,
(UInt32)0,
currentDirectory,
ref startupInfo,
out processInfo);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("Running ...");
WaitForSingleObject(processInfo.process, Infinite);
GetExitCodeProcess(processInfo.process, ref exitCode);
Console.WriteLine("Exit code: {0}", exitCode);
CloseHandle(processInfo.process);
CloseHandle(processInfo.thread);
}
}
}
موفق باشید