2012-07-05 103 views
2

我正在寫方法獲得PCI設備,給定供應商ID,設備ID編程(就像從Linux內核的pci_get_device)。訪問設備配置空間 - 贏得內核PCI設備

爲此,我需要獲取設備對象配置。我從這裏讀取相同的內容:http://msdn.microsoft.com/en-us/library/windows/hardware/ff558707(v=vs.85).aspx

現在爲了測試這個,我製作了假的驅動程序服務安裝框架,它將安裝我的I/O設備驅動程序,並從DriverEntry中測試此PCI功能。

但OS與IRQL_NOT_LESS_OR_EQUAL崩潰,在

irp = IoBuildSynchronousFsdRequest(IRP_MJ_PNP, 
             targetObject, 
             NULL, 
             0, 
             NULL, 
             &event, 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> &ioStatusBlock); 

誰能告訴我什麼是錯的,(我是從驅動程序入口調用此,並通過當前安裝驅動程序的設備對象。)

+0

這個我應該使用我的「PCI設備堆棧」驅動程序,例如PCI功能驅動程序...並使用pdo ...我的是NULL ...我認爲它可以從總線#,功能#,設備#生成。 .. 但是我錯了 ... – 2012-07-12 23:46:30

回答

0

你在DriverEntry()中沒有有效的PDO。 DriverEntry在用戶空間應用中大致對應於main(),並且在驅動程序加載到內存之後被稱爲第一件事。 DriverEntry主要目的是向OS註冊驅動程序,其代碼與實際設備無關。只有在操作系統已經調用了初始化回調(在識別出你的設備之後)之後,你才能擁有一個PDO - 並且在DriverEntry完成之後調用回調(事實上,回調應該作爲驅動程序註冊的一部分提供給操作系統DriverEntry())。