當前位置:編程學習大全網 - 編程語言 - 誰能給個C#調用CreateProcessAsUser這個API函數的例程

誰能給個C#調用CreateProcessAsUser這個API函數的例程

using?System;?

using?System.Text;?

using?System.Runtime.InteropServices;?

using?System.Security.Principal;?

using?System.Security.Permissions;?

[assembly:SecurityPermissionAttribute(SecurityAction.RequestMinimum,?UnmanagedCode=true)]?

[SecurityPermission(SecurityAction.Demand,ControlPrincipal?=?true)]?

public?class?Class1?

{?

[DllImport("advapi32.dll",?CharSet=CharSet.Auto,?SetLastError=true)]?

internal?static?extern?bool?CreateProcessWithLogonW(String?lpszUsername,?String?lpszDomain,?String?lpszPassword,?

int?dwLogonFlags,?string?applicationName,?StringBuilder?commandLine,?

int?creationFlags,?IntPtr?environment,?

string?currentDirectory,?

ref?STARTUPINFO?sui,?

out?PROCESS_INFORMATION?processInfo);?

[DllImport("kernel32")]?

static?extern?bool?CloseHandle(IntPtr?handle);?

[StructLayout(LayoutKind.Sequential)]?

internal?struct?STARTUPINFO?{?

internal?intcb;?

[MarshalAs(UnmanagedType.LPTStr)]?

internal?string?lpReserved;?

[MarshalAs(UnmanagedType.LPTStr)]?

internal?string?lpDesktop;?

[MarshalAs(UnmanagedType.LPTStr)]?

internal?string?lpTitle;?

internal?intdwX;?

internal?intdwY;?

internal?intdwXSize;?

internal?intdwYSize;?

internal?intdwXCountChars;?

internal?intdwYCountChars;?

internal?intdwFillAttribute;?

internal?intdwFlags;?

internal?shortwShowWindow;?

internal?shortcbReserved2;?

internal?IntPtr?lpReserved2;?

internal?IntPtr?hStdInput;?

internal?IntPtr?hStdOutput;?

internal?IntPtr?hStdError;?

}?

[StructLayout(LayoutKind.Sequential)]?

internal?struct?PROCESS_INFORMATION?{?

internal?IntPtr?hProcess;?

internal?IntPtr?hThread;?

internal?int?dwProcessId;?

internal?int?dwThreadId;?

}?

//dwLogonFlags?Specifies?the?logon?option?

const?int?LOGON_WITH_PROFILE?=?1;?

const?int?LOGON_NETCREDENTIALS_ONLY?=?2;?

//dwCreationFlags?-?Specifies?how?the?process?is?created?

const?int?CREATE_SUSPENDED?=?0x00000004;?

const?int?CREATE_NEW_CONSOLE?=?0x00000010;?

const?int?CREATE_NEW_PROCESS_GROUP?=?0x00000200;?

const?int?CREATE_SEPARATE_WOW_VDM?=?0x00000800;?

const?int?CREATE_UNICODE_ENVIRONMENT?=?0x00000400;?

const?int?CREATE_DEFAULT_ERROR_MODE=?0x04000000;?

//dwCreationFlags?parameter?controls?the?new?process's?priority?class?

const?int?NORMAL_PRIORITY_CLASS?=0x00000020;?

const?int?IDLE_PRIORITY_CLASS?=0x00000040;?

const?int?HIGH_PRIORITY_CLASS?=0x00000080;?

const?int?REALTIME_PRIORITY_CLASS=?0x00000100;?

const?int?BELOW_NORMAL_PRIORITY_CLASS?=?0x00004000;?

const?int?ABOVE_NORMAL_PRIORITY_CLASS?=?0x00008000;?

//dwFlags?

//?This?is?a?bit?field?that?determines?whether?certain?STARTUPINFO?

//?members?are?used?when?the?process?creates?a?window.?

//?Any?combination?of?the?following?values?can?be?specified:?

const?int?STARTF_USESHOWWINDOW?=0x0000000;?

const?int?STARTF_USESIZE=0x00000002;?

const?int?STARTF_USEPOSITION?=0x00000004;?

const?int?STARTF_USECOUNTCHARS?=0x00000008;?

const?int?STARTF_USEFILLATTRIBUTE?=?0x00000010;?

const?int?STARTF_FORCEONFEEDBACK?=?0x00000040;?

const?int?STARTF_FORCEOFFFEEDBACK?=?0x00000080;?

const?int?STARTF_USESTDHANDLES?=0x00000100;?

const?int?STARTF_USEHOTKEY?=?0x00000200;?

public?static?void?Main(string[]?args)?

{?

//?Account?to?run?as?

string?_logonName?=?"someone";//?some?user?

string?_domain?=?".";?//?local?machine?account?

string?_password?=?"secret";?

StringBuilder?sb?=?new?StringBuilder();?

//?command?to?execute?

sb.Append(@"devenv.exe");?

PROCESS_INFORMATION?processInfo;?

STARTUPINFO?startInfo?=?new?STARTUPINFO();?

startInfo.cb?=?Marshal.SizeOf(startInfo);?

startInfo.lpTitle?=?"This?is?a?Command?console";?

startInfo.dwFlags?=?STARTF_USECOUNTCHARS;?

startInfo.dwYCountChars?=?50;?

//?create?process?similar?as?"runas"?using?the?logon?users?profile?

bool?ret?=?CreateProcessWithLogonW(_logonName,?_domain,?_password,?

LOGON_WITH_PROFILE,?null,?sb,?

NORMAL_PRIORITY_CLASS?|?CREATE_UNICODE_ENVIRONMENT,?

IntPtr.Zero,?"c:\\",?

ref?startInfo,?out?processInfo);?

Console.WriteLine("CreateProcessWithLogonW?called");?

if(!ret)?

//?If?failure?...?

Console.WriteLine("Error:?{0}",?Marshal.GetLastWin32Error());?

else?

Console.WriteLine("ProcessID:?{0}",?processInfo.dwProcessId);?

}?

}

  • 上一篇:創新之星個人事跡材料整理
  • 下一篇:扁平化管理是什麽意思
  • copyright 2024編程學習大全網