python 禁用网卡_如何编程实现启用禁用网卡
展開全部
/*****************************************************************************
演示如何編程62616964757a686964616fe58685e5aeb931333335343935實(shí)現(xiàn)啟用禁用網(wǎng)卡
Mady
By ZwelL
2004.7.29
zwell@sohu.com
*****************************************************************************/
#include
#include
#include
#include
#pragma
comment(lib,”ws2_32.lib”)
#pragma
comment(lib,”setupapi.lib”)
BOOL DisableNetInterface(bool bStatus)
{
IN LPTSTR HardwareId
;
//硬件ComponentId,注冊(cè)表地址:system\currentcontrolset\class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0000
HardwareId=”PCI\\VEN_10EC&DEV_8139&SUBSYS_813910EC” ;
DWORD NewState ;
if(bStatus)
{
NewState=DICS_DISABLE ;
//禁用
}
else
{
NewState=DICS_ENABLE ;
//啟用
}
//調(diào)用ddk函數(shù),來禁用網(wǎng)卡
DWORD i,err ;
BOOL Found=false
;
HDEVINFO hDevInfo ;
SP_DEVINFO_DATA spDevInfoData
;
//訪問系統(tǒng)的硬件庫(kù)
hDevInfo=SetupDiGetClassDevs(NULL,”PCI”,NULL,DIGCF_ALLCLASSES|DIGCF_PRESENT);
if(hDevInfo==INVALID_HANDLE_VALUE)
{
printf(”訪問系統(tǒng)硬件出錯(cuò)!”);
return false ;
}
//枚舉硬件,獲得需要的接口
spDevInfoData.cbSize=sizeof(SP_DEVINFO_DATA);
for(i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&spDevInfoData);i++)
{
DWORD DataT ;
LPTSTR p,buffer=NULL ;
DWORD
buffersize=0 ;
//獲得硬件的屬性值
while(!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&spDevInfoData,
SPDRP_HARDWAREID,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if(GetLastError()==ERROR_INVALID_DATA)
{
//不存在HardwareID. Continue.
break
;
}
else
if(GetLastError()==ERROR_INSUFFICIENT_BUFFER)
{
//buffer size不對(duì).
if(buffer)
LocalFree(buffer);
buffer=(char*)LocalAlloc(LPTR,buffersize);
}
else
{
//未知錯(cuò)誤
goto
cleanup_DeviceInfo ;
}
}
if(GetLastError()==ERROR_INVALID_DATA)
continue
;
//比較,找到和網(wǎng)卡ID相同的項(xiàng)
for(p=buffer;*p&&(p
{
if(!_tcscmp(HardwareId,p))
{
//找到網(wǎng)卡
Found=TRUE ;
break ;
}
}
if(buffer)
LocalFree(buffer);
//如果相等
if(Found)
{
//禁用該設(shè)備
SP_PROPCHANGE_PARAMS spPropChangeParams
;
spPropChangeParams.ClassInstallHeader.cbSize=sizeof(SP_CLASSINSTALL_HEADER);
spPropChangeParams.ClassInstallHeader.InstallFunction=DIF_PROPERTYCHANGE
;
spPropChangeParams.Scope=DICS_FLAG_GLOBAL ;
spPropChangeParams.StateChange=NewState ;
//禁用:DICS_DISABLE,DICS_ENABLE啟用
//
if(!SetupDiSetClassInstallParams(hDevInfo,&spDevInfoData,(SP_CLASSINSTALL_HEADER*)&spPropChangeParams,sizeof(spPropChangeParams)))
{
DWORD errorcode=GetLastError();
}
if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&spDevInfoData))
{
DWORD errorcode=GetLastError();
}
switch(NewState)
{
case DICS_DISABLE
:
printf(”成功禁用網(wǎng)絡(luò)!”);
break ;
case
DICS_ENABLE :
printf(”成功啟用網(wǎng)絡(luò)!”);
break
;
}
break ;
}
}
//退出時(shí),清理工作環(huán)境
cleanup_DeviceInfo
:
err=GetLastError();
SetupDiDestroyDeviceInfoList(hDevInfo);
SetLastError(err);
return true ;
}
void usage(char *exefile)
{
printf(”Usage:%s [-e|-d]\r\n”,
exefile);
printf(”\t-e: Enable the network card.\r\n”);
printf(”\t-d:
Disable the network card.\r\n”);
exit(0);
}
int main(int
argc,char**argv)
{
if(argc<2)
usage(argv[0]);
if(!DisableNetInterface((strstr(argv[1],”-d”)>0?TRUE:FALSE)))
printf(”對(duì)網(wǎng)卡操作失敗!”);
return 0;
}
//————————————————————————————————————
例子二:
#include
#include
#include
#include
#pragma comment (lib,”setupapi”)
#define UnknownDevice TEXT(””)
HDEVINFO hDevInfo = 0;
BOOL StateChange(DWORD NewState, DWORD SelectedItem,HDEVINFO
hDevInfo)
{
SP_PROPCHANGE_PARAMS PropChangeParams =
{sizeof(SP_CLASSINSTALL_HEADER)};
SP_DEVINFO_DATA DeviceInfoData =
{sizeof(SP_DEVINFO_DATA)};
HCURSOR hCursor;
//
// This may take a while :^(
//
hCursor =
SetCursor(LoadCursor(NULL, IDC_WAIT));
//
// Get a handle to the Selected Item.
//
if
(!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))
{
printf(”EnumDeviceInfo”);
return FALSE;
}
//
// Set the PropChangeParams structure.
//
PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
PropChangeParams.Scope = DICS_FLAG_GLOBAL;
PropChangeParams.StateChange =
NewState;
if (!SetupDiSetClassInstallParams(hDevInfo,
&DeviceInfoData,
(SP_CLASSINSTALL_HEADER
*)&PropChangeParams,
sizeof(PropChangeParams)))
{
printf(”SetClassInstallParams”);
SetCursor(hCursor);
return FALSE;
}
//
// Call the ClassInstaller and perform the change.
//
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,
hDevInfo,
&DeviceInfoData))
{
printf(”SetClassInstallParams”);
SetCursor(hCursor);
return TRUE;
}
SetCursor(hCursor);
return TRUE;
}
BOOL IsClassNet( GUID * ClassGuid )
{
#define MAX_NUM 50
HKEY hKeyClass;
LONG lRet;
char
ClassType[MAX_NUM];
char NetClass[MAX_NUM] = “Net”;
DWORD dwLength =
MAX_NUM,dwType = REG_SZ;
if (hKeyClass =
SetupDiOpenClassRegKey(ClassGuid,KEY_READ))
{
lRet =
RegQueryValueEx(hKeyClass,
TEXT(”Class”),
NULL,
&dwType, LPBYTE(ClassType), &dwLength);
RegCloseKey(hKeyClass);
if (lRet != ERROR_SUCCESS)
return FALSE;
if (!strcmp(ClassType,NetClass))
return TRUE;
}
return FALSE;
}
int main(int argc, char* argv[])
{
if (INVALID_HANDLE_VALUE ==
(hDevInfo =
SetupDiGetClassDevs(NULL,NULL,0,
DIGCF_PRESENT|DIGCF_ALLCLASSES)))
{
printf(”GetClassDevs”);
return 0;
}
DWORD i, Status, Problem;
SP_DEVINFO_DATA DeviceInfoData =
{sizeof(SP_DEVINFO_DATA)};
HKEY hKeyClass;
char DeviceName[200];
for
(i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)
{
if
(IsClassNet(&DeviceInfoData.ClassGuid))
{
//printf(” the class’s
index is %d\n”,i);
//DICS_DISABLE–>禁用網(wǎng)絡(luò)
//DICS_ENABLE—>恢復(fù)網(wǎng)絡(luò)
if
(StateChange(DICS_ENABLE,i,hDevInfo))
printf(”.”);
//printf(”NetWork
%s”, (DICS_ENABLE)?”enabled”:”disabled”);
}
}
return 0;
}
本回答由電腦網(wǎng)絡(luò)分類達(dá)人 郭強(qiáng)推薦
已贊過
已踩過<
你對(duì)這個(gè)回答的評(píng)價(jià)是?
評(píng)論
收起
總結(jié)
以上是生活随笔為你收集整理的python 禁用网卡_如何编程实现启用禁用网卡的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java怎么使用Queryable-pa
- 下一篇: 足银999.9和足银999的区别 足银9