Я использую следующие API: следует:
- cfgmgr.CM_Locate_DevNode
- cfgmgr.CM_Get_DevNode_Status
Если включено, мы отключаем устройство с помощью приведенных ниже API.
- SetupDiSetClassInstallParams
- SetupDiChangeState
код, как показано ниже:
Код: Выделить всё
setupapi.SP_PROPCHANGE_PARAMS ChangeParams = new setupapi.SP_PROPCHANGE_PARAMS();
ChangeParams.ClassInstallHeader.cbSize = Marshal.SizeOf(typeof(setupapi.SP_CLASSINSTALL_HEADER));
ChangeParams.ClassInstallHeader.InstallFunction = setupapi.DIF_PROPERTYCHANGE;
ChangeParams.Scope = setupapi.DICS_FLAG_CONFIGSPECIFIC; //DICS_FLAG_GLOBAL;
ChangeParams.StateChange = bEnable ? setupapi.DICS_ENABLE : setupapi.DICS_DISABLE;
ChangeParams.HwProfile = 0;
int PropChangeSize = Marshal.SizeOf(typeof(setupapi.SP_PROPCHANGE_PARAMS));
PSP_PROPCHANGE_PARAMS = Marshal.AllocHGlobal(PropChangeSize);
Marshal.StructureToPtr(ChangeParams, PSP_PROPCHANGE_PARAMS, true);
bool bRes = setupapi.SetupDiSetClassInstallParams(set, ref data, PSP_PROPCHANGE_PARAMS, PropChangeSize);
bRes = setupapi.SetupDiChangeState(set, ref data);
Подробнее здесь: https://stackoverflow.com/questions/789 ... papi-calls
Мобильная версия