2012-11-04 54 views
2

有沒有可能在Windows XP及更高版本的Visual Basic.Net中爲ISA卡寫入內容? (我知道的Win XP及以上有限制,以便ü不能直接將數據寫入到港)與Visual Basic的ISA端口通信

我也做了一些研究,如果我瞭解的情況,我只有2個選擇:

  1. 寫入驅動器(很成問題的選擇:))或

  2. 嘗試使用現有的驅動程序在kernel32像司機串行/相同常端口。

如果有任何的arent其他的選擇,我怎麼有修改的「使用的串行/相同常口」使用它的ISA接口?

+0

您是否試圖寫入ISA總線,或者您是否試圖與特定的ISA卡通信?如果是這樣,它是什麼卡? –

+0

我試圖寫入特定的ISA卡(控制某種LED面板),但我不知道它是什麼類型,老HW不是我的域名:) – astromedia

+0

所以...你如何期望與它溝通,如果你不不知道它是什麼?你有通信協議嗎?有關其功能的文檔? –

回答

1

現代版本的Windows不允許來自用戶應用程序的直接端口I/O。您的程序在Ring 3中運行,而不是在Ring 0上運行。您需要某種驅動程序代表應用程序執行端口I/O。

要做的第一件事就是聯繫卡製造商,看看他們是否爲你的主板製作了Windows驅動程序。

如果Windows驅動程序不可用,並且您只是想要執行基本的reigster讀寫操作(無中斷或DMA),則可以下載一些可自由下載的庫來執行端口I/O。基本上,該庫包含一個位於Ring 0的虛擬「驅動程序」,併爲您執行I/O。我有最多的經驗WinIO

WinIO有一個C/C++ API,沒有任何.Net/CLR。您將需要使用P/Invoke從託管代碼調用WinIO函數。

如果您四處搜索,您可能會發現一個類似於WinIO的工具包,它提供了託管代碼的API。 (編輯:這是我收藏的一個名爲DirectIO。)

WinIO的最大問題是,您僅限於基本的寄存器讀取/寫入操作。如果您需要中斷或DMA,那麼您運氣不好。那時,你需要寫一個「真正的」驅動程序。

寫一個驅動程序對於外行人來說可能是一個非常重要的任務(有很多你會搞砸)。您需要先獲得Windows Driver Kit的副本,並研究微軟的Kernel Mode Driver Framework。您也可以考慮購買Jungo WinDriver的副本。 WinDriver是第三方工具,可以大大簡化驅動程序的開發,但對於一次性項目而言,它非常昂貴。

+1

Thx回答,我很確定沒有任何驅動程序,我已經在WDK和示例驅動程序中做了一些研究,因爲你說的最糟糕的選擇,但當你認爲它是一個非常重要的任務,並有很多東西搞砸了:) .. 。如果WinIO可以寫入和讀取ISA卡,它將解決我的問題,因爲我認爲我不需要更多。 我會盡快測試它(我必須得到一些舊計算機的isa插槽和一些isa卡,如果有些問題出錯了,我可以銷燬 - 我不想銷燬我的項目的目標設備:)),我會報告這裏怎麼回事。 (我希望我翻譯的權利:)) – astromedia