关于M8开发区站长给的代码中SetDVS函数的思考

近日在看M8开发资料的时候发现1个函数SetDVS, 给出资料的这哥们貌似也没搞清楚这个函数的具体意思,于是GOOGLE了很多资料终于找到这个函数的原理。

先看这个宏

#define IOCTL_HAL_SET_DVSONOFF CTL_CODE(FILE_DEVICE_UNKNOWN, 2103, METHOD_BUFFERED, FILE_ANY_ACCESS)

再看函数

BOOL SetDVS(BOOL bOn)
{
BOOL ret;
HANDLE hPWC = CreateFile(TEXT("PWC0:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);
if(hPWC != INVALID_HANDLE_VALUE)
{
  ret = DeviceIoControl (hPWC, IOCTL_HAL_SET_DVSONOFF,&bOn,sizeof(bOn), NULL,0, NULL, NULL);

  if(ret)
  {
   // 调用成功
  }
  else
  {
   // 调用失败
  }
  CloseHandle(hPWC);
}

return FALSE;
}

下面是DeviceIoControl 从MSDN载入的描述:这个函数是控制设备IO的

BOOL WINAPI DeviceIoControl(
  __in          HANDLE hDevice,
  __in          DWORD dwIoControlCode,
  __in          LPVOID lpInBuffer,
  __in          DWORD nInBufferSize,
  __out         LPVOID lpOutBuffer,
  __in          DWORD nOutBufferSize,
  __out         LPDWORD lpBytesReturned,
  __in          LPOVERLAPPED lpOverlapped
);

参考百度百科的说明 http://baike.baidu.com/view/1288761.htm?fr=ala0_1

CTL_CODE宏参数说明  http://hi.baidu.com/magical/blog ... 7ca92910df9bc6.html

DeviceIoControl (hPWC, IOCTL_HAL_SET_DVSONOFF,&bOn,sizeof(bOn), NULL,0, NULL, NULL);

CTL_CODE(FILE_DEVICE_UNKNOWN, 2103, METHOD_BUFFERED, FILE_ANY_ACCESS)解释

FILE_DEVICE_UNKNOWN 再winioctl.h中定义为 #define FILE_DEVICE_UNKNOWN   0x00000022 为微软自定义

关键是 2103 这个东西,Function主要用来区分DeviceIoControl的类型,0-2047是微软保留的 2048-4095是用户自定义的。所以2103这个东西代表的功能应该是MZ工程师自己定义的东西,和设备驱动有关。

所谓的节能不节能,应该是说CPU频率的高低吧、

据我猜想这个2013 实现的功能多半是通过&bOn的控制 实现极少量数据的IO转移,而且多半是数据的不停的转移,通过这样来保证CPU的频率提高。

或者2013 的功能是直接提高CPU频率,如果能直接提高CPU频率的话,那为什么前面要写这么多废话,写个公有函数不就得了,有点不太明白。



bOn = False时候关闭节能,这时候我猜测是不是通过加大通过高频率低数据调动IO,而使CPU频率提高。

bOn=True时候打开节能模式,这时候关闭了IO操作,CPU频率自然下降。

 

个人怀疑是调用了 OSTimeDlyHMSM()
或是其他什么提高时钟频率的办法,具体的不知道

以上是我的猜想。
欢迎没事来我的网站逛逛:www.j2megame.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值