ランダムウォーカー

守備範囲はコンピュータ、英語、Windows など。 あと株も。 

Ads by Google  (スポンサー広告)

                    --/--/--(--) --:--:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Com(-) ] [ Tb(-) ] [ top↑ ]

debug on で vista freeze  (Programming::Windows VIA C/C++)

                    2008/03/03(Mon) 02:07:47

すごい遅いペースで読んでいる。やっと3章に入った。この章に書いているようなことはちょっとは理解しているつもりなので早く済むと思う。

しかし、さっきちょっと2時間くらい無駄な時間をすごしてしまった。たぶん vista のせいで。

今後のために、kernel の構造体を windbg のローカルカーネルデバッグで、構造体シンボル解決させて見ようと思ったのだけど、どうも vista だとローカルカーネルデバッグができないらしい(XP ならできる)。

で、調べたら debug モードで起動したら OK らしいので、bcdedit で新しく debug モードで起動するブートエントリを作成して、そのエントリから起動してみた。

そしたらなぜか完全にフリーズしてしまいやがった。三回トライしたが、三回ともフリーズした。フリーズするタイミングはまちまちなので、ひょっとして HW が壊れたかと不安になったのだが、どうやら debug を off にしているエントリからだとフリーズしないようだ。

ということで、vista で debug を on にすると、高頻度でフリーズする。ということになるが、そんなアホな話聞いたことがない。HW 依存の問題か何か? まぁ安い HW なので仕方ない気もする。というか os の機能の on/off でフリーズする/しないが分かれるので OS の問題かもしれない。

一応、がんばってデバッグしてみようとして、フリーズしたとこでクラッシュさせようとしたのだが、どうもフリーズしたタイミングで KB クラッシュが効かない。残る手段は、もう一台 の PC からリモートでデバッグすることになるが、さすがにめんどくさいし、接続機器とかも無いので断念。

でももうすぐ SP1 でるし、それで直ったりしてくれないかね。


では本題。いや、本題はもう終わったか。
今は Object のアクセス権についての節を読んでいる。vista はセキュリティにやたら厳しくなったので今まで API 越しに レジストリの all access を要求していたアプリケーションは失敗してしまう場合があるとのことだ。アクセスを要求するのは、API の引数からで、アクセスが妥当か判断するのは、そのオブジェクトが作成された際に作成された、カーネルオブジェクトの構造体メンバ。

具体的な違いとしては、たぶんこうだ。

デフォルトのアクセス権で作成されたカーネルオブジェクトを、all access でハンドルゲットしようとしたら、vista では失敗し、xp では成功する。これはデフォルトのセキュリティレベルが変わったからだ。

また、オブジェクトがカーネルオブジェクトかそうでないかを見分けるには、オブジェクトを作成するときに使った API を見ればいい。API に渡す引数の中で、セキュリティ情報(_security_attribute)を渡していたら、その API はその先でカーネルオブジェクトを生成しているとういことになる。

基本、カーネルオブジェクトはグラフィック関連のオブジェクトは持たない。カーネル空間は貴重なので、馬鹿でかいグラフィック関連の情報は入れられないからだ。

また逆に、なぜユーザオブジェクトにセキュリティが必要ないのかというと、プロセス固有のユーザオブジェクトが、システムにとってあまり重要でないからだろう。なんでもかんでもセキュリティを考慮しだすと、効率や生産性とかが犠牲になる。引数も多くなりプログラマが混乱しだす。

やっぱ windows はよくできている。大学院までは unix で行こうと思っていたのだけど、乗り換えてたぶん正解。linux は OS ビルドが個人レベルで簡単にできるのが長所だが、たぶんそれは同時に短所でもある。互換性がビルドによっては維持されなかったりするからだ。これじゃあ AP 側は苦労するのも無理ない。

互換性は超大事です。

[ コメント (0) ] [ トラバ歓迎 (0) ] [ top↑ ]

manipulation  (Programming::Windows VIA C/C++)

                    2008/02/25(Mon) 02:08:46

現在二章:Working with Characters and Strings を読んでいるが、ちょっと待ってほしいことがありすぎる。 いつから Strcat() は StringCchCatEx() とか言うへんてこな名前になってしまったのか。なぜ引数を6つもとらねばならないのか。アホじゃないのか?

文字列操作に起因するバグが多いのはわかるが、ちょっとやりすぎではなかろうか。文字列に関するバグに対しては、偉いプログラマ達が文字列操作の前のコピー先バッファサイズ確認や、戻り値を入念にチェックすることなどの fail-safe 機構を伝統的に作成してきたはずだ。これらの代わりに fail-safe 機構をあらかじめ埋め込んだ関数を作成すればよいのは理解できるが、そもそもそれらの関数の構造を理解することに時間が掛かってしまいそうに思うのは私だけなんだろうか。そもそも MS の API には引数が多すぎる。確かに API を理解できる人にとっては便利になるのだろうが、こうも次々に新たなクソ多い引数を必要とする API をつくりまくらないで欲しい。

私自身あまりプログラマと言っていいほどプログラムを作成してきているわけではないのだが、世の Windows プログラマ達はこの状況についてどう思っているのだろうか。
複雑で欠陥があるかもしれない Fucking 関数の機構を丸暗記するより、基本的で単純な関数を用いてあらゆる引数や戻り値を想定して論理的に安全なコードを書くほうが絶対に面白いと思うのだが。

いきなり勉強する気が失せるので嫌になる。Windows が Unix 系プログラマに嫌われている理由がよくわかる。まぁ実際はどっちもどっちだと思うのだけれども。
だがこれが世の中の流れと言うのならある程度は乗らざるを得ないが、あきれるほど無駄に多い引数を要求する関数はさすがに知らん振りしてしまおう。

更に読み進めてみると笑ってしまわざるを得ない関数を発見した。知らん振りするべき関数の一つだ。
CompareString() 関数という関数だが、これは6つの引数を取り、そのうちの一つは関数の動作について微調整を行うためのフラグだ。そのフラグの中の一つがたまらなく可笑しい。

NORM_IGNOREKANATYPE

というフラグだが、文字列比較の際に、ひらがなとカタカナを区別しないで比較してくれるのだそうだ。日本人は自分の国の文字もロクに扱えないほどアホだと言う皮肉で作ってくれたのだろうか、それとも恥を知らない日系企業のリクエストだろうか。

もう本当にやる気が無くなる。こんなもの覚えたいと思うわけがない。
いやいや、しかしもうやると決めてしまったことなので最後までやるしかない。
読み進めていくと、更に笑える関数にめぐり合えるかもしれないし。

[ コメント (0) ] [ トラバ歓迎 (0) ] [ top↑ ]

プログラミングの勉強  (Programming::Windows VIA C/C++)

                    2008/02/17(Sun) 21:52:16

始まり(以下略) にて大きな目標があると言った。その為には TOEIC 900(もしくはこれに準ずる実力)程度の英語力は最低限不可欠と推定し、今は実際に TOEIC 900 に向けて英語を勉強中だ。そしてまだどうなるかわからないが、今年の 5月の公式テストで実際に取得するつもりでもある。

しかし、それはそれ。大きな目標のためには英語だけやっていればいいわけではない。Programming の勉強もしなければならないのだ。ここまで言うともうかなり明らかだが、私は外資系のコンピュータ会社に転職したいと思っている。願わくば来年中に。今ははっきりと転職先の会社を決めているわけではないが、ある程度の目星はつけている。

しかし、一概にプログラミングと言っても幅広いわけで。残念ながら私は今のところ、C言語しかわからないのだが、多く言語を操ろうとは思わない。C言語と何か一つのスクリプト言語を使いこなせて、ある程度アセンブラが読めればそれだけで十分だと思っている。ということで、具体的な Programming の目標としては、Visual Studio と Windows API をある程度巧みに操ることが当面の目標だ。

だがこの目標は抽象的過ぎるので、具体的な目標としてある洋書技術本を読破することを設定しようと思う。これならば英語の勉強にもなるし、プログラミングの練習にもなる。一石二鳥とはまさにこのことよ。

その本に Jeffery Richter 著 「Windows VIA C/C++」を設定することにする。

Windows Via C/C++ (PRO-Developer)Windows Via C/C++ (PRO-Developer)
(2007/11/28)
不明

商品詳細を見る

この人は今まで数多くの Windows API に関する本を執筆していて、Windows を大まかに「カーネル」と「アプリケーション、API」に二分するならば、後者に対する権威と言ってもいいくらいの人でもあると私は思っている。ちなみに前者の権威は Mark Russinovich だと思っている。あくまで、「それぞれの分野でとても有用で有名な書籍を出版している人物」という見地から見ればだが。あー、しかし Mark Russinovich氏の場合は、とても有用なツールを数多くリリースしているので多少バイアスをかけてしまっているかもしれない。

あと、ついさっきアマゾンで Jeff の本のアドレスを探している際に気づいたのだが、なんと「Windows Internal」の 5th Edition がもうすぐ出版されるらしい!!!これは絶対に買わねば!見た感じ表紙はかなり Cool な感じに仕上がっている。中身も Cool に違いない。

Windows Internals (PRO-Developer)Windows Internals (PRO-Developer)
(2008/05/28)
David A. Solomon

商品詳細を見る

ちょっと話が脱線しかけたが当面の目標は Jeff の本を読破することだ。目標を立てるからには期限と、具体的な達成条件を設定しなければならない。とういことで以下のように設定する。

・ ひと通り読破する。
・ 全てのサンプルコードを実行する
・ サンプルコードの意味を 50%以上理解する
・ 期限は、Windows Internal の 5th Edition が出版されるまで(2008/5/28)

hm、期限はかなり長めに取った(100日ほどある)が、かなり内容が濃いし、英語だし、700ページ以上あるので致し方ない。これで足りるのかどうかすら不安になってくる。しかも TOEIC の公式テストと思いっきり被るが、試練は人を成長させると思って諦めよう。5月の公開テストで TOEIC 900 が取得できて、かつこの本を読破できたのなら、かなりの自信になりそうだ。

それでは Start !

[ コメント (0) ] [ トラバ歓迎 (0) ] [ top↑ ]
プロフィール

Author:りん
FC2ブログへようこそ!

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

ブロとも申請フォーム

この人とブロともになる

FC2Ad

FC2ブログ