免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 各类编程 > vc清空系统CMOS的几种方法(3)

vc清空系统CMOS的几种方法(3)

时间:2012-03-26 21:25来源:未知 整理:寂涯网络 点击:


大的《对 Native API NtSystemDebugControl 的分析 这篇文章》
在这里我们手动跟一下 NtSystemDebugControl 这个函数,测试环境是 XP SP3
键入 u NtSystemDebugControl 如图 6 注意这两个函数
KdpSysReadIoSpace
KdpSysWriteIoSpace
原来 NtSystemDebugControl 是调用这两个函数来进行端口读写的
我们再跟一下这两个函数  先跟一下 KdpSysReadIoSpace 这个函数吧 看一下他调用哪
个函数进行端口读写。
u  KdpSysReadIoSpace
如图 7 注意图 7 的三个 call 很熟悉的函数吧
nt!_imp  READ_PORT_ULONG nt!_imp  READ_PORT_USHORT nt!_imp  READ_PORT_UCHAR
你再跟一下 KdpSysWriteIoSpace 会发现它其实也是调用三个宏定义来的
WRITE_PORT_UCHAR WRITE_PORT_USHORT WRITE_PORT_ULONG


我们总结一下吧
NtSystemDebugControl--->KdpSysReadIoSpace--->三个宏定义
NtSystemDebugControl--->KdpSysWriteIoSpace--->三个宏定义
 
 
第四种方法 Ke386QueryAccessMap Ke386SetIoAccessMap
Ke386IoSetAccessProcess
 
由于这个方法看雪的 combojiang 大侠有详细的介绍,再这里不再浪费篇幅详细介绍了大家可以参考这个帖子,介绍的很详细。
http://bbs.pediy.com/showthread.php?p=434124#post434124
第五种方法  WinIo 的使用
最新WinIO3.0 可以从这里下载,http://www.internals.com/
WinIo3.0 里面不自带 lib 文件,可以自己用 VS2008 编译,可能会编译出错,这里我提
供一下我编译后的 lib 文件,见附件。
WinIo 调用的也是六个宏定义,这里为什么拿出篇幅来说这个呢,因为 WinIo 对于各个
版本的 windows 都支持的很好。WIN2000-WIN7 版本都支持,当然 X64 上 WinIo 没有签名,
调用的方法帮助文档里面也说的很清楚,我给出两个示例来说明 WinIo 的使用。
方法 1 使用.lib 文件的时候加载 DLL 代码如下 此方法需要用 VS2008 编译下 winio 得
到 lib 文件
 
#include "stdio.h"
#include "windows.h"
#include ".\WinIo\Source\Dll\winio.h"
#pragma comment(lib,"WinIo32")//tell the compiler where the file is w
WCHAR *str=L".\\WinIo\\Binaries\\WinIo32.sys";
int main()
{
//   HMODULE hlib = LoadLibrary("WinIo32.dll");
//PVOID p = GetProcAddress(hlib , "InitializeWinIo");
bool    _stdcall a= InitializeWinIo();
if (a==0)
{
printf("WinIo 初始化失败");
}
else
{
bool bReta=SetPortVal(0x70,12224344,4);
bool bRetb=SetPortVal(0x71,34543534,4);
if(bReta&&bRetb)
printf("successful");
//关闭 WinIO 驱动
ShutdownWinIo();
}
return 0;
};
 
方法 2 不使用.lib 文件 使用 LoadLibrary 和 GetProcAddress 动态加载
我第一次编译 WinIo 获取 lib 文件的时候失败了,后来把 VS2008 重新修复了一遍编译
成功,鉴于这种情况我给一个动态加载的方法。
 
#include "stdio.h"
#include "windows.h"
#include ".\WinIo\Source\Dll\winio.h"
//#pragma comment(lib,"WinIo32")//tell the compiler where the file is w
//WCHAR *str=L".\\WinIo\\Binaries\\WinIo32.sys";
//bool SetPortVal(WORD wPortAddr,DWORD dwPortVal,BYTE bSize);
//void ShutdownWinIo();
typedef    bool    (_stdcall *bRet1)();
typedef    bool     (_stdcall *bRet2)(WORD wPortAddr,DWORD dwPortVal,BYTE
bSize);
typedef    void    (_stdcall *bVoid)();
int main()
{
HMODULE h1=::LoadLibrary("WinIo32.dll");
if (h1 !=NULL)
{
//bool _stdcall InitializeWinIo();
//2 地址 代理函数=(地址)::GetProcAddress(h,"原函数")
bRet1 iz=(bRet1)::GetProcAddress(h1,"InitializeWinIo");
if(!iz)
{
printf("fale in InitializeWinIo GetProcAddress");
}
else
{
bRet2 SPV=(bRet2)::GetProcAddress(h1,"SetPortVal");
if (!SPV)
{printf("fale in SetPortVal GetProcAddress");}
else
{
bVoid SD=(bVoid)::GetProcAddress(h1,"ShutdownWinIo");

本页地址 http://www.jybase.net/biancheng/20120326810.html

百度搜索更多

谷歌搜索更多

顶一下
(1)
100%
踩一下
(0)
0%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com