新規記事投稿 フォロー記事投稿 記事のキャンセル
From: Akitaka HOSOMI <hosomi@ga2.so-net.ne.jp>
Subject: Re: 仮想デバイスドライバ( VxD 篇 .... 物理メモリの読み書き )
Date: 1998/11/02 04:08:02
Reference: junge/00196

Win16 での物理メモリへのアクセス方法は、


    Win16 API : AllocSelector
                FreeSelector
                SetSelectorBase
                SetSelectorLimit

を使ったり、

    DPMI のインターフェイス

などを使ってたようだ。


ただし、これを、そのまま Win 32 でやるには、ちと無理があり、スマートなやり方と
は言えない。

上記のセレクタ関連の API は、Win32 で廃止されたものだし、DPMI で、下位 1 MB の
メモリにアクセスするってのも、マズイようだ。





で、何かないのかなぁ、と探していたら、あった、あった↓。

 Interface 1997/10 月号( CQ 出版社 )の Windows デバイスドライバ の特集記事


 VxD( C で書かれたソース )の中から、

      _MapPhysToLinear

を使って、物理メモリをリニアアドレスにマッピングしてる。


これは、Win32 の API ではなさそうだから、リング 0 で提供されてるコールだろね。
そんなわけで、アプリからは、直接、呼べないぞ、たぶん。

# DDK があれば、確認できるんだけどなぁ。




 _MapPhysToLinear の引数として、物理メモリアドレスと領域サイズなどを与えて、
コールしてやれば、戻り値として、リニアアドレスが返るみたい。


これでマッピングした後、戻り値のリニアアドレスを、そのままポインタに代入して、
通常通り、読み書きしてるようだ。

# なんと、たわいの無い ..... 簡単、お手軽。

このマッピングは、OS がシャットダウンするまで有効だ、なんてことも書いてある。


 C から呼んでるので、アセンブラからは、__MapPhysToLinear ってことだね。
戻り値は、EAX ってところかな .....



よっしゃ、物理メモリの取り扱いは、これで、OK っつう感じ。 Good !




#  NASA TV LIVE を見ながら、これを書いてたりする。

# 今、ディスカバリーが、アームを使って、スパルタン衛星をベイから取り出すところ
# だ。

# スペースシャトルからの映像が、インターネットを使って、ライブで見えるのは、
# スゴイ。いい時代だ。