資源簡介
C#間接調用mstsc.exe實現自動遠程登錄:根據遠程主機的ip地址、用戶名和密碼動態修改Default.rdp文件里面的相關信息,然后調用mstsc.exe加載該Default.rdp文件來達到自動登錄遠程主機的目的,遠程連接的時候不需要用戶輸入主機地址、用戶名和密碼,非常方便。
C#下直接調用mstsc.exe遠程登錄的話,調用之后窗體會消失,在任務管理器里面看到的mstsc.exe進程,但是看不到界面,本代碼通過間接調用的方式解決了該問題。
Default.rdp里面的登錄密碼不是明文,而是加密的密文,該C#代碼實現了登錄密碼的rdp加密得到密文。
完整的C#代碼,vs2008工程,可編譯和測試。
代碼里面的Default.rdp文件(和可執行程序在同一個目錄)也可以遠程連接Linux主機(需要把session bpp:i設置為24),如果是連windows主機的話可以把session bpp:i:設置成32。當然,也可以自己生成Default.rdp:打開mstsc,點擊選項然后設置好參數之后,點擊另存為保存得到自己的Default.rdp。

代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.Runtime.InteropServices;
using?System.ComponentModel;
namespace?Fedora遠程桌面
{
????public?class?DPAPI
????{
????????//?Wrapper?for?DPAPI?CryptProtectData?function.
????????[DllImport(“crypt32.dll“
????????????????????SetLastError?=?true
????????????????????CharSet?=?System.Runtime.InteropServices.CharSet.Auto)]
????????private?static?extern
????????????bool?CryptProtectData(ref?DATA_BLOB?pPlainText
????????????????????????????????????????string?szDescription
????????????????????????????????????ref?DATA_BLOB?pEntropy
????????????????????????????????????????IntPtr?pReserved
????????????????????????????????????ref?CRYPTPROTECT_PROMPTSTRUCT?pPrompt
????????????????????????????????????????int?dwFlags
????????????????????????????????????ref?DATA_BLOB?pCipherText);
????????//?Wrapper?for?DPAPI?CryptUnprotectData?function.
????????[DllImport(“crypt32.dll“
????????????????????SetLastError?=?true
????????????????????CharSet?=?System.Runtime.InteropServices.CharSet.Auto)]
????????private?static?extern
????????????bool?CryptUnprotectData(ref?DATA_BLOB?pCipherText
????????????????????????????????????ref?string?pszDescription
????????????????????????????????????ref?DATA_BLOB?pEntropy
????????????????????????????????????????IntPtr?pReserved
????????????????????????????????????ref?CRYPTPROTECT_PROMPTSTRUCT?pPrompt
????????????????????????????????????????int?dwFlags
????????????????????????????????????ref?DATA_BLOB?pPlainText);
????????//?BLOB?structure?used?to?pass?data?to?DPAPI?functions.
????????[StructLayout(LayoutKind.Sequential?CharSet?=?CharSet.Unicode)]
????????internal?struct?DATA_BLOB
????????{
????????????public?int?cbData;
????????????public?IntPtr?pbData;
????????}
????????//?Prompt?structure?to?be?used?for?required?parameters.
????????[StructLayout(LayoutKind.Sequential?CharSet?=?CharSet.Unicode)]
????????internal?struct?CRYPTPROTECT_PROMPTSTRUCT
????????{
????????????public?int?cbSize;
????????????public?int?dwPromptFlags;
????????????public?IntPtr?hwndApp;
????????????public?string?szPrompt;
????????}
????????//?Wrapper?for?the?NULL?handle?or?pointer.
????????static?private?IntPtr?NullPtr?=?((IntPtr)((int)(0)));
????????//?DPAPI?key?initialization?flags.
????????private?const?int?CRYPTPROTECT_UI_FORBIDDEN?=?0x1;
????????private?const?int?CRYPTPROTECT_LOCAL_MACHINE?=?0x4;
????????///?
????????///?Initializes?empty?prompt?structure.
????????///?
????????///?
????????///?Prompt?parameter?(which?we?do?not?actually?need).
????????///?
????????private?static?void?InitPrompt(ref?CRYPTPROTECT_PROMPTSTRUCT?ps)
????????{
????????????ps.cbSize?=?Marshal.SizeOf(
??????????????????????????????????????typeof(CRYPTPROTECT_PROMPTSTRUCT));
????????????ps.dwPromptFlags?=?0;
????????????ps.hwndApp?=?NullPtr;
????????????ps.szPromp
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????..A..H.?????46592??2019-06-03?15:05??Fedora遠程桌面.suo
?????文件???????3168??2019-06-03?14:21??Fedora遠程桌面\bin\Debug\Default?-?副本.rdp
?????文件???????1583??2019-06-03?15:10??Fedora遠程桌面\bin\Debug\Default.rdp
?????文件??????15872??2019-06-03?15:08??Fedora遠程桌面\bin\Debug\Fedora遠程桌面.exe
?????文件??????36352??2019-06-03?15:08??Fedora遠程桌面\bin\Debug\Fedora遠程桌面.pdb
?????文件??????14328??2019-06-03?15:08??Fedora遠程桌面\bin\Debug\Fedora遠程桌面.vshost.exe
?????文件????????490??2009-06-11?05:14??Fedora遠程桌面\bin\Debug\Fedora遠程桌面.vshost.exe.manifest
?????文件??????25173??2019-06-03?14:22??Fedora遠程桌面\DPAPI.cs
?????文件???????3818??2019-06-03?14:21??Fedora遠程桌面\Fedora遠程桌面.csproj
?????文件???????8090??2019-06-03?15:08??Fedora遠程桌面\Form1.cs
?????文件???????5186??2019-06-03?15:00??Fedora遠程桌面\Form1.Designer.cs
?????文件???????5814??2019-06-03?15:00??Fedora遠程桌面\Form1.resx
?????文件????????729??2019-06-03?15:08??Fedora遠程桌面\obj\Debug\Fedora遠程桌面.csproj.FileListAbsolute.txt
?????文件????????847??2019-06-03?15:00??Fedora遠程桌面\obj\Debug\Fedora遠程桌面.csproj.GenerateResource.Cache
?????文件??????15872??2019-06-03?15:08??Fedora遠程桌面\obj\Debug\Fedora遠程桌面.exe
?????文件????????180??2019-06-03?15:00??Fedora遠程桌面\obj\Debug\Fedora遠程桌面.Form1.resources
?????文件??????36352??2019-06-03?15:08??Fedora遠程桌面\obj\Debug\Fedora遠程桌面.pdb
?????文件????????180??2019-06-03?14:21??Fedora遠程桌面\obj\Debug\Fedora遠程桌面.Properties.Resources.resources
?????文件????????499??2019-06-03?10:59??Fedora遠程桌面\Program.cs
?????文件???????1386??2019-06-03?10:59??Fedora遠程桌面\Properties\AssemblyInfo.cs
?????文件???????2886??2019-06-03?10:59??Fedora遠程桌面\Properties\Resources.Designer.cs
?????文件???????5612??2019-06-03?10:59??Fedora遠程桌面\Properties\Resources.resx
?????文件???????1103??2019-06-03?10:59??Fedora遠程桌面\Properties\Settings.Designer.cs
?????文件????????249??2019-06-03?10:59??Fedora遠程桌面\Properties\Settings.settings
?????文件????????944??2019-06-03?10:59??Fedora遠程桌面.sln
?????目錄??????????0??2019-06-03?14:24??Fedora遠程桌面\obj\Debug\Refactor
?????目錄??????????0??2019-06-03?10:59??Fedora遠程桌面\obj\Debug\TempPE
?????目錄??????????0??2019-06-03?14:55??Fedora遠程桌面\bin\Debug
?????目錄??????????0??2019-06-03?15:08??Fedora遠程桌面\obj\Debug
?????目錄??????????0??2019-06-03?10:59??Fedora遠程桌面\bin
............此處省略6個文件信息
評論
共有 條評論