MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Отключение интернета средствами Windows API"
Answer 816732
Для отключения сетевого адаптера можно использовать Setup API (требует привилегий администратора, не работает из-под WOW64):
#include <stdlib.h> #include <locale.h> #include <stdio.h> #include <Windows.h> #include <SetupAPI.h> #define INITGUID #include <Devpkey.h> #include <devguid.h> #pragma comment(lib,"Setupapi.lib") void ErrorMes(LPTSTR lpszFunction) { // Retrieve the system error message for the last-error code LPVOID lpMsgBuf; LPVOID lpDisplayBuf; DWORD dw = GetLastError(); FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL ); // Display the error message lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT, (lstrlen((LPCTSTR)lpMsgBuf) + lstrlen((LPCTSTR)lpszFunction) + 40) * sizeof(TCHAR)); wprintf(L"%s failed with error %d: %s\n", lpszFunction, dw, lpMsgBuf); LocalFree(lpMsgBuf); LocalFree(lpDisplayBuf); } //* Включает или отключает сетевое соединение * //aState: true - включить, false - отключить //adapter: имя сетевого адаптера (как в диспетчере устройств) void EnableConnection(bool aState, wchar_t* adapter) { unsigned index; HDEVINFO hDevInfo; SP_DEVINFO_DATA DeviceInfoData; SP_PROPCHANGE_PARAMS PCHP; TCHAR buf[1024]=L""; DEVPROPTYPE dpt=0; BOOL res; // Enum all network devices hDevInfo = SetupDiGetClassDevs(&GUID_DEVCLASS_NET, 0, 0, DIGCF_PRESENT); for (index = 0; ; index++) { DeviceInfoData.cbSize = sizeof(DeviceInfoData); if (!SetupDiEnumDeviceInfo(hDevInfo, index, &DeviceInfoData)) { break; } res=SetupDiGetDeviceProperty(hDevInfo,&DeviceInfoData, &DEVPKEY_Device_DeviceDesc,&dpt,(PBYTE)buf,1000,NULL,0);//name if(res==FALSE){ErrorMes(L"SetupDiGetDeviceProperty");continue;} if(wcscmp(buf,adapter)==0){//device found PCHP.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); if (SetupDiSetClassInstallParams(hDevInfo,&DeviceInfoData,&PCHP.ClassInstallHeader,sizeof(SP_PROPCHANGE_PARAMS))) { PCHP.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); PCHP.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; PCHP.HwProfile = 0; PCHP.Scope = DICS_FLAG_CONFIGSPECIFIC; if (aState) PCHP.StateChange = DICS_ENABLE; else PCHP.StateChange = DICS_DISABLE; SetupDiSetClassInstallParams(hDevInfo,&DeviceInfoData,&PCHP.ClassInstallHeader,sizeof(SP_PROPCHANGE_PARAMS)); if(SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&DeviceInfoData)==0) { ErrorMes(L"SetupDiCallClassInstaller"); if(GetLastError()==ERROR_DI_POSTPROCESSING_REQUIRED)wprintf(L"ERROR_DI_POSTPROCESSING_REQUIRED\n"); if(GetLastError()==ERROR_IN_WOW64)wprintf(L"SetupDiCallClassInstaller не работает из WOW64\n"); } else wprintf(L"Состояние адаптера успешно изменено.\n"); } else ErrorMes(L"SetupDiSetClassInstallParams"); break; } } SetupDiDestroyDeviceInfoList(hDevInfo); } int main(void) { setlocale(LC_ALL,"Russian"); EnableConnection(false,L"Realtek PCIe GBE Family Controller"); system("PAUSE"); return 0; }
Для отключения dial-up соединения - функцию RasHangUp
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.