Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
4-1080290585
Абульфаз Ильчибей
2004-03-26 11:43
2004.05.16
Странная функция MoveFileEx.


3-1082575295
windows
2004-04-21 23:21
2004.05.16
Сортировка без учёта регистра


1-1083243833
Mikle
2004-04-29 17:03
2004.05.16
FastReport и редактирование готовых отчетов


1-1083235519
Vlad Oshin
2004-04-29 14:45
2004.05.16
Chartfx. Как построить _любой_ график


9-1073424736
Orcy
2004-01-07 00:32
2004.05.16
Как загрузить 3ds в OpenGL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский