在C#中使用CreateProcessAsUser函數可以創建一個新的進程,并以指定用戶的身份運行該進程。下面是一個示例代碼:
using System;using System.Diagnostics;using System.Runtime.InteropServices;class Program{static void Main(string[] args){IntPtr userToken = IntPtr.Zero;IntPtr primaryToken = IntPtr.Zero;try{// 獲取當前用戶的訪問令牌bool success = LogonUser("<用戶名>", "<域>", "<密碼>", 2, 0, ref userToken);if (!success){throw new System.componentmodel.Win32Exception();}// 創建一個與用戶訪問令牌相關聯的主訪問令牌success = DuplicateToken(userToken, 2, ref primaryToken);if (!success){throw new System.ComponentModel.Win32Exception();}// 設置啟動信息STARTUPINFO startupInfo = new STARTUPINFO();startupInfo.cb = Marshal.SizeOf(startupInfo);// 啟動新進程的信息PROCESS_INFORMATION processInfo = new PROCESS_INFORMATION();// 創建新進程success = CreateProcessAsUser(primaryToken, "<要運行的程序路徑>", null, IntPtr.Zero, IntPtr.Zero, false,0, IntPtr.Zero, null, ref startupInfo, out processInfo);if (!success){throw new System.ComponentModel.Win32Exception();}console.writeline("新進程已啟動,進程ID為: " + processInfo.dwProcessId);}finally{// 關閉句柄if (userToken != IntPtr.Zero){CloseHandle(userToken);}if (primaryToken != IntPtr.Zero){CloseHandle(primaryToken);}}}// 導入Windows API[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,int dwLogonType, int dwLogonProvider, ref IntPtr phToken);[DllImport("advapi32.dll", SetLastError = true)]public static extern bool DuplicateToken(IntPtr ExistingTokenHandle, int SECURITY_IMPERSONATION_LEVEL,ref IntPtr DuplicateTokenHandle);[DllImport("kernel32.dll", SetLastError = true)]public static extern bool CloseHandle(IntPtr handle);[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]public static extern bool CreateProcessAsUser(IntPtr hToken, string lpApplicationName, string lpCommandLine,IntPtr lpProcessAttributes, IntPtr lpThreadAttributes, bool bInheritHandles, uint dwCreationFlags,IntPtr lpEnvironment, string lpCurrentDirectory, ref STARTUPINFO lpStartupInfo,out PROCESS_INFORMATION lpProcessInformation);[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]public struct STARTUPINFO{public int cb;public String lpReserved;public String lpDesktop;public String lpTitle;public uint dwX;public uint dwY;public uint dwXSize;public uint dwYSize;public uint dwXCountChars;public uint dwYCountChars;public uint dwFillAttribute;public uint dwFlags;public short wShowWindow;public short cbReserved2;public IntPtr lpReserved2;public IntPtr hStdInput;public IntPtr hStdOutput;public IntPtr hStdError;}[StructLayout(LayoutKind.Sequential)]public struct PROCESS_INFORMATION{public IntPtr hProcess;public IntPtr hThread;public uint dwProcessId;public uint dwThreadId;}}
注意替換代碼中的<用戶名>
、<域>
、<密碼>
和<要運行的程序路徑>
為實際的值。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
運費發票幾個點?1、運輸發票稅率,對所得稅一般納稅人購入貨品或市場銷售商品所支出的物流運輸花費,依據運費清算票據所列運費金額,依10%的扣除率計算進項稅準許扣減,但陪同運費付款的卸車費、保險費等其他附加費不可計算扣減進項稅;2、運輸企業小規模納稅人所得稅增值稅率是3%。運輸發票如何抵扣?1、準許抵扣的貨品運費金額:指自開票經營者和代開票企業為代開票經營開具的貨運物流稅票上標明的運費、基本建設股票基...
手機套餐外的上網費用是怎么計算的?套餐外上網費很多人還不知道,現在讓我們一起來看看吧!1、移動數據流量標準資費為:0.29元/MB,流量套餐超出部分也按此標準資費收取。2、不同省市資費不同,以當地營業廳規定為準!。三大運營商哪個資費便宜?移動聯通和電信,論覆蓋一定是電信做的最好,但是輪網速的話就是聯通最好。三大運營商到底哪家網絡更好,是我們茶余飯后或者換卡換手機都會經常討論的話題。因為現代人社交場...
本內容來自@什么值得買APP,觀點僅代表作者本人|作者:肉吧巴巴海戰,也就是人們常說的多兵種協同進行的海上戰爭,steam上也有很多優秀的海戰游戲,大多使用弓箭和火炮作為武器。今天我們就為大家梳理幾款海戰模擬游戲。讓我們看一看。1.獵潛艇3我心目中最好的海戰模擬游戲,雖然是2005年的游戲,但在十幾年后的今天看來可玩性越來越大。各種優秀的MOD,如GWX,狼群系列和戰艦MOD,將獵潛艇3帶入了全新...