我找到了C++的程序,可惜水平太次,不会转成C#的,请各位帮忙,分不够再加.如何编程实现启用禁用网卡 演示如何编程实现启用禁用网卡
Mady By ZwelL
2004.7.29
[email protected]#include windows.h
#include setupapi.h
#include tchar.h
#include stdio.h
#pragma comment(lib,ws2_32.lib)
#pragma comment(lib,setupapi.lib)BOOL DisableNetInterface(bool bStatus)
{
IN LPTSTR HardwareId ;
硬件ComponentId,注册表地址:systemcurrentcontrolsetclass{4D36E972-E325-11CE-BFC1-08002BE10318}0000
HardwareId=PCIVEN_10EC&DEV_8139&SUBSYS_813910EC ;
DWORD NewState ;
if(bStatus)
{
NewState=DICS_DISABLE ;
禁用
}
else
{
NewState=DICS_ENABLE ;
启用
}
调用ddk函数,来禁用网卡
DWORD i,err ;
BOOL Found=false ;
HDEVINFO hDevInfo ;
SP_DEVINFO_DATA spDevInfoData ;
访问系统的硬件库
hDevInfo=SetupDiGetClassDevs(NULL,PCI,NULL,DIGCF_ALLCLASSESDIGCF_PRESENT);
if(hDevInfo==INVALID_HANDLE_VALUE)
{
printf(访问系统硬件出错!);
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不对.
if(buffer)
LocalFree(buffer);
buffer=(char)LocalAlloc(LPTR,buffersize);
}
else
{
未知错误
goto cleanup_DeviceInfo ;
}
}
if(GetLastError()==ERROR_INVALID_DATA)
continue ;
比较,找到和网卡ID相同的项
for(p=buffer;p&&(p&buffer[buffersize]);p+=lstrlen(p)+sizeof(TCHAR))
{
if(!_tcscmp(HardwareId,p))
{
找到网卡
Found=TRUE ;
break ;
}
}
if(buffer)
LocalFree(buffer);
如果相等
if(Found)
{
禁用该设备
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(成功禁用网络!);
break ;
case DICS_ENABLE
printf(成功启用网络!);
break ;
}
break ;
}
}
退出时,清理工作环境
cleanup_DeviceInfo
err=GetLastError();
SetupDiDestroyDeviceInfoList(hDevInfo);
SetLastError(err);
return true ;
}void usage(char exefile)
{
printf(Usage%s [-e-d]rn, exefile);
printf(t-e Enable the network card.rn);
printf(t-d Disable the network card.rn);
exit(0);
}
int main(int argc,charargv)
{
if(argc2)
usage(argv[0]);
if(!DisableNetInterface((strstr(argv[1],-d)0TRUEFALSE)))
printf(对网卡操作失败!);
return 0;
}
Mady By ZwelL
2004.7.29
[email protected]#include windows.h
#include setupapi.h
#include tchar.h
#include stdio.h
#pragma comment(lib,ws2_32.lib)
#pragma comment(lib,setupapi.lib)BOOL DisableNetInterface(bool bStatus)
{
IN LPTSTR HardwareId ;
硬件ComponentId,注册表地址:systemcurrentcontrolsetclass{4D36E972-E325-11CE-BFC1-08002BE10318}0000
HardwareId=PCIVEN_10EC&DEV_8139&SUBSYS_813910EC ;
DWORD NewState ;
if(bStatus)
{
NewState=DICS_DISABLE ;
禁用
}
else
{
NewState=DICS_ENABLE ;
启用
}
调用ddk函数,来禁用网卡
DWORD i,err ;
BOOL Found=false ;
HDEVINFO hDevInfo ;
SP_DEVINFO_DATA spDevInfoData ;
访问系统的硬件库
hDevInfo=SetupDiGetClassDevs(NULL,PCI,NULL,DIGCF_ALLCLASSESDIGCF_PRESENT);
if(hDevInfo==INVALID_HANDLE_VALUE)
{
printf(访问系统硬件出错!);
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不对.
if(buffer)
LocalFree(buffer);
buffer=(char)LocalAlloc(LPTR,buffersize);
}
else
{
未知错误
goto cleanup_DeviceInfo ;
}
}
if(GetLastError()==ERROR_INVALID_DATA)
continue ;
比较,找到和网卡ID相同的项
for(p=buffer;p&&(p&buffer[buffersize]);p+=lstrlen(p)+sizeof(TCHAR))
{
if(!_tcscmp(HardwareId,p))
{
找到网卡
Found=TRUE ;
break ;
}
}
if(buffer)
LocalFree(buffer);
如果相等
if(Found)
{
禁用该设备
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(成功禁用网络!);
break ;
case DICS_ENABLE
printf(成功启用网络!);
break ;
}
break ;
}
}
退出时,清理工作环境
cleanup_DeviceInfo
err=GetLastError();
SetupDiDestroyDeviceInfoList(hDevInfo);
SetLastError(err);
return true ;
}void usage(char exefile)
{
printf(Usage%s [-e-d]rn, exefile);
printf(t-e Enable the network card.rn);
printf(t-d Disable the network card.rn);
exit(0);
}
int main(int argc,charargv)
{
if(argc2)
usage(argv[0]);
if(!DisableNetInterface((strstr(argv[1],-d)0TRUEFALSE)))
printf(对网卡操作失败!);
return 0;
}
解决方案 »
- C# http 下载pdf文件
- C#,枚举系统中可用的视频捕捉设备
- 怎么关于VSTO的贴一个人都没有回贴。唉,悲衰,MS 开发VSTO被忽略了,再才发个贴:VSTO调用宏怎么写?
- 想在2个独立的.net程序间传递数据,请教用什么办法速度较快
- 网站访问出错
- 请教各位大牛啊?
- 动态打印表格
- 文件操作
- 能不能一次设置窗体各textbox,combotext的颜色
- LayOutMdi改变时 子窗口超出父窗口范围,但父窗口没显示scrollbar
- ~~~~~~~~~~~~~~~~~~正宗思归题,不见得思归就能回答!~~~~~~~~~~~~~~~~~~~~~~~~~~~`````
- 请教,如何实现动态的视频播放?
-------------------------------------------------------------------------
Enabled Unreachable Dedicated Local Area Connection 2
Enabled Unreachable Dedicated Local Area Connection
Enabled Unreachable Internal Internal
Enabled Unreachable Loopback Loopback 关闭
netsh interface set interface name="Local Area Connection" admin=DISABLED
开启
netsh interface set interface name="Local Area Connection" admin=ENABLE
如果是中文操作系统的话就name="本地连接",依此类推C#代码如下:Process pro = new Process();
pro.StartInfo.UseShellExecute = false;
pro.StartInfo.RedirectStandardError = true;
pro.StartInfo.RedirectStandardInput = true;
pro.StartInfo.RedirectStandardOutput = true;
pro.StartInfo.FileName = "netsh.exe";
pro.StartInfo.Arguments = "interface set interface name=\"Local Area Connection\" admin=Enable";
pro.StartInfo.CreateNoWindow = true;
pro.Start();
此命令提供的语法不正确。请查看帮助以获取正确的语法信息。用法 set interface [name = ] IfName
[ [admin = ] ENABLED|DISABLED
[connect = ] CONNECTED|DISCONNECTED
[newname = ] NewName ] 设置接口参数。 IfName - 接口名称
admin - 接口是否被启用 (仅用于非 LAN)。
connect - 是否连接接口 (仅用于非 LAN)。
newname - 接口的新名称 (仅用于非 LAN)。 注意:
- 除名称外,还必须至少指定一个选项。
- 如果 connect = CONNECTED 被指定,那么接口被自动
启用,甚至在 admin = DISABLED 选项被指定时也是如
此。
netsh interface set interface name="localnet" admin=DISABLED
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=114198&SiteID=1MSDN论坛上也有人问到类似的问题,下面的这两个链接帮助他解决了问题,也希望能帮助你。http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmi/wmi_tasks__networking.asp
http://www.codeproject.com/csharp/wmimadeeasy.asp
{
ManagementClass objMC = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection objMOC = objMC.GetInstances(); foreach(ManagementObject objMO in objMOC)
{
try
{
ManagementBaseObject objSetIP = null;
ManagementBaseObject objNewGate = null;
objNewGate = objMO.GetMethodParameters("IPEnabled");
objNewGate["IPEnabled"] = new bool[] {sEnable};
objSetIP = objMO.InvokeMethod("IPEnabled",objNewGate,null);
}
catch(Exception ex)
{
Console.WriteLine("Unable to Set IP : " + ex.Message); } }
}
private bool SetNetworkAdapter(bool status)
{
const string discVerb = "禁用(&B)";
const string connVerb = "启用(&A)";
const string networkConnection = "网络连接";
string sVerb; if (status) sVerb = connVerb;
else sVerb = discVerb; Shell32.Shell sh = new Shell32.Shell();
Shell32.Folder folder; folder = sh.NameSpace(3); //Shell32.ShellSpecialFolderConstants.ssfCONTROLS
try
{
foreach (Shell32.FolderItem myItem in folder.Items())
{
if (myItem.Name == networkConnection)
{
Shell32.Folder fd = (Shell32.Folder)myItem.GetFolder;
foreach (Shell32.FolderItem fi in fd.Items())
{
if (fi.Name.IndexOf("VMware") > -1)
{
foreach (Shell32.FolderItemVerb Fib in fi.Verbs())
{
// listBox1.Items.Add(Fib.Name);
if (Fib.Name == sVerb)
{
Fib.DoIt();
break;
}
}
}
}
}
}
}
catch (Exception e)
{
//sbpnl2.Text = e.Message;
MessageBox.Show(e.Message);
return false;
}
return true;
}