Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизMemory Mapped Port Найти похожие ветки
← →
ByPass (2004-04-27 13:22) [0]Доброго время суток.
Подскажите, как определить назначенный BIOSом номер порта устройству PCI при известных показателях VENDOR_ID, DEVICE_ID?
← →
han_malign © (2004-04-27 13:34) [1]нужно SetupApi, CfgMgr32
вот эта функция проверяет не используется уже ли указанный диапазонfunction CheckIORange(qwBaseAddress,qwEndAddress :DWORDLONG;
var szConflictDevice : ShortString): boolean;
var
ret : CONFIGRET;
hDevInfoSet : HDEVINFO;
DevInfoData : SP_DEVINFO_DATA;
conf : LOG_CONF;
iter : DWORD;
resDes : RES_DES;
res : PIO_RESOURCE;
siz : ULONG;
i : integer;
_s,_d : ShortString;
begin
Result:=false;szConflictDevice:="";
if(qwBaseAddress>qwEndAddress)then exit;
//Создание списка информации об устройствах
hDevInfoSet := SetupDiGetClassDevsA(Nil,Nil,0,DIGCF_ALLCLASSES);
if((hDevInfoSet=0)or(hDevInfoSet=INVALID_HANDLE_VALUE))then begin
flogln("di.log","Create DeviceInfoList failed 0x" + HexDWord(GetLastError));
exit;
end;
DevInfoData.cbSize := sizeof(DevInfoData);
i:=0;
while SetupDiEnumDeviceInfo(hDevInfoSet,i,DevInfoData)do begin
inc(i);
if(SetupDiGetDeviceRegistryPropertyA(
hDevInfoSet,
DevInfoData,
SPDRP_DEVICEDESC,
nil,
_s[1],
255,
nil))
then _s:=PChar(@_s[1])
else flogln("di.log","Get Device Reg Prop failed 0x" + HexDWord(GetLastError));
ret:=CM_Get_First_Log_Conf(@conf,DevInfoData.DevInst,ALLOC_LOG_CONF);
if(ret<>CR_SUCCESS)then begin
flogln("di.log","Get LogConf fail 0x"+HexDWord(ret));
continue;
end;
iter := conf;
while(CM_Get_Next_Res_Des(resDes,iter,ResType_IO,Nil,0)=CR_SUCCESS)do begin
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;
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;
end;
_d:=" Ranges (0x"+HexDword(res^.IO_Header.IOD_Alloc_Base)+
"-0x"+HexDword(res^.IO_Header.IOD_Alloc_End)+")";
flogln("di.log",_s+_d);
if(not(((qwBaseAddress > res^.IO_Header.IOD_Alloc_End) and
(qwEndAddress > res^.IO_Header.IOD_Alloc_End)) or
((qwBaseAddress < res^.IO_Header.IOD_Alloc_Base) and
(qwEndAddress < res^.IO_Header.IOD_Alloc_Base))))
then begin
szConflictDevice:=_s;
FreeMem(res);
exit;
end;
FreeMem(res);
end;
end;
Result:=true;
end;
- функции с преффиксом SetupDI - из SetupAPI, CM_ - CfgMgr32
← →
ByPass (2004-04-27 14:45) [2]Спасибо
А функциями ассемблера на сколько не сложно?
← →
Digitman © (2004-04-27 15:53) [3]
> функциями ассемблера на сколько не сложно
бред какой-то ...
что есть "функция ассемблера" ?
← →
han_malign © (2004-04-27 15:53) [4]На столько же, по любому вызывать функции из setupapi.dll и cfgmgr32.dll. Если ты мазохист, и тебя прет делать высокоуровневые вызовы на ассемблере - вперед...
← →
ByPass (2004-04-27 16:00) [5]ну простите за масло масленное
← →
M@X (2004-04-27 16:11) [6]У меня аналогичная задачка определения физического адреса устройства при имеющихся Номере шины, девайса, функции и пр.
Тока я рисую на TMT Pascal под ДОСей
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c