DELL XPS M1210が起動しない件について
XPS M1210が起動しなくなりました.
症状としては次のようなものです.
1.電源ボタンを押してもBIOSの画面が出ず,黒いまま.
2.電源ボタンのランプはついており,[9]のランプは点灯,[A][↓]のランプは点滅.
3.暫くすると電源が落ちる.
という状態.
この状態になる前に,このパソコンは「動作が緩慢になる」,「メモリを換える」,「埃を取る」ということをしました.
結論はHP2133より抜き出したメモリ(2G)がどういう経緯か壊れていたのが原因でした.
おそらく私の扱いが悪かったのでしょう.
壊れたメモリを使おうとしたため,BIOSで止まっていました.
ここで注意してほしいのは,BIOSが起動しないという点です.
電源ON → 起動(?) → BIOS起動しない
のケースでは,マザーボードやチップセットを疑います.
CPUの故障はレアなので,あまり考えません.
しかし,BIOS起動時に初期化などをしているので,メイン構成機器のどれかがダメでもBIOSが起動しないケースがあります.
従って・・・こういう時はなるべくいろいろ調べてくださいね.
プログラムのゾンビ化
コンピュータウィルスのプログラムには,稀にゾンビ化させているものがあります.
ここでいうゾンビ化とは,管理プロセスに任意のプロセスを監視させ,任意のプロセスを終了させないようにすることです.
Process process = new Process(); process.EnableRaisingEvents = true; process.Exited += new EventHandler(process_Exited); process.StartInfo = new ProcessStartInfo(str); process.Start();
により,EnableRaisingEventsをtrue,process_Exited関数をイベントハンドラに登録します.
これによりプロセスが終了した場合はprocess_Exited関数が呼ばれるので次のように設定します.
void process_Exited(object sender, EventArgs e) { { Process process = (Process)sender; process.Start(); } }
これで終了したプロセスは再度起動されます.
後はこのプロセスを隠蔽できれば,割とよいゾンビ化の成功です.
C++アプリケーションとのメモリ共有
C++アプリケーションでのメモリ共有方法には,名前付きパイプなど色々な方法があると思う.
その中でもメモリマップドファイルはバイナリの共有としては優れていると思う.
C++同士ではコンソール,MFC,ATL問わず容易に実装できるが,C#と共有しようとすると難しい.
.NET 4.0からはライブラリ内にメモリマップドファイル用のシステムが存在する.
しかし,3.5以前では同様の仕組みは見当たらない(管理人は歴が浅いが).
この場合,C++でのライブラリをマネージドC++でDLLとして作成する.
このDLLにC++とC#の仲介をさせる.
DLLの作成方法として,Visual Studioのプロジェクトの作成の際に,DLL(CRT)を選択して作成する.
その時,refで指定されるclassがC#で利用できるようになる.
ただし,注意として,ヘッダに書くクラス定義はC#の文法,内部の処理はC++の文法となる.
なので,データの受け渡しにはシビアに計画しなければならない.
例えば,C#のデータはbyte型データでも,C++に持ち込むと3byte分消費しているようだ.
なので,C++の配列メンバにMarshal.Copyで書き込むと意図した結果にならないと思われる.
TinyXMLを使いました.
使ったのでログしときます.
VC++9.0でコンソールプロジェクトを作り,空のプロジェクトにします.
プロジェクト内に
- tinyxml.h
- tinystr.h
- tinyxml.cpp
- tinystr.cpp
- tinyxmlparser.cpp
- tinyxmlerror.cpp
を放り込みます.
これで準備は完了です.
main.cppを作り,例によってint main(void)です.
TiXmlDocument xml;
により,インスタンスを生成します.
xml.LoadFile("ファイル名")
により,xmlファイルを読み込みます.
TiXmlElement* element = xml.RootElement();
によりxmlルートの要素を取得します.
後は,煮るなり焼くなり(^^)
一応わかりやすく関数の概要を残します.
ここはコピペですが.
- TiXmlDocument::LoadFile…ファイルを読み込む
- TiXmlDocument::RootElement…XML木構造のルートの要素を取得する
- TiXmlElement::FirstChildElement…指定した要素が持つ子の要素の1つ目を取得する
- TiXmlElement::NextSiblingElement…FirstChildElementの後に使うことで,次の要素を取得する
- TiXmlElement::Value…指定した要素から
777 のtagを取得する - TiXmlElement::GetText…指定した要素から
777 の777を取得する - TiXmlElement::Attribute…指定した要素から
777 のaを指定した場合,strを取得する
Windows 7使った
内部的には7とVistaはそれほど差はありません.
それでもVistaはダメで7は優秀なのでしょうか?
個人的にM$の営業戦略の差が評価の差だと思いますが.
とりあえずセキュリティの面(UAC等)から考えても,Vista > 7 > XPでOKだと思います.
XPは軽いとよく聞きますが…,アンチウィルスとか常駐アプリを積み始めると重くなるので注意.
ReadyBoost(嫌いです)やSuperFetchで結構早くなります.
た・だ・し7も暫く使い続けると,重くなります.
きっと7を褒めている人は,Vista Home Premiumを使ってて,7 Professionalを使った人でしょう.
7 ProfessionalはVista Bussinessと等価なので,一般人はVista Home PremiumからVista Bussinessへのバージョンアップ感がよかったのでは(謎).
まぁ一番ダメなのは,Windows Steady Stateが対応していない点でしょうか.
アレはプログラム自体打ち切りたかったようですが,さすがM$としか言いようがないです.
M$さんは7の売り込みによほど大金を積みこまれたんでしょう.