norains的专栏

只专注于WINCE开发

原创 WinCE同步和硬盘模式的切换收藏

新一篇: 四论在C++类中实现Windows窗口的创建 | 旧一篇: 为何胆怯?

//========================================================================
//TITLE:
//    WinCE同步和硬盘模式的切换
//AUTHOR:
//    norains
//DATE:
//    Monday  22-October-2007
//Environment:
//        EVC4.0 + Windows CE 5.0 Standard SDK
//========================================================================

    本文一下内容基于RMI AU1200的实验平台,且没有更改默认的同步及硬盘模式的驱动文件名,故无法保证本文的方法适用于所有的平台.
   
    在进行我们的文章之前,还有一件事情需要确认,就是make nk.bin时已经将两种模式的特性添加.
   
    如果平台符合之前所说的两个条件,那么离成功已经只有一步之遥,剩下的也就非常简单的(当然之前也没见得多复杂^_^).
   
    接上USB线,wince是决定采用同步还是硬盘模式,取决于注册表的参数.如果在DefaultClientDriver的键值是Serial_Class,则是同步模式;反之,如果为Mass_Storage_Class,则为硬盘模式.需要留意一点的是,device.exe在启动后会自动加载usb的驱动.换句话说,如果系统成功启动后然后再更改注册表,那么无论改为何种模式,链接USB线后都是之前的模式.所以,如果我们需要设置生效,需要在设置完毕后重启机器.
   
    说破了实在不之前,让我们来看看模式设置的代码:
    CReg reg;
    reg.Create(HKEY_LOCAL_MACHINE,TEXT(
"Drivers\USB\FunctionDrivers"));

    TCHAR szDisp[MAX_PATH] 
= {0};
    reg.GetValueSZ(TEXT(
"DefaultClientDriver"),szDisp,MAX_PATH);
    MessageBox(NULL,szDisp,TEXT(
"The current value"),MB_OK);

    
//同步模式
    
//reg.SetSZ(TEXT("DefaultClientDriver"),TEXT("Serial_Class"));
    
    
//硬盘模式
    
//reg.SetSZ(TEXT("DefaultClientDriver"),TEXT("Mass_Storage_Class"));
    
    reg.Reset();
 
    一切就是那么简单,寥寥几句代码,即可完成两种模式的转换.如果比较无聊,接上USB线啥都不做,那只要给"DefaultClientDriver"一个区别于以上字符串的数值即可.

发表于 @ 2007年10月22日 21:51:00|评论(loading...)|编辑

新一篇: 四论在C++类中实现Windows窗口的创建 | 旧一篇: 为何胆怯?

评论

#hkooyu 发表于2008-04-13 02:51:23  IP: 220.231.147.*
仅仅修改注册表而已,不用做其他的激活操作就可以切换吗?
2008-04-13 22:15:30作者回复
文章中明确指出,修改注册表生效的结果是必须建立在两种模式都已经包含于nk.bin的基础上。
#qiuqiu 发表于2008-07-29 15:34:42  IP: 58.251.85.*
我也试了下,更改USB工作模式(更改注册表成功了)必须要重新启动设备,才能生效.
不知有无一种方法可以不重启设备就生效的,就像对系统声音做控制类似,更改注册表后调用AudioUpdateFromRegistry通知系统以对注册表进行更改,系统立即启动更改后的功能,而不用重启设备.
不知哪位大吓有做过,不吝赐教!
发表评论  


登录
Csdn Blog version 3.1a
Copyright © norains