Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.16;
Скачать: CL | DM;

Вниз

Получить информацию о ресурсах PCI устройства   Найти похожие ветки 

 
Velimir   (2008-02-06 22:26) [0]

Есть PCI устройство с известными VendorID, DeviceID, SubsystemID. С помощью ф-ий SetupDiEnumDeviceInfo и SetupDiGetDeviceRegistryProperty я успешно нахожу и получаю информацию об экземплярах этих устройств.
Но вот как достать информацию о диапазоне памяти, о диапазоне  ввода-вывода, прерывании я не знаю...
Эта информации есть в Диспетчере устройств -> Свойства -> Ресурсы. А так же в реестре. Пытался достать эту информацию из реестра... Но увы безуспешно.
Подскажите плиз. может я что-то делаю не так или эту инфу получают другим способом.

PS. WMI не предлагать


 
Sashahttp ©   (2008-06-25 09:32) [1]

не мог бы ты подсказать как ты используешь ф-ии SetupDiEnumDeviceInfo и SetupDiGetDeviceRegistryProperty!!!


 
han_malign ©   (2008-06-25 09:49) [2]

через функции CfgMgr32: CM_Xxx_xxx...
вот пример с давних времен завалялся:
function SetIORanges(aDevInst : DEVINST;
                    qwAddresses : array of DWORDLONG): boolean;
var
   ret : CONFIGRET;
   conf : LOG_CONF;
   iter : DWORD;
   resDes,_ResDes : RES_DES;
   res : PIO_RESOURCE;
   siz{, devStatus,devPrNo} : ULONG;
   i,len : integer;
begin
   Result:=false;
   ret:=CM_Get_First_Log_Conf(@conf,aDevInst,ALLOC_LOG_CONF);
   if(ret<>CR_SUCCESS)then begin
       flogln("di.log","Get LogConf fail 0x"+HexDWord(ret));
       exit;
   end;
   len:=High(qwAddresses) div 2;
   i:=0;
   iter := conf;
   while((i<len)and
         (CM_Get_Next_Res_Des(resDes,iter,ResType_IO,Nil,0)=CR_SUCCESS))do begin
       if(qwAddresses[i*2]>qwAddresses[i*2])then begin
         flogln("di.log","Invalid IO range #"+IntStr(i));
         continue;inc(i);
       end;
       iter := resDes;
       ret:=CM_Get_Res_Des_Data_Size(siz,resDes,0);
       if(ret<>CR_SUCCESS)then begin
           flogln("di.log","Get ResDes Data Size fail 0x"+HexDWord(ret));
           continue;inc(i);
       end;
       GetMem(res,siz);
       if(res=nil)then begin
         flogln("di.log","Memory allocation Error");
         exit;
       end;
       ret:=CM_Get_Res_Des_Data(resDes,res^,siz,0);
       if(ret<>CR_SUCCESS)then begin
           flogln("di.log","Get ResDes Data fail 0x"+HexDWord(ret));
           continue;inc(i);
       end;
       flogln("di.log","  Original Range (0x"
                            +HexDword(res^.IO_Header.IOD_Alloc_Base)+
                       "-0x"+HexDword(res^.IO_Header.IOD_Alloc_End)+")");

       res^.IO_Header.IOD_Alloc_Base:=qwAddresses[i*2];
       res^.IO_Header.IOD_Alloc_End :=qwAddresses[i*2+1];

       ret:=CM_Modify_Res_Des(_ResDes,resDes,ResType_IO,res^,siz,0);
       if(ret<>CR_SUCCESS)then begin
           flogln("di.log","Modify ResDes Data fail 0x"+HexDWord(ret));
       end else iter := _ResDes;
       inc(i);

       FreeMem(res);
   end;
   Result:=true;
end;


 
Sashahttp ©   (2008-06-25 10:34) [3]

Спасибо большое!Почитаю!



Страницы: 1 вся ветка

Текущий архив: 2009.08.16;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.015 c
3-1225978813
Aristarh
2008-11-06 16:40
2009.08.16
Обработка подключения когда недоступен удаленный сервер БД.


6-1205445645
ifrau Randt
2008-03-14 01:00
2009.08.16
NMHTTP


4-1214228936
KIRAT
2008-06-23 17:48
2009.08.16
Вторая копия программы


2-1245399017
Б
2009-06-19 12:10
2009.08.16
Скорость алгоритма.


15-1245468521
sl8er
2009-06-20 07:28
2009.08.16
Нахождение полинома Жегалкина для булевой функции