龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC6下编译进Ring0代码的疑惑(6)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
int Freq; RING0PROC BeepOn() { ENTERRING0; BYTE b; if ((Freq = 20) (Freq = 20000)) { Freq = 1193181 / Freq; b = _inp(0x61); if ((b 3) == 0) { _outp(0x61, (BYTE) (b | 3)); _outp(0x43, 0xb6); } _outp(0x

int Freq;
RING0PROC BeepOn()
{
 ENTERRING0;
 
    BYTE b;
 
    if ((Freq >= 20) && (Freq <= 20000))
    {
        Freq = 1193181 / Freq;
        b = _inp(0x61);
        if ((b & 3) == 0)
  {
   _outp(0x61, (BYTE) (b | 3));
   _outp(0x43, 0xb6);
  }
        _outp(0x42, (BYTE) Freq);
        _outp(0x42, (BYTE) (Freq >> 8));
    };
 
 LEAVERING0;
};

RING0PROC BeepOff()
{
 ENTERRING0;
 
    BYTE b;
 
    b= (_inp(0x61) & 0xfc);
    _outp(0x61, b);
 
 LEAVERING0;
};

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
 ZeroMemory(&r0Data,sizeof(struct _RING0DATA));
 VirtualLock((PVOID)&r0Data,sizeof(struct _RING0DATA));
 ExecRing0Proc((ULONG)Ring0Proc1,0x100);
 ExecRing0Proc((ULONG)Ring0Proc2,0x100);
 VirtualUnlock((PVOID)&r0Data,sizeof(struct _RING0DATA));
 
 char* msg=new char[100];
 sprintf(msg,"CR0 = %x CR2 = %x CR3 = %x ", r0Data.mcr0,r0Data.mcr2,r0Data.mcr3);
 MessageBox(NULL,msg,NULL,NULL);
 
 delete [] msg;
 Freq=5000;
 
 ExecRing0Proc((ULONG)BeepOn,0x100);
 Sleep(1000);
 Freq=3000;
 ExecRing0Proc((ULONG)BeepOn,0x100);
 Sleep(1000);
 ExecRing0Proc((ULONG)BeepOff,0x100);
 MessageBox(NULL,"com3",NULL,NULL);
 return 0;
}

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!

热评话题

按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接