システム - みる会図書館


検索対象: API散歩道 下
38件見つかりました。

1. API散歩道 下

第 9 章 メモリがあるのに足りないぞ ? ? ? 0 メモリマップ 図 1 メモリマップのイメージ コンべンショナルメモリ BIOS, VRAM など EMB ( IMB 以上 ) ▽ホラムズ「最初にメモリマップを確認しよう ( 図 1 ) 」 上 ↑ ↓ 下 「コンべンショナルメモリっていうのは 640KB 以下のメモリのことだろう ? 」 マホラムズ「まあ , そういうことだ。でも , どのコンべンショナルメモリかってことさ」 ■ワタソン「だけど , コンべンショナルメモリといったら , ひとっしかないじゃないか」 「ひとっとは限らないよ」 ■ワタソン「いったい , どうして・・・・・・」 マホラムズ「だって , Windows3.1 で DOS プロンプトをいくつも開けば , コンべンショ ナルメモリがたくさんできるじゃないか」 ■ワタソン「あ , そうか。確かに。コンべンショナルメモリって , 立ち上げる DOS アプ リの数だけできるのか」 ▽ホラムズ「ところが , Windows3.1 のエンハンスドモードが走っているとき , コンべン ショナルメモリはもう 1 個 , システム内に存在しているんだよ」 マホラムズ「つまり , DOS アプリが 1 個も走っていない状態であっても , コンべンショ ナルメモリ空間は 1 個だけ存在するんだ。このコンべンショナルメモリをも っている仮想マシンをシステム VM と呼ぶ」 「仮想マシンというのは , 1 個のパソコンであるかのようにふるまうシステム のことで , DOS アプリを起動するごとに 1 個ずつ作られるんだよね。でも , システム VM というのは , いったいなにをしている仮想マシンなんだい ? 」 「 Windows3.1 自身と , Windows アプリケーションを実行するためのものさ。 マホラムス ■ワタソン ■ワタソン「え ? 」 ▽ホラムス ■ワタソン

2. API散歩道 下

第 2 章 ウインドウを乗っ取れ ! きるということだ ( 図 2 ) 」 クセスすることになるわけで , システム側に設定されている値を直接変更で マホラムズ「つまり , オフセット値がマイナスの場合 , その構造体のほかのデータにア ■ワタソン「あ , 無視する気だな。いいんだいいんだ。どうせ僕は無視されるのさ」 ( ウインドウ情報構造体 ) システム予約領域 インスタンスデータ ューザー領域 ューザー領域 ( ウインドウ情報構造体 ) システム予約領域 通常はオフセット ( バイト数 ) で参照 負のオフセット ( 必ず定数を使うこと ) を与えると ウインドウ情報構造体にアクセスできる 図 2 インスタンスデータのアクセス ☆ / ヾステル ▽ホラムズ「いいや , ☆パステル ☆ / ヾステル マホラムズ 「まさに ワタソン「うっそー ! 」 るもの」 禁断のテクニックという雰囲気ですね」 禁断でもなんでもないよ。ちゃんと SDK のマニュアルに書いてあ マホラムズ「ちゃんとした基礎知識をもって読めば , しつかり見つけ出せるさ」 「ねえ , どこ ? マニュアルのどこですか ? 」 ▽ホラムズ「 SetWindowLong と SetWindowWord のところを調べてごらん」 「あ , これですか ? この GWL_STYLE とか , このへんの説明 ? 」 「そのとおり」 ■ワタソン「なになに。 DWL_ なんとかっていうのもあるんだなあ」 マホラムズ「それはダイアログボックス用の値だね。ダイアログボックスの場合は , ン

3. API散歩道 下

ーゆ第 7 章 プログラムで動画を作ろう ! ■ワタソン「 MAPI っていうのも , 結構面白そうだね」 できるのさ。ほかにもいろいろなプロバイダを書いて , 機能を拡張できるぞ」 マホラムズ「そうすれば , MS-Mail で NIFTY-Serve や PC-VAN の電子メールを読み書き ■ワタソン「そんなことができるんだ」 いかね ? 」 ルを送受信するトランスポートプロバイダを作ったら , 結構使えると思わな ュールで , 自由に作ることができる。 NIFTY-Serve や PC-VAN の電子メー きるんだ。これは任意の電子メールシステムと情報の交換を行うためのモジ マホラムズ「待て待て。 MAPI にはトランスポートプロバイダというモジュールが追加で 臨ワタソン「でも , うちじや電子メールなんて使ってないし・・・・・・」 いんだ。ユーザーインタフェースだけ作れば , それが使えるってことさ」 マホラムズ「それは大丈夫さ。電子メールの基本部分には MA 円のシステムを使えばい ワタソン「でも , ほかの電子メールシステムとの互換性をとらないと使えないよ」 ら , 自分で代わりのユーザーインタフェースを作れるわけだ」 マホラムズ「例えば , 「 MS - Ma ⅱみたいなかっこ悪い電子メールが使えるか ! 』と思った れるんだ」 ▽ホラムズ「そんなことはないぞ。 MAPI を使うと , 電子メールソフトを簡単に自分で作 ■ワタソン「なんだ , つまらない」 API と考えればいいかな」 「 MAPI とは Messaging Application program lnterfaceo まあ , 電子メールの ■ワタソン「 MAPI ってなんなの ? 」 コラム 0 MAPI とは ? ■ワタソン「え ? 」 マホラムズ

