Главная страница
    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.038 c
1-1083415414
Jiurasdfgfr
2004-05-01 16:43
2004.05.16
Как в StringGrid вызвать OnDrawCell?


14-1082757538
Petr. A. V
2004-04-24 01:58
2004.05.16
Freecell


4-1079877330
DoG
2004-03-21 16:55
2004.05.16
HooK на WindowCreate !


6-1080481375
Diz
2004-03-28 17:42
2004.05.16
Проблемы с POP3


11-1069098939
dva
2003-11-17 22:55
2004.05.16
DiffLines.exe - огорчает игнорирование командной строки...





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