Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Вниз

Получить информацию о ресурсах 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 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
2-1243568759
Rembo
2009-05-29 07:45
2009.08.16
Очистка памяти от массива экземпляров класса


2-1245231551
вопрос
2009-06-17 13:39
2009.08.16
увеличение дин.массива


15-1245181636
man from earth
2009-06-16 23:47
2009.08.16
а я например верю в лунатиков и в теории заговоров


15-1245203187
brother
2009-06-17 05:46
2009.08.16
Защита от AUTORUN.INF вирусов.


15-1245325093
Дмитрий С
2009-06-18 15:38
2009.08.16
iphone в качестве модема





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский