首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

JAGUARSDN1网络的开机自动启动 禁用,WIFI模块的启动关闭控制。解决思路

2012-05-21 
JAGUARSDN1网络的开机自动启动 禁用,WIFI模块的启动关闭控制。项目需求:开机后JAGUARSDN不要自动运行,此时w

JAGUARSDN1网络的开机自动启动 禁用,WIFI模块的启动关闭控制。
项目需求:
  开机后JAGUARSDN不要自动运行,此时wifi模块关闭。需要用时,手动启用。
昨天找了一下这测表,HKEY_LOCAL_MACHINE\init下也没有找到合适的修改选项。project.reg的内容很少没找到可以对这项进行修改的地方。common.reg下只找到device.dll等内容。

不知道说清楚没有,多谢大侠们指点。

[解决办法]
的确Wifi一直开着,很浪费电,对于手持式设备简直不可接受,恳请大侠尽快指导指导,我好学习下。
[解决办法]
找到wifi驱动里的开关部分,做一个自启动程序,程序里调用wifi驱动关闭WIFI
[解决办法]
具体部分你要看你的WIFI驱动里是怎么控制WIFI的开关了
[解决办法]
可以用开关电源来控制功耗啊
[解决办法]
wifi驱动是包括电源管理的,不用时让其进入低功耗模式就可以了,接口好像是DevicePowerNotify
[解决办法]
试试这种代码,注意修改 98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1 為你自己的wifi设备

void WifiOn()
{
DevicePowerNotify(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), D0, POWER_NAME);
SetDevicePower(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), POWER_NAME, D0);
}
 
void WifiOff()
{
DevicePowerNotify(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), D4, POWER_NAME);
SetDevicePower(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), POWER_NAME, D4);
}

[解决办法]
把wifi驱动弄成动态加载
执行JAGUARSDN时,给wifi供电,然后加载wifi驱动
退出JAGUARSDN时,给wifi断电,然后卸载wifi驱动
[解决办法]

探讨
试试这种代码,注意修改 98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1  為你自己的wifi设备

void WifiOn() 

    DevicePowerNotify(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), D0, POWER_NAME); 
    SetDevicePower(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), POWER_NAME, D0); 

 
void WifiOff() 

    DevicePowerNotify(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), D4, POWER_NAME); 
    SetDevicePower(_T("{98C5250D-C29A-4985-AE5F-AFE5367E5006}\\WLAGS46F1"), POWER_NAME, D4); 



[解决办法]
探讨
各位大侠给出的方法应该是正确的,但现在仍然有个问题。
当我wifioff的时候任务栏上可以看到网络图标显示断开,但wifion的时候网络图标仍然是断开的,无法恢复。而且显示信号很好。

[解决办法]
LZ先确认下系统中有没有加载NDISPWR.DLL,如果没有的话,把这个组件加上

WIFI在默认情况下,是开机自动打开的,如果要开机禁用,在HKEY_LOCAL_MACHINE\Comm\NdisPower创建一个键值

name = 4

name是你用的WIFI的名字

如果想开机自动打开,把这个键值删掉


打开关闭WIFI时,想网络图标正常,除了用setdevicepower外

还要用到NDIS的IOCTL_NDIS_BIND_ADAPTER或者IOCTL_NDIS_UNBIND_ADAPTER

绑定或者解除绑定

[解决办法]
探讨
引用:
LZ先确认下系统中有没有加载NDISPWR.DLL,如果没有的话,把这个组件加上

WIFI在默认情况下,是开机自动打开的,如果要开机禁用,在HKEY_LOCAL_MACHINE\Comm\NdisPower创建一个键值

name = 4

name是你用的WIFI的名字

如果想开机自动打开,把这个键值删掉


打开关闭WIFI时,想网络图标正常,除了用setdevicepower外

还要用到NDIS的IOCTL_NDIS_BIND_ADAPTER或者IOCTL_NDIS_UNBIND_ADAPTER

绑定或者解除绑定



这位大侠好像说的很靠谱,能不能详细一些呀?
我看wifi厂商提供的注册表里有这些东西
  [HKEY_LOCAL_MACHINE\Comm\JaguarSDN1]


"DisplayName"="SyChip JaguarSDN Wireless Card"
"Group"="NDIS"
"ImagePath"="JaguarSDN.dll"
[HKEY_LOCAL_MACHINE\Drivers\SDCARD\ClientDrivers\Custom\MANF-02DF-CARDID-9103-FUNC-1]
"Prefix"="SDN"
"Dll"="JaguarSDN.dll"
"Instance0"="JaguarSDN:JaguarSDN1"

这样的话我写成"JaguarSDN1" = 4 可以吗?

IOCTL_NDIS_BIND_ADAPTER是用deviceiocontrol控制吗?可不可以弄个小例子,多谢指点。


[解决办法]
BOOL 
DoNdisIOControl(
DWORD dwCommand, 
LPVOID pInBuffer,
DWORD cbInBuffer, 
LPVOID pOutBuffer,
DWORD *pcbOutBuffer)
{
HANDLE hNdis;
BOOL bResult = FALSE;

hNdis = CreateFile(
DD_NDIS_DEVICE_NAME, 
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, 
NULL, 
OPEN_ALWAYS,
0, 
NULL);

if (INVALID_HANDLE_VALUE != hNdis)
{
bResult = DeviceIoControl(
hNdis, 
dwCommand, 
pInBuffer, 
cbInBuffer,
pOutBuffer, 
(pcbOutBuffer ? *pcbOutBuffer : 0x00),
pcbOutBuffer, 
NULL);

CloseHandle(hNdis);
}

return bResult;
 
}




nChars = _sntprintf(
szName, 
MAX_PATH-1, 
_T("%s\\%s"), 
PMCLASS_NDIS_MINIPORT, 
ptcDeviceName);


if (nChars != -1)
{
DEBUGMSG (ZONE_NDISUIO,
(TEXT("NdisPower:: Setting adapter [%s] to Power State [%s].\r\n"),
ptcDeviceName,
(CePowerState == D0) ? TEXT("D0") :
(CePowerState == D1) ? TEXT("D1") :
(CePowerState == D2) ? TEXT("D2") :
(CePowerState == D3) ? TEXT("D3") :
(CePowerState == D4) ? TEXT("D4") :
(CePowerState == PwrDeviceUnspecified) ? TEXT("PwrDeviceUnspecified") :
TEXT("UNKNOWN!")));

SetDevicePower(szName, POWER_NAME, CePowerState);

}

//
// IOCTL_NDIS_UNBIND_ADAPTER takes multisz (protocol driver names
// follow the adapter name) hence we need extra NULL.
//

memset (szName, 0x00, sizeof(szName));
_tcscpy(szName, ptcDeviceName);
DoNdisIOControl(
IOCTL_NDIS_UNBIND_ADAPTER, 
szName,
(_tcslen(ptcDeviceName)+2) * sizeof(TCHAR),
NULL, 
NULL); 

这段是先关设备再UNBIND的代码,希望对你有帮助
[解决办法]
强烈关注

热点排行