Ошибка при использовании Windows Driver Kit DriverPackagePreinstall - PullRequest
1 голос
/ 12 апреля 2011

Я пытаюсь предварительно установить драйвер .inf после загрузки моей программы Windows и использовал этот вопрос в качестве примера.Я пишу в VB.Net, хотя исходный вопрос был написан на C #, поэтому, возможно, я что-то потерял в переводе, но вот что у меня есть:

    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;однако в настоящее время я не могу заставить его работать на моем локальном компьютере.

Но когда я перехожу к отладчику и вызываю DriverPackagePreinstall внутри функции PreInstall, я получаю -536870347 как результат Int32.Я знаю, что это не имеет смысла, поскольку это должен быть положительный код ошибки или 0 (ERROR_SUCCESS).Я проверил, что INF-файл находится в том месте, где я его ожидаю, и я запустил DIFxCmd.exe \ p, используя это местоположение файла в среде сборки WDK, и получил ожидаемые результаты.Кто-нибудь знает, почему я получу такой странный результат в моем приложении?Или у кого-нибудь есть другой / лучший способ установки драйвера .inf с приложением ClickOnce?

1 Ответ

3 голосов
/ 13 апреля 2011

Если вы переведете -536870347 в гекс, вы получите 0xe0000235 - быстрый поиск обнаружит, что это определено в setupapi.h как ERROR_IN_WOW64, а объяснение :

Если функция возвращает ERROR_IN_WOW64 в 32-битном приложение, приложение выполняется в 64-битной системе, которая не допускается.

...