微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

禁用设备

我的程序中有一个简单的function问题,该function(下面列出)应该find具有HardwareId ID的设备,然后将其closures/打开。 它发现它,但后来我得到错误,并GetLastError()返回值在msdn范围中描述。 我在代码中用注释标记错误。 如果有人看到这个熟悉SetupDiCallClassInstaller()请帮忙。 我不知道在哪里search该错误,如果是代码错误或系统环境。 我正在使用Windows 7 64位,并以pipe理员身份运行此程序。

bool disableInterface(bool bStatus) { IN LPTSTR HardwareId; HardwareId = L"DAUdio\FUNC_01&VEN_10DE&DEV_0018&SUBSYS_10DE0101"; DWORD NewState ; if(bStatus) { NewState = DICS_disABLE; } else { NewState = DICS_ENABLE; } DWORD i,err; bool found = false; HDEVINFO hDevInfo; SP_DEVINFO_DATA spDevInfoData ; hDevInfo=SetupDiGetClassDevs(NULL,NULL,DIGCF_ALLCLASSES | DIGCF_PRESENT); if(hDevInfo == INVALID_HANDLE_VALUE) { printf("blad1"); 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; // get all devices info while(!SetupDiGetDeviceRegistryProperty(hDevInfo,&spDevInfoData,SPDRP_HARDWAREID,&DataT,(PBYTE)buffer,buffersize,&buffersize) ) { if(GetLastError() == ERROR_INVALID_DATA) { break ; } else if(GetLastError() == ERROR_INSUFFICIENT_BUFFER) { if(buffer) LocalFree(buffer); buffer = (wchar_t*)LocalAlloc(LPTR,buffersize); } else { goto cleanup_DeviceInfo; } } if(GetLastError() == ERROR_INVALID_DATA) continue; //find device with HardwerId for(p = buffer; *p && (p<&buffer[buffersize]) ; p += lstrlen(p) + sizeof(TCHAR)) { if( !_tcscmp(HardwareId,p) ) { found = true; break; } } if(buffer) LocalFree(buffer); // if device found change it's state if(found) { SP_PROPCHANGE_ParaMS params; params.ClassInstallHeader.cbSize=sizeof(SP_CLASSINSTALL_HEADER); params.ClassInstallHeader.InstallFunction=DIF_PROPERTYCHANGE ; params.Scope=DICS_FLAG_GLOBAL ; params.StateChange = NewState ; // setup proper parameters if(!SetupdisetClassInstallParams(hDevInfo,&params.ClassInstallHeader,sizeof(params))) { DWORD errorcode = GetLastError(); } // use parameters if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&spDevInfoData)) { DWORD errorcode = GetLastError(); // error here } switch(NewState) { case DICS_disABLE : printf("off"); break; case DICS_ENABLE : printf("on"); break; } break; } } cleanup_DeviceInfo : err = GetLastError(); SetupDiDestroyDeviceInfoList(hDevInfo); SetLastError(err); return true; }

感谢帮助。

在多个Windows版本中testing.NET应用程序

在Windows上运行Java独立应用程序(作为服务)

如何使用WaitForSingleObject

如何在Windows下重新启动JVM

无法在Windows上使用Eclipse导入使用f2py生成文件

您的错误的十六进制版本是0xE0000235。 查看SetupAPI.h,我们可以看到这映射到ERROR_IN_WOW64。

如果你看这个MSDN线程,你可以看到这个问题的其他人。 大约三分之一的方式下载Maarten van de Bospoort MSFT回应:

The error is because you're calling SetupDiCallClassInstaller from a x86 process on a x64 machines.

似乎这是你的问题的原因,你在一个64位版本的Windows,但从32位进程调用它。 尝试编译为64位。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