मुझे अपने प्रोग्राम में एक साधारण फ़ंक्शन के साथ कोई समस्या है, उस फ़ंक्शन (नीचे सूचीबद्ध) को हार्डवेयर आईडी आईडी के साथ डिवाइस ढूंढना चाहिए और फिर इसे चालू/चालू करें। इसे पाता है लेकिन फिर मुझे त्रुटि मिलती है, और GetLastError() एमएसडीएन रेंज में वर्णित मूल्य से बाहर मूल्य देता है। मैंने टिप्पणी के साथ कोड में त्रुटि चिह्नित की। यदि कोई इसे देख रहा है तो SetupDiCallClassInstaller() से परिचित है कृपया मदद करें। मुझे नहीं पता कि उस त्रुटि को कहां खोजना है और यदि यह कोड गलती या सिस्टम एनवी है। मैं विंडोज 7 64-बिट का उपयोग कर रहा हूं और इस प्रोग्राम को व्यवस्थापक के रूप में चलाता हूं।डिवाइस को अक्षम करना
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, 0, 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, &spDevInfoData, ¶ms.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;
}
सहायता के लिए धन्यवाद।
तो त्रुटि कोड क्या है? (दोह!) – atzz
और 'FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, ...)' से संदेश क्या है? – MSalters
यदि मैंने इसे सही तरीके से उपयोग किया है तो यह लौटाता है: "(शून्य) बंद" और त्रुटि कोड संख्या 37580 9 6 9 4 9 है, जो गायब होने के लिए sry ..; डी – user1668674