2010-04-21 66 views
0

我正在使用WinCE設備,該設備在MFC中爲它編寫了無線電管理器驅動程序。在Radio GUI代碼中,我可以看到具有被調用的特定IOCTL的函數Deviceiocontrol。但是,我無法跟蹤由此函數調用的特定代碼片段。有人能告訴我Deviceiocontrol是如何工作的嗎?跟蹤由DeviceioControl實現的功能

回答

3

DeviceIoControl通過使用文件句柄調用設備驅動程序。如果你想進入設備驅動程序本身,你必須使用內核調試器。

文件句柄表示一個內核對象,它由包含函數表的DEVICE_OBJECT結構組成。在IRP_MJ_DEVICE_CONTROL索引的此表中,驅動程序設置其句柄函數。然後該函數將被打包到IRP中的io控制參數調用。

+0

謝謝!恐怕我不知道如何使用內核調試器。我可以看到Radio Manager的代碼,我相信RadioManager_IOControl(Rmgr * context,IOCTL _...,BYTE * pInBuffer,DWORD inSize,BYTE * pOutBuffer,DWORD outSize,DWORD * pOutSize)(在無線電驅動程序中)的功能是deviceiocontrol稱爲什麼。我的問題是deviceiocontrol在其參數列表中有Rmgr的句柄,而設備驅動程序的RadioManager_IOControl在其參數列表中有一個指向Rmgr結構的指針。我無法追蹤這個結構是如何填充的。 – ame 2010-04-21 13:13:36

+0

'Rmgr *'是您傳遞給'DeviceIoControl'的設備句柄。當你調用'CreateFile'時,這個句柄被填充。它的人口確切的方式是驅動程序/實現特定的。每次驅動程序的XXX_Open被調用時,它可能會被填充,並且可能在驅動程序的XXX_Init期間被填充,並且可能僅僅是驅動程序返回的虛擬句柄。特定驅動程序 – Shaihi 2010-04-25 05:53:47

0

您是否有IOCTL發送給驅動程序的源代碼?
您將句柄傳遞給DeviceIoControl - 句柄通過調用CreateFile(L"XXX#:",...)打開 - XXX是註冊表中設置的驅動程序的前綴。 #是加載時驅動程序提供的索引(也可以在註冊表中設置)。
要查看執行的功能,請搜索您在驅動程序源代碼中發送到DeviceIoControl的IOCTL。您會在驅動程序的實現XXX_IoControl中找到它。