4. API散歩道 下

コンべンショナルメモリを使う要素を の仮想マシンを開いて , その中のコンべンショナルメモリを調べてもしよう ▽ホラムズ「つまり , 足りないのはシステム VM のコンべンショナルメモリなんだ。別 ワタソン「え ? どうして ? 」 ドを実行しても意味がないんだ」 という話を聞いて , あわてて DOS プロンプトを開いてその中で MEM コマン マホラムズ「ここで注意してほしいことがある。コンべンショナルメモリが足りない ! ■ワタソン「あ , なるほど」 共有して動くから 1 個で十分」 らね。でもシステム VM は 2 個以上は必要ないんだ。元々 Windows は資源を こういう構造だと , どんなプログラムを実行するにも仮想マシンが必要だか 0 コンべンショナルメモリを使う要素 ■ワタソン「あ , そうか。別のコンべンショナルメモリなんだ・ がないだろう ? 」 マホラムズ「なんだい ? 」 「さっきから気になっているんですけど」 ☆ / ヾステル / ヾステ丿レ ☆ ☆ / ヾステル ☆パステル / ヾステル ☆ / ヾステ丿レ ☆ 9. ナルメモリがなくなっちゃいますよね」 「そうですね。用もないのにこんな A 円を簡単に使われたら , コンべンショ マホラムズ「うん。でもここで問題になるのは誰がどんな目的でこの A 円を使うかだ」 「そんな A 円があったんですね」 サイズのメモリプロックを確保できる」 ルメモリ , この場合はシステム VM のコンべンショナルメモリに指定された る A 円が存在する。 GIobaIDosAIIoc だ。これを使うと確実にコンべンショナ マホラムズ「 A 円レベルで考えると , 確かにコンべンショナルメモリにメモリを確保す 「はい ! 」 置かなければならない要素を説明しよう」 ▽ホラムズ「よし。それじゃあ , Windows3.1 で , どうしてもコンべンショナルメモリに 「それは , どういうデータですか ? 」 一部のデータはコンべンショナルメモリに記録する必要があるんだ」 マホラムズ「ふむ。ほとんどのデータは確かにコンべンショナルメモリでなくてもいい。 してもコンべンショナルメモリでなければならない理由がないよ」 0 ワタソン「そうそう。メモリはセレクタ経由でアクセスするんだろう ? なら , どう ければならない理由が思いっかないんです」 「いままでの話から考えても , Windows がコンべンショナルメモリを使わな

5. API散歩道 下

ウインドウインスタンスデータ継 あらかじめ決まっていればね」 ☆パステル「え ? よくわかりません」 ■ワタソン「よしきた」 可能性があるときなんだ。例えば MDI 形式なんかのプログラムだと , ユーザ てくるのは , ひとつのプログラムの中で不特定多数のウインドウが作られる マホラムズ「つまり , ウインドウインスタンスデータにデータを保管するメリットが出 おき , 次に WM_NCDESTROY メッセージでそれを削除するように作れば大 プに領域を確保して , そのハンドルをインスタンスデータ領域にセットして マホラムズ「そんなことはないさ。まず , WM_NCCREATE メッセージでローカルヒー 「でも , それだとデータの管理が面倒じゃありませんか ? 」 ータ領域に保管するほうがいいだろう」 保管する領域を確保して , そこへのハンドルかポインタだけインスタンスデ しね。だから , 自分のアプリケーションのローカルヒープに実際のデータを 無駄遣いするアプリは嫌われるだけでなく , 実用上問題になる可能性も高い プ , つまりシステムリソースの中に記録されるからね。システムリソースを ては駄目だ。なにしろウインドウインスタンスデータは , USER. EXE のヒー 、「余談だけれど , この機能を使う場合 , あまり大きなデータをここに記録し 「確かにそうかもしれませんね。今度から使ってみます」 うが楽というものさ」 らそこまでの手間を考えれば , SetWindowLong のような API を呼び出すほ いちウインドウハンドルから対応する変数を検索しなければならない。だか インドウハンドルを引数にしてウインドウ関数が呼ばれるわけだから , いち インドウと変数の対応を調整するのは面倒だ。それに , ほとんどの要求はウ いちいちウ そういう場合 , ウインドウが作られたり消されたりするごとに ーがウインドウをいくつ開くかわからないし , いつ閉じるかもわからない。 ☆ / ヾステル マホラムス ☆ノヾステル ☆ / ヾステル マホラムズ ☆ / ヾステル 「アプリケーションエラーになるんじゃないですか ? 」 ■ワタソン「あ , 本題とぜんぜん関係ないじゃないか」 マホラムズ「 SetWindowLong に渡すオフセット値がマイナスだと , 「これは失敬。すぐに本題に入るよ」 ■ワタソン「ところで , いつになったら本題に入るんだい ? 」 「なるほど。そうやって記述するんですね」 丈夫。複雑にはならないさ」 いったいどうなると マホラムズ「はずれ。実はインスタンスデータ領域というのは , システムの中の , ンドウ情報構造体の一部として確保されているんだ」 ウイ 2

6. API散歩道 下

本書に記載したプログラム名 , システム名 , CPU 名などは一般に各社の登録商標です。 本文中では , TM, ⑨マークは明記していません。 ◎ 1995 本書のプログラムを含むすべての内容は , 著作権法上の保護 を受けています。著者 , 発行者の許諾を得ず , 無断で複写 , 複製することは禁じられています。

7. API散歩道 下

メモリ不足騒動記鬱 : ☆ノヾステル ☆ / ヾステル ☆ / ヾステル ■ワタソン マホラムス ☆ / ヾステル ☆ / ヾステ丿レ 「なにが問題なんですか ? 」 ■ワタソン「システムリソースだよ。これが足りなくなると , いくらメモリが余ってい てもプログラムが起動できなくなるんだよね」 「でも , ほら。システムリソースは 80 % 以上残ってますよ。メモリもかなり 残ってますね。どちらも十分だと思いますけど」 ■ワタソン「が一ん ! そんな馬鹿な・・ 「いったい , どうなってるんでしようか ? 」 「どっかで設定を間違えたかな。もう一度チェックしてみるかな」 ▽ホラムズ「その前に , ちょっと Windows を終了してみてくれたまえ。それから , DOS の MEM コマンドで , 残りメモリを調べてくれたまえ」 ■ワタソン「それでなにかわかるのかい ? そらっ , と。やってみたけど」 マホラムズ「やはりそうか。コンべンショナルメモリの残りが約 300KB 。これは少なす ぎるなあ」 ホラムズ「よし。それを説明しよう」 ワタソン「僕も知りたいぞ」 「私も初めて聞きます。ちょっと詳しく教えてください」 メモリ不足状態に陥るという話は理解できないぞ」 0 ワタソン「うん , それは理解できる。だけど , コンべンショナルメモリが足りないと 減少させるから , ますますメモリが苦しくなるというわけだ」 を消費している。そのうえ , 拡張カードの BIOSROM なんかが UMB 領域を ための DOS や Windows のデバドラなんかが大量にコンべンショナルメモリ マホラムズ「つまりね , このパソコンには , いろいろな拡張カードが入っていて , その にワタソン「なんだって ? 」 ういう問題があるのは事実なんだ」 ることがあるんだ。どちらかといえば設計ミスに近い問題だけど , 実際にそ マホラムズ「コンべンショナルメモリが足りないと , Windows3.1 はメモリ不足状態に陥 「え ? いったいどういうことなんですか ? 」 、「残念ながら関係があるんだ。いや , 本当に残念な話なんだ」 を使っているんだよ。走らせているのは Windows アプリケーションだけだ ・ワタソン「そんなことが関係あるのかい ? だって , Windows のエンハンスドモード

8. API散歩道 下

TOOLHELP の機能・。 はユーザーがひとりひとりの選択で買うものなんだからさあ」 マホラムズ「でも , アメリカみたいにみんな IBM 互換機になってしまえば , るのは楽になると思わないかい ? 」 ーワタソン「だから , 本音でもそんなことはいっちゃ駄目なの ! 」 ホラムズ「さて , TOOLHELP のほかの注意点だけど」 0 ワタソン「逃げたな , ホラムズめ・・・・・・」 マホラムズ「 TOOLHELP は DLL の形になっていて A 円を提供するけれど , ソフトを作 これらの API の本当の機能 , というか情報そのものは Windows のカーネルの中にあるん だ。つまり , TOOLHELP はシステムの内部とアプリケーションの世界を隔 てる薄い皮なんだ」 ■ワタソン「それはどういう意味だい ? 」 マホラムズ「つまりね , TOOLHELP を使わなくても同じことができるってことさ」 ■ワタソン「じゃあ , なんで TOOLHELP を使わなければならないんだい ? 」 「もう説明したじゃないか」 ■ワタソン「そうか。わかったぞ。 Windows の内部が変わっても TOOLHELP の API は 変わらないから , バージョンアップしても安全なんだ」 「そのとおり。 TOOLHELP は薄い皮 1 枚にすぎないかもしれないけれど , 皮 が 1 枚あるとないとでは大違いだからね。 Windows のバージョンが上がって も , 皮を差し替えるだけで対応できるわけだから。しかも , この皮はマイク ロソフトが公開したものだから , 安心して使えるね」 0 ワタソン「うんうん。そう考えると , TOOLHELP にはいいことも多いね」 ホラムズ「では , TOOLHELP の機能をざっと見てみよう。おおざっぱに分類すると , こんな機能を提供する API があるわけだ」 マホラムス ホラムス メモリ管理 ウインドウのクラス タスク管理 割り込み テノヾッグ 任意の位置からタスクを実行 プレークポイントの設定 タスクの状態を監視 スタックフレーム情報の取得 ヒープ情報の取得 メモリ内容の調査と修正 登録されたクラスの情報の取得 実行中のタスクに関する情報の取得 タスクの終了 システム割り込み ( フォールト ) 処理の設定

