Exemplo n.º 1
0
        // ポインタ
        // ・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();
            }
        }