使用Windows驱动程序工具包DriverPackagePreinstall时出错 [英] Error using Windows Driver Kit DriverPackagePreinstall

查看:2615
本文介绍了使用Windows驱动程序工具包DriverPackagePreinstall时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Windows程序加载后预安装.inf驱动程序,并且正在使用基于此问题为例。我是在VB.Net中编写的,而最初的问题是在C#中完成的,所以可能是我在翻译中迷失了一些东西,但这就是我所拥有的:

I am trying to preinstall an .inf driver after my windows program loads and was using this question as an example. I am writing in VB.Net while the original question was done in C# so it might be something I lost in translation but here's what I have:

    Public Shared Function PreInstall(ByVal fileName As String, Optional ByVal useDefaultLocation As Boolean = True) As Boolean
        Try
            Dim file As String = IIf(useDefaultLocation, DriverLocation(fileName), fileName)
            Dim result As Int32 = DriverPackagePreinstall(file, 0) 'this is not working but I don't know why?!?
            Return (result = ERROR_SUCCESS OrElse result = ERROR_ALREADY_EXISTS)
        Catch ex As Exception
            My.Application.LogError(ex, New StringPair("Driver", fileName))
        End Try
        Return False
    End Function

    Private Shared ReadOnly Property DriverLocation(ByVal fileName As String) As String
        Get
            Return String.Format("{0}\Drivers\{1}", ApplicationDirectory(), fileName)
        End Get
    End Property

    Public Function ApplicationDirectory() As String
        If My.Application.IsNetworkDeployed Then
            Return My.Application.Deployment.DataDirectory
        Else
            Return Application.StartupPath
        End If
    End Function

    <DllImport("DIFXApi.dll", CharSet:=CharSet.Unicode)> _
    Public Shared Function DriverPackagePreinstall(ByVal DriverPackageInfPath As String, ByVal Flags As Int32) As Int32
    End Function

    Const ERROR_SUCCESS As Int32 = 0
    Const ERROR_ALREADY_EXISTS As Int32 = &HB7
    Const ERROR_ACCESS_DENIED As Int32 = &H5

我的.inf文件位于名为驱动程序和驱动程序在应用程序文件中设置为必需的数据文件。我的应用程序是通过ClickOnce部署的;但是,我目前无法在本地计算机上使用它。

My .inf file is in a directory called Drivers and is setup in the Application Files as a required "Data File". My application is deployed via ClickOnce; however, I currently cannot get it to work on my local machince.

但是当我逐步调试程序并在PreInstall函数中调用DriverPackagePreinstall时,得到-536870347作为Int32结果。我知道这没有意义,因为它应该是正的错误代码或0(ERROR_SUCCESS)。我检查了.inf文件是否位于我期望的位置,并且已在WDK构建环境中使用该文件位置运行了DIFxCmd.exe \p,并且得到了预期的结果。有谁知道为什么我的申请会得到如此奇怪的结果?还是有人可以通过ClickOnce应用程序安装.inf驱动程序呢?

But when I step through with the debugger and call the DriverPackagePreinstall inside of PreInstall function, I get -536870347 as the Int32 result. I know that doesn't make sense because it should be a positive Error code or 0 (ERROR_SUCCESS). I have checked that the .inf file is in the location that I expect which it is and I have run DIFxCmd.exe \p using that file location with the WDK build environment and I get the expected results. Does anyone know why I would be getting such a weird result in my application? Or does anyone have another/better way of installing a .inf driver with a ClickOnce application?

推荐答案

如果将-536870347转换为十六进制为0xe0000235-快速搜索发现它在setupapi.h中定义为 ERROR_IN_WOW64 解释是:

If you translate -536870347 to hex you get 0xe0000235 - a quick search finds that this is defined in setupapi.h as ERROR_IN_WOW64 and the explanation is:


如果函数返回ERROR_IN_WOW64 in一个32位
应用程序,该应用程序是
在64位系统上执行,不允许

If the function returns ERROR_IN_WOW64 in a 32-bit application, the application is executing on a 64-bit system, which is not allowed.

这篇关于使用Windows驱动程序工具包DriverPackagePreinstall时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