Re[2]: Как получить список все PCI и прочего
От: Аноним  
Дата: 02.07.04 11:17
Оценка:
Здравствуйте, Patalog, Вы писали:

P>Здравствуйте muzzzy, Вы писали:


M>>Надо написать программу установки драйверов для хитрых PCI карт , как узнать какие PCI устройства есть в системе, и как автоматически поставить inf на каждую плату ?


P>Все что показывет Device Manager (включая скрытые устройства) можно посмотреть так:

P>
P>bool EnumerateDeviceCallback(DEVINST device_inst)
P>{
P>    char driver_name[MAX_PATH];
P>    unsigned long len = MAX_PATH;
P>    CONFIGRET cr = CM_Get_DevNode_Registry_Property(device_inst, CM_DRP_DRIVER, NULL, driver_name, &len, 0);
    
P>    if(cr == CR_SUCCESS) {
P>        char device_desc[MAX_PATH];
P>        unsigned long len = MAX_PATH;
P>        cr =CM_Get_DevNode_Registry_Property(device_inst, CM_DRP_DEVICEDESC, NULL, device_desc, &len, 0);

P>        if(cr == CR_SUCCESS)
P>            printf("\n%s", device_desc);
P>    }

А это будет работать под Win98? У меня не работает.
P>    return FALSE;
P>}

P>DEVINST EnumerateDeviceTree(DEVINST device_inst, bool (*callback)(DEVINST))
P>{
P>    bool res = callback(device_inst);
P>    if(!res) {
P>        DEVINST device_ret = { 0 };
P>        DEVINST device_next = device_inst;
P>        while(CM_Get_Child(&device_next, device_next, 0) == CR_SUCCESS) {
P>            EnumerateDeviceTree(device_next, callback);
            
P>            device_ret = device_next;
P>            while(CM_Get_Sibling(&device_ret, device_ret, 0) == CR_SUCCESS)
P>                EnumerateDeviceTree(device_ret, callback);
                
P>        }

P>        return 0;
P>    }
P>    else 
P>        return device_inst;
P>}

P>int main(int argc, char* argv[])
P>{
P>    DEVINST device_root = { 0 };
P>    CONFIGRET cr = CM_Locate_DevNode(&device_root, NULL, 0);

P>    if(cr == CR_SUCCESS) 
P>        EnumerateDeviceTree(device_root, EnumerateDeviceCallback);
        
P>    return 0;
P>}
P>


P>Как я понимаю тебе нужна ветка PCI bus. Кроме того посмотри SetupAPI.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.