Visual studio 跟踪DeviceioControl实现的功能

Visual studio 跟踪DeviceioControl实现的功能,visual-studio,mfc,windows-ce,device-driver,Visual Studio,Mfc,Windows Ce,Device Driver,我正在使用一个WinCE设备,它有一个用MFC编写的无线电管理器驱动程序。在Radio GUI的代码中,我可以看到调用了特定IOCTL的Deviceiocontrol函数。但是,我无法跟踪此函数调用的特定代码段。有人能告诉我设备控制是如何工作的吗 DeviceIoControl使用文件句柄调用设备驱动程序。如果您想进入设备驱动程序本身,就必须使用内核调试器 文件句柄表示一个内核对象,它由一个包含函数表的设备对象结构组成。在此表中,在IRP_MJ_设备控制的索引处,驱动器设置其手柄功能。然后使用打

我正在使用一个WinCE设备,它有一个用MFC编写的无线电管理器驱动程序。在Radio GUI的代码中,我可以看到调用了特定IOCTL的Deviceiocontrol函数。但是,我无法跟踪此函数调用的特定代码段。有人能告诉我设备控制是如何工作的吗

DeviceIoControl使用文件句柄调用设备驱动程序。如果您想进入设备驱动程序本身,就必须使用内核调试器


文件句柄表示一个内核对象,它由一个包含函数表的设备对象结构组成。在此表中,在IRP_MJ_设备控制的索引处,驱动器设置其手柄功能。然后使用打包到IRP中的io控制参数调用该函数。

DeviceIoControl使用文件句柄调用设备驱动程序。如果您想进入设备驱动程序本身,就必须使用内核调试器


文件句柄表示一个内核对象,它由一个包含函数表的设备对象结构组成。在此表中,在IRP_MJ_设备控制的索引处,驱动器设置其手柄功能。然后,该函数将使用打包到IRP中的io控制参数进行调用。

您是否有IOCTL发送到的驱动程序的源代码?
您将句柄传递给
DeviceIoControl
-通过调用
CreateFile(L“XXX:”,…)
-XXX是在注册表中设置的驱动程序前缀来打开句柄。#是驱动程序在加载时给出的索引(也可以在注册表中设置)。

要查看执行的功能,请在驱动程序源代码中搜索发送到
DeviceIoControl
的IOCTL。您可以在驱动程序实现的
XXX\u IoControl

中找到它。您有IOCTL发送到的驱动程序的源代码吗?
您将句柄传递给
DeviceIoControl
-通过调用
CreateFile(L“XXX:”,…)
-XXX是在注册表中设置的驱动程序前缀来打开句柄。#是驱动程序在加载时给出的索引(也可以在注册表中设置)。

要查看执行的功能,请在驱动程序源代码中搜索发送到
DeviceIoControl
的IOCTL。您可以在驱动程序实现的
XXX\u IoControl

中找到它,谢谢!恐怕我不知道如何使用内核调试器。我可以看到无线电管理器的代码,我相信无线电管理器IOControl(Rmgr*上下文,IOCTL_u…,BYTE*pInBuffer,DWORD inSize,BYTE*pOutBuffer,DWORD outSize,DWORD*pOutSize)(在无线电驱动程序中)的功能就是deviceiocontrol。我的问题是deviceiocontrol在其参数列表中有一个Rmgr句柄,而设备驱动程序的RadioManager_IOControl在其参数列表中有一个指向Rmgr结构的指针。我无法跟踪此结构是如何填充的。
Rmgr*
是传递给
DeviceIoControl
的设备句柄。调用
CreateFile
时填充此句柄。其填充的确切方式是特定于驱动程序/实现的。它可能在每次调用驱动程序的XXX_Open时填充,也可能在驱动程序的XXX_Init期间填充,并且可能只是驱动程序返回的一个伪句柄。司机专用。谢谢!恐怕我不知道如何使用内核调试器。我可以看到无线电管理器的代码,我相信无线电管理器IOControl(Rmgr*上下文,IOCTL_u…,BYTE*pInBuffer,DWORD inSize,BYTE*pOutBuffer,DWORD outSize,DWORD*pOutSize)(在无线电驱动程序中)的功能就是deviceiocontrol。我的问题是deviceiocontrol在其参数列表中有一个Rmgr句柄,而设备驱动程序的RadioManager_IOControl在其参数列表中有一个指向Rmgr结构的指针。我无法跟踪此结构是如何填充的。
Rmgr*
是传递给
DeviceIoControl
的设备句柄。调用
CreateFile
时填充此句柄。其填充的确切方式是特定于驱动程序/实现的。它可能在每次调用驱动程序的XXX_Open时填充,也可能在驱动程序的XXX_Init期间填充,并且可能只是驱动程序返回的一个伪句柄。特定于驱动程序。