2011-10-25 76 views
1

我正在开发一个Windows Mobile 6.1应用程序,我遇到了一个问题,当移动设备停靠时,它会加载用于以太网连接的USB驱动程序,并在卸下它时卸载它。几次驱动程序似乎不加载,所以我的解决方案是从应用程序本身手动加载它。ActivateDeviceEx是否启动驱动程序?

下面是我的P/Invoke声明和用法:

[DllImport("Coredll.dll")] 
extern static IntPtr ActivateDeviceEx(string device, IntPtr regEnts, 
    UInt32 cRegEnts, IntPtr devKey); 

IntPtr handle = ActivateDeviceEx(
    "Drivers\\USB\\ClientDrivers\\ADMTEK_LANUSB_Driver", 
    IntPtr.Zero, 0, IntPtr.Zero); 

我得到一个有效的句柄,但我的问题是,当你激活的设备驱动程序到底发生了什么?我的问题是,驱动程序没有自动获得局域网连接,是我做得足够强迫它这样做?

回答

1

您可以加载流驱动程序ActivateDeviceExe,就好像驱动程序将驻留在HKLM\Drivers\BuiltIn子项一样。这些驱动程序由device.exe的驱动程序加载程序加载。

其他驱动程序,如NDIS Minport驱动程序或USB客户端驱动程序由相应的子系统加载。他们需要在相应的上下文中加载。调用ActivateDeviceEx既不会启动子系统的加载,也不会准备上下文以将这些类型的驱动程序置于运行状态。因此,您不能使用ActivdateDeviceExe加载这些驱动程序。

+0

谢谢你的解释,这多年来一直困扰着我! :) –

相关问题