先确认下系统中有没有加载NDISPWR.DLL,如果没有的话,把这个组件加上WIFI在默认情况下,是开机自动打开的,如果要开机禁用,在HKEY_LOCAL_MACHINE/Comm/NdisPower创建一个键值name = 4name是你用的WIFI的名字如果想开机自动打开,把这个键值删掉打开关闭WIFI时,想网络图标正常,除了用setdevicepower外还要用到NDIS的IOCTL_NDIS_BIND_ADAPTER或者IOCTL_NDIS_UNBIND_ADAPTER绑定或者解除绑定
在HKEY_LOCAL_MACHINE/Comm/NdisPower下面加"JaguarSDN1" = 4 就OK了IOCTL_NDIS_BIND_ADAPTER是用DeviceIoControl操作的,打开的设备是NDS0,bufferin里写你要bind的网卡名字,因为网卡是NDIS设备,网卡名字应该是NDIS的ClassID+JaguarSDN1具体代码去PUBLIC下找NDISPWR的代码看看
===============================================
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的代码,希望对你有帮助
