2011-10-25 124 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

謝謝你的解釋,這多年來一直困擾着我! :) –

相關問題