Mass_Storage_Class和Serial_Class模式问题
我写了个应用程序,通过写注册表来实现这两种模式的切换,应用程序的代码是:
[code]
const TCHAR szregRootKey[] = TEXT("Drivers\USB\FunctionDrivers");
const TCHAR szregDefaultClientDriver[] = TEXT("Mass_Storage_Class");
long lResult = 0;
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szregRootKey, 0, KEY_ALL_ACCESS, &hDrvKey);
if(ERROR_SUCCESS == lResult)
{
WRITE_REG_SZ(L"DefaultClientDriver",szregDefaultClientDriver);
}
RegCloseKey(hDrvKey);
KernelIoControl (IOCTL_HAL_REBOOT,NULL,0,NULL,0,NULL);
可是系统重新启动的时候还是不能切换,我已经把注册表信息
[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers]
"DefaultClientDriver"=- ; erase previous default
"DefaultClientDriver"="Serial_Class"
[HKEY_LOCAL_MACHINE\Drivers\USB\FunctionDrivers]
;"DefaultClientDriver"=- ; erase previous default
; "DefaultClientDriver"="Mass_Storage_Class"
添加到HIVE BOOT SECTION和END HIVE BOOT SECTION之间了~~
请教高手
这个以前试过,应该是可以的。
首先确认你做的修改保存住了,
然后两种模式都能工作。
可以切换的,而且应该不需要重起吧,动态的切换
RegCloseKey(hDrvKey);
KernelIoControl (IOCTL_HAL_REBOOT,NULL,0,NULL,0,NULL);
在重起前是不是要刷注册表到文件系统中,有个函数叫FlushRegistry还是别的,查一下帮助文档吧
或者是注册表中把相应的项置上,这样Close注册表的时候会自动刷到Flash上的,不然重起注册表配置会丢
恩,LS说的对,我改了下应用程序,
[code]
long lResult = 0;
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szregRootKey, 0, KEY_ALL_ACCESS, &hDrvKey);
if(ERROR_SUCCESS == lResult)
{
WRITE_REG_SZ(L"DefaultClientDriver",szregDefaultClientDriver);
}
RegCloseKey(hDrvKey);
lResult = RegFlushKey(HKEY_LOCAL_MACHINE);
if(ERROR_SUCCESS == lResult)
{
KernelIoControl (IOCTL_HAL_REBOOT,NULL,0,NULL,0,NULL);
}
else
{
AfxMessageBox(L"Fail!");
}
可是这样还是不行,是不是要把USB的相关信息都要放到HIVE BOOT SECTION和END HIVE BOOT SECTION之间啊??
LS说的对,我把应用程序改成如下:
[code]
long lResult = 0;
lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, szregRootKey, 0, KEY_ALL_ACCESS, &hDrvKey);
if(ERROR_SUCCESS == lResult)
{
WRITE_REG_SZ(L"DefaultClientDriver",szregDefaultClientDriver);
}
RegCloseKey(hDrvKey);
lResult = RegFlushKey(HKEY_LOCAL_MACHINE);
if(ERROR_SUCCESS == lResult)
{
KernelIoControl (IOCTL_HAL_REBOOT,NULL,0,NULL,0,NULL);
}
else
{
AfxMessageBox(L"Fail!");
}
可是还是不行~
是不是USB的相关信息都要放到HIVE BOOT SECTION和END HIVE BOOT SECTION之间啊?
请教高手
我觉得改注册不行,应该调用USB function controller driver
createfile("UFN1:"...
deviceiocontrol(...IOCTL_UFN_CHANGE_CURRENT_CLIENT
10楼说得对。
看看这篇文章,上面有代码。
http://www.eggheadcafe.com/software/aspnet/29416837/how-to-switch-default-usb.aspx