// ポインタ // ・Box 化不能 // ・型パラメータに指定出来ない (ポインタ配列は出来るのに…) // ・匿名メソッドの引数に出来ない /* そもそもポインタは Box 化出来ない… (System.IntPtr に変換して自動的にやってくれても良いのに) * [afh.Tester.TestMethod] * public unsafe static void testPointerBoxing(Log log){ * byte* alpha=(byte*)0x400000; * object o=alpha; * log.WriteLine("{0}",o is void*); * } * //*/ public unsafe static void chkEnumModules(Log log) { // Notepad.exe を取得 Diag::Process[] procs = Diag::Process.GetProcessesByName("notepad"); if (procs.Length == 0) { log.WriteLine("現在 notepad.exe は動いていません。"); return; } Diag::Process proc = procs[0]; for (int i = 1; i < procs.Length; i++) { procs[i].Close(); } log.WriteLine("プロセス notepad.exe を捕まえました"); log.WriteVar("Id", proc.Id.ToString("X8")); log.WriteVar("Handle", proc.Handle.ToString("X8")); // Modules log.WriteLine("Diag::Process.Modules より"); log.Lock(); log.AddIndent(); try{ foreach (Diag::ProcessModule mod in proc.Modules) { log.WriteVar("Module-Name", mod.ModuleName); log.WriteVar("Base-Address", mod.BaseAddress.ToString("X8")); log.WriteVar("Module-Size", mod.ModuleMemorySize.ToString("X8")); } }finally{ log.RemoveIndent(); log.Unlock(); } // Modules2 log.WriteLine("<DbgHelp>::EnumerateLoadedModules より"); log.Lock(); log.AddIndent(); try{ #pragma warning disable 618 DbgHelp.EnumerateLoadedModules(proc.Handle, delegate(string name, System.IntPtr modbase, uint modsize, System.IntPtr userData){ log.WriteVar("Module-Name", name); log.WriteVar("Base-Address", modbase.ToString("X8")); log.WriteVar("Module-Size", modsize.ToString("X8")); return(true); }, System.IntPtr.Zero); #pragma warning restore 618 }finally{ log.RemoveIndent(); log.Unlock(); } }