|
実際に rdmsr/wrmsr を vxd 側に移してみました。
SysInfo.sys からMSR関係のソ〜スをコピペするだけで
問題なく動作するようです。(ただ hlt は試していません。)
vxd の動作チェックをしていたら ReturnedLength が
常に0である事に気がつきました。
DIOCPARAMETERS のメンバ名を見ると
lpcbBytesReturned は lpから始まっているので
&lpDIOCParms->lpcbBytesReturned
を
(ULONG *)lpDIOCParms->lpcbBytesReturned
に変更すると ReturnedLength に値が入りました。
これで「ペ〜ジ違反」が直るかと思いましたがダメでした。
現在わかっているのは
・CrystalCPUID.exe と SysInfo.dll の最適化をOFFにすると動作する。
・スタック領域の書き込みで落ちる。
- PciInfo.cpp -
c = _pciConfigReadChar( address >> 16, 0x82);
c |= 0x04; ← 今回はここで落ちた
- アセンブラ -
or al,4
mov [ebp-4],al ← 今回はここで落ちた
もう少し探っていきたいと思います。
ではでは。
|
|