新規記事投稿
フォロー記事投稿
記事のキャンセル
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 を見ながら、これを書いてたりする。
# 今、ディスカバリーが、アームを使って、スパルタン衛星をベイから取り出すところ
# だ。
# スペースシャトルからの映像が、インターネットを使って、ライブで見えるのは、
# スゴイ。いい時代だ。