全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2126
推到 Plurk!
推到 Facebook!

請問 要如何才能明確的得到系統內有連接哪些週邊

尚未結案
inse
一般會員


發表:5
回覆:2
積分:1
註冊:2004-06-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-21 17:05:28 IP:218.167.xxx.xxx 未訂閱
各位大大好, 我想在window下得知系統有連接哪一些週邊(pci usb等) ,即使他是在未安裝驅動的情形下 我在NT系列的平台是透過搜尋 register 裡面的[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\PCI\] 下面的資料,以比對我想找的特定裝置[像RTL8139]的VID&PID 我隻到這種方法算是偷雞的方式,但是在NT系列的平台(NT&2000&XP),ㄏ 還是可以有不錯的效果,也可以透過其裝置下的子鍵[control]的存在與否判斷該裝置目前是否有連接 但是,在98-ME下可就不行了(殘念...) 所以我想問一下 各位大大們,如果想搜尋某一個PCI的裝置是否有連接上 要如何進行? 如果不會太麻煩,煩請給我一點小SAMPLE CODE 如果太麻煩,煩請給一點方向 (PS:不要太少 ^^) 先謝謝各位大大了
inse
一般會員


發表:5
回覆:2
積分:1
註冊:2004-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-21 20:08:20 IP:218.167.xxx.xxx 未訂閱
在等待各位大大的回應的時候,我爬了一下文 發現下面那篇文章有說到一點點:    http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31772 我想請問一下,如果照上面所說的『你只要對IO 0xcf8, 0xcfc會read/write就可以scan出主機板上所有的PCI device 』 我想應該對我的問題是可行的,那麼,能否請教對0xcf8, 0xcfc 兩個位置的讀寫,所會得到的相關訊息是什麼? 或者有更詳細的說明? 麻煩各位指教了
inse
一般會員


發表:5
回覆:2
積分:1
註冊:2004-06-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-21 21:13:22 IP:218.167.xxx.xxx 未訂閱
嘿嘿    Delphi K.Top + Google 大神 應該是沒有解決不了的問題了    就像大大之前討論跟提示的,如果只是想找 PCI DEVICE 的存在的話    對 0xCF8 跟 0xCFC作 讀寫,就可以獲得相關的 VendID 跟 DevID 的數值    那如何把獲得的數值轉換成VendID 跟 DevID 勒?    這時候是 Google 大神發威的時候了,我透過 Google 找到了一行簡單好用的語法    VendID=result & 0x0000FFFF); DevID=(result >> 16); 就可以獲得正確的資料了,剩下的是如何在WINDOW下作I/O的讀寫,這個我想在本討論區應該討論過N次了,我也就不在囉唆,我用的是在本討論區裡有人提過的WinIO的函式庫,就可以順利的解決。 以下是我的 測試CODE 跟大伙分享: (修改於WinIO 的Examples\C\WinIoTest)
#include 
#include 
#include "winio.h"    void main()
{
  DWORD dwPortVal;
  //DWORD dwMemVal;
  bool bResult;
  //HANDLE hPhysicalMemory;
  //PBYTE pbLinAddr;      // Call InitializeWinIo to initialize the WinIo library.      bResult = InitializeWinIo();      int i=0;
  int data;            if (bResult)
        {
                for (i = 0; i < 255; i  )
                {
                        data = 0x80000000   (i << 0xB) ;      //formatting data for 0xCFC
                                                                              //if need I can describe how
                                                                     
                        //outprt(ConfAdd, data);
                        SetPortVal(0xCF8, data, 4);
                        //result = inprt(ConfData);             //get data from DevID&VenID
                                           //area of conf space
                        GetPortVal(0xCFC, &dwPortVal, 4);                            //printf("= VendID: %d \n",i, dwPortVal);
                        printf("= VendID: %X :DevID  %X\n",i, dwPortVal & 0x0000FFFF, dwPortVal >> 16);
                }      //SetPortVal(0xCF8, 10, 4);
  //GetPortVal(0xCFC, &dwPortVal, 4);      //printf("data = %d",dwPortVal);
                ShutdownWinIo();
        }
        else
        {
                printf("Error during initialization of WinIo.\n");
                exit(1);
        }
  
}     
系統時間:2024-05-03 16:48:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!