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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.037 c
14-1082960189
Andryk
2004-04-26 10:16
2004.05.16
Поговрим о символах вот тут недавно прочитал про символ США


14-1082981418
Андрей Сенченко
2004-04-26 16:10
2004.05.16
Код на оценку. Update INI-файлов


8-1067263921
}|{yk
2003-10-27 17:12
2004.05.16
Как можно сделать примитивнейший векторный редактор?


11-1069691640
Phantom
2003-11-24 19:34
2004.05.16
Динамически создать пункты Popup-меню


11-1069519122
BelchonokH
2003-11-22 19:38
2004.05.16
Максимизация формы