Здравствуйте, 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.