,想写一个一键卸载网卡驱动的程序,憋了很长时间,还是搞不定…
求助,想写一个一键卸载网卡驱动的程序,憋了很长时间,还是搞不定……
如题,写一个一键卸载网卡驱动的程序,请大神指正一下
我始终搞不清楚为什么会这样,我哪里写错了
------解决方案--------------------
这个是由于DLL版本不对的问题,比如你跑的机器是64位的就要把程序编译成64位的,如果你跑的机器是32位的,就要编译成32位的,你不能32位的程序调64位的库
如题,写一个一键卸载网卡驱动的程序,请大神指正一下
BOOL bResult = FALSE;
GUID hidGuid;
memcpy(&hidGuid, &GUID_NET, sizeof(GUID));
HDEVINFO hNetAdapterDevInfo = INVALID_HANDLE_VALUE;
hNetAdapterDevInfo = ::SetupDiGetClassDevs(&hidGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
SP_DEVINFO_DATA sddPCIDeviceInfoData = { sizeof(SP_DEVINFO_DATA) };
SP_DEVICE_INTERFACE_DATA sidPCIInterfaceDeviceData = { sizeof(SP_DEVICE_INTERFACE_DATA) };
LPOLESTR lpostrGUID;
for (int i = 0; SetupDiEnumDeviceInterfaces(hNetAdapterDevInfo, 0, &hidGuid, i, &sidPCIInterfaceDeviceData); i++)
{
ULONG ulRequiredLength = 0;
bResult = ::SetupDiGetDeviceInterfaceDetailW(hNetAdapterDevInfo, &sidPCIInterfaceDeviceData,NULL,0,&ulRequiredLength,NULL);
PSP_DEVICE_INTERFACE_DETAIL_DATA_W pspDeviceInterfaceDetailData = (SP_DEVICE_INTERFACE_DETAIL_DATA_W*)malloc(ulRequiredLength);
pspDeviceInterfaceDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W);
bResult = ::SetupDiGetDeviceInterfaceDetailW(hNetAdapterDevInfo, &sidPCIInterfaceDeviceData, pspDeviceInterfaceDetailData,
ulRequiredLength, NULL, &sddPCIDeviceInfoData);
LPWSTR lpwDevicePath(pspDeviceInterfaceDetailData->DevicePath);
if ( wcsstr(lpwDevicePath, DEVICE_TYPENAME_PCI) || wcsstr(lpwDevicePath, DEVICE_TYPENAME_PCI_SMALL) )
{
bResult = ::SetupDiDeleteDeviceInterfaceData(hNetAdapterDevInfo, &sidPCIInterfaceDeviceData);
bResult = ::SetupDiDeleteDeviceInterfaceRegKey(hNetAdapterDevInfo, &sidPCIInterfaceDeviceData, 0); //这里bResult返回0,我查了错误码,是87(ERROR_INVALID_PARAMETER),不明白为什么参数会错误
bResult = SetupDiEnumDeviceInfo(hNetAdapterDevInfo, i, &sddPCIDeviceInfoData);
if (bResult)
{
LPOLESTR olestrGUID;
StringFromCLSID(sddPCIDeviceInfoData.ClassGuid, &olestrGUID);
CoTaskMemFree(olestrGUID);
bResult = ChangeDeviceState(hNetAdapterDevInfo, sddPCIDeviceInfoData, DICS_STOP); //就是停止服务
bResult = SetupDiDeleteDeviceInfo(hNetAdapterDevInfo, &sddPCIDeviceInfoData); //正常返回1
bResult = SetupDiDeleteDevRegKey(hNetAdapterDevInfo, &sddPCIDeviceInfoData, DICS_FLAG_GLOBAL, 0xFFFFFFFF, DIREG_BOTH ); //返回0,错误码87(ERROR_INVALID_PARAMETER)
bResult = SetupDiCallClassInstaller(DIF_REMOVE, hNetAdapterDevInfo, &sddPCIDeviceInfoData); //结果错误,得到错误码是3758096949,为什么会是这样
}
}
}
我始终搞不清楚为什么会这样,我哪里写错了
------解决方案--------------------
这个是由于DLL版本不对的问题,比如你跑的机器是64位的就要把程序编译成64位的,如果你跑的机器是32位的,就要编译成32位的,你不能32位的程序调64位的库