![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить информацию о ресурсах PCI устройства [D7, WinXP]
Velimir © (2008-02-06 22:26:00)Есть PCI устройство с известными VendorID, DeviceID, SubsystemID. С помощью ф-ий SetupDiEnumDeviceInfo и SetupDiGetDeviceRegistryProperty я успешно нахожу и получаю информацию об экземплярах этих устройств.
Но вот как достать информацию о диапазоне памяти, о диапазоне ввода-вывода, прерывании я не знаю...
Эта информации есть в Диспетчере устройств -> Свойства -> Ресурсы. А так же в реестре. Пытался достать эту информацию из реестра... Но увы безуспешно.
Подскажите плиз. может я что-то делаю не так или эту инфу получают другим способом.
PS. WMI не предлагать
Sashahttp (2008-06-25 10:34:00) [1]Спасибо большое!Почитаю!
han_malign (2008-06-25 09:49:00) [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 09:32:00) [3]не мог бы ты подсказать как ты используешь ф-ии SetupDiEnumDeviceInfo и SetupDiGetDeviceRegistryProperty!!!