9. API散歩道 下

第 1 1 章 32 ヒット時代がくるぞ ! 0 アドレス空間を分離する 0 ワタソン「いまのは確かにすごい話なんだけど , イマイチ使い道がわからないな。プ ロセスごとにメモリ空間を分けて , いったいどんな利点があるんだい ? 」 v ホラムズ「いい質問だ。例えば複数のプログラムが同時に走っているとき , あるプロ グラムが暴走したとしよう」 ■ワタソン「ああ , ハングアップかい ? 」 マホラムズ「いや , もっとタチが悪くて , あらゆるメモリを破壊し尽くすタイプの暴走 だった場合だ」 0 ワタソン「それは本当にタチが悪いね。システムの重要な個所を破壊されたら , シス テムそのものが壊れるかもしれないからね」 マホラムズ「そうだろう ? そういう場合アドレス空間が分離されていれば , システム どころか一緒に走っているほかのプロセスにも一切手出しができないんだ」 ■ワタソン「え ? どうして ? 」 マホラムズ「だって , ポインタを最小から最大までカウントアップしても , それらが使 っているメモリにはアクセスできないわけだからね。どんなでたらめにメモ リに書き込みを行っても , ほかのプロセスには関係がないわけさ」 ■ワタソン「あ , そうか」 マホラムズ「つまりね , アドレス空間を分離してあると , 障害に非常に強くなるんだ」 ■ワタソン「うん , そうだね。確かに , そういう仕組みを使うメリットはあるなあ」 マホラムズ「それに暴走だけじゃないぞ。悪意のあるプログラムも排除できるんだ。例 えば , データを盗み出すようなプログラムをね」 ■ワタソン「つまり , ウイルスや , トロイの木馬が作りにくくなるってことだよね」 、「そうだ」 マホラムス ■ワタソン「うふふ。それはいいな。 マホラムズ「どうしたんだ ? 」 ■ワタソン「ちょっと聞くけどさ。 os の本体つて , 別のメモリ空間にあるんだよね ? 」 ・「そうだよ」 マホラムス ■ワタソン「どうやって OS を呼び出すの ? だって , サプルーチンコールをやりたくて も , 呼び出し先のアドレスが見えなければできないじゃない」 マホラムズ「ふむ。確かに , サプルーチンコールはできない。 c 言語でいうところの , 関 数ポインタ経由の関数呼び出しも無理だね。要するに , 常識的な手段では , OS の機能を呼び出すことはできないんだ」 ■ワタソン「それじゃ , 使いものにならないじゃないか」

10. API散歩道 下

コモンタイアログを然め / コモンダイアログって知っているかしワほら , ファイルを開くとか名前をつけて保存するとか , そ ラやってよく使われるダイアログボックスは , あらかじめ期 ndo Ⅳ s システムに含まれているんだ。 それを使えば : プログラムが小さくなるし , プログラミングの手間も減る。でも , そんな決まりき ったダイアログボックスじゃ満足できないと思ったら・・ ワタソン談 0 ワタソン氏バステルを見舞う ■ワタソン「ホラムズ , っき合わせちゃって悪いな」 マホラムズ「いやあ , かまわないさ」 ■ワタソン「でも , っき合ってくれるとは思わなかったな」 マホラムズ「だってほら , 珍しいじゃないか。朴念仁の君が , 女の子を見舞うなんて」 ■ワタソン「僕はそんなに朴念仁じゃないぞ。後輩が 2 週間も大学に顔を見せないと聞け ば , 見にいくくらいの義務感はあるさ」 マホラムズ「義務感ね。やつばりカタブツだなあ」 0 ワタソン「な , なにをいっているんだ。そうでなかったら , あんなパステルの下宿な んかに , わざわざ自分から行くものか。やつれ切ってひどい病気らしいと聞 いたから行ってやるだけで・・・・・・」