Чем заменить Setup API в Native-приложениях?

Тема в разделе "WASM.NT.KERNEL", создана пользователем Nouzui, 31 янв 2009.

  1. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Конкретно хочется разрешать/запрещать устройство, как это делается через devmgmt.msc

    Примерно так будет выглядеть код на Setup API:
    Код (Text):
    1.     HDEVINFO hDevInfo;
    2.     SP_PROPCHANGE_PARAMS stPropChangeParams= {sizeof(SP_CLASSINSTALL_HEADER)};
    3.     SP_DEVINFO_DATA stDevInfoData= {sizeof(SP_DEVINFO_DATA)};
    4.     PSP_DEVINFO_DATA pDevInfoData= &stDevInfoData;
    5.     SP_DEVINSTALL_PARAMS stDevParams= {sizeof(SP_DEVINSTALL_PARAMS)};
    6.     int NewState;
    7.  
    8.  
    9.     hDevInfo= SetupDiCreateDeviceInfoList(NULL, NULL);
    10.     if(!hDevInfo || hDevInfo==INVALID_HANDLE_VALUE)
    11.     {
    12.         <ошибка...>
    13.     }
    14.  
    15.     if(!SetupDiOpenDeviceInfo(hDevInfo, <Строковый идентификатор устройства>, NULL, 0, pDevInfoData))
    16.     {
    17.         <ошибка...>
    18.     }
    19.  
    20.     NewState= DICS_DISABLE; // или DICS_ENABLE
    21.  
    22.     stPropChangeParams.ClassInstallHeader.InstallFunction= DIF_PROPERTYCHANGE;
    23.     stPropChangeParams.Scope= DICS_FLAG_GLOBAL;
    24.     stPropChangeParams.StateChange= NewState;
    25.     stPropChangeParams.HwProfile = 0;
    26.     if(!SetupDiSetClassInstallParams(hDevInfo, pDevInfoData, (SP_CLASSINSTALL_HEADER*)&stPropChangeParams, sizeof(stPropChangeParams)))
    27.     {
    28.         <ошибка...>
    29.     }
    30.  
    31.     stPropChangeParams.Scope= DICS_FLAG_CONFIGSPECIFIC;
    32.     if(!SetupDiSetClassInstallParams(hDevInfo, pDevInfoData, (SP_CLASSINSTALL_HEADER*)&stPropChangeParams, sizeof(stPropChangeParams)))
    33.     {
    34.         <ошибка...>
    35.     }
    36.  
    37.     if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, pDevInfoData))
    38.     {
    39.         <ошибка...>
    40.     }
    41.        
    42.     if(SetupDiGetDeviceInstallParams(hDevInfo, pDevInfoData, &stDevParams))
    43.     {
    44.         if(stDevParams.Flags & (DI_NEEDRESTART|DI_NEEDREBOOT))
    45.             <требуется перезагрузка...>
    46.     }
    Вопрос: как проделать примерно то же в native-приложении? Или в ring0 на крайний случай..