DriverPackageInstall (difxapi)
Last changed: -82.128.189.7

.
Summary
The DriverPackageInstall function preinstalls a driver package in the driver store and then installs the driver in the system

C# Signature:

[DllImport("DIFxAPI.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern Int32 DriverPackageInstall([MarshalAs(UnmanagedType.LPTStr)] string DriverPackageInfPath, Int32 Flags, IntPtr pInstallerInfo, out bool pNeedReboot);

    [DllImport("DIFxAPI.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern Int32 DriverPackageInstall(
        ref                  String DriverPackageInfPath,
        [In]                 Int32 Flags,
                         IntPtr pInstallerInfo,
        out                  Boolean pNeedReboot
        );

VB Signature:

Public Declare Auto Function DriverPackageInstall Lib "DIFxAPI.dll" (ByVal DriverPackageInfPath As String, ByVal Flags As Int32, ByVal pInstallerInfo As IntPtr, ByRef pNeedReboot As Boolean) As Int32

User-Defined Types:

DIFxAPI Constants - see http://www.pinvoke.net/default.aspx/Constants.DIFxAPI%20Constants

INSTALLERINFO

Alternative Managed API:

Do you know one? Please contribute it!

Notes:

None.

Tips & Tricks:

To use this function you just need difxapi.dll of appropriate architecture from Windows Server 2008/Vista WDK. The DriverStore will be created automatically for you.

Sample Code:

C#:

string infFile = <INF_file_name>;
Int32 Flags = DRIVER_PACKAGE_SILENT | DRIVER_PACKAGE_ONLY_IF_DEVICE_PRESENT | DRIVER_PACKAGE_LEGACY_MODE;
bool fNeedReboot;
INSTALLERINFO installerInfo = new INSTALLERINFO();
installerInfo.pApplicationId = "{4d36e972-e325-11ce-bfc1-08002be10319}";
installerInfo.pDisplayName = "My Package";
installerInfo.pProductName = "My Package";
installerInfo.pMfgName = "Myself";
IntPtr ptrInstallerInfo = Marshal.AllocHGlobal(Marshal.SizeOf(installerInfo));
Marshal.StructureToPtr(installerInfo, ptrInstallerInfo, false);
Int32 InstallResult = DriverPackageInstall(infFile, Flags, ptrInstallerInfo, out fNeedReboot);
Marshal.FreeHGlobal(ptrInstallerInfo);

VB:

Dim infFile As String = <INF_file_name>
Dim Flags As Int32 = DRIVER_PACKAGE_SILENT Or DRIVER_PACKAGE_ONLY_IF_DEVICE_PRESENT Or DRIVER_PACKAGE_LEGACY_MODE
Dim fNeedReboot As Boolean
Dim installerInfo As INSTALLERINFO = New INSTALLERINFO()
installerInfo.pApplicationId = "{4d36e972-e325-11ce-bfc1-08002be10319}"
installerInfo.pDisplayName = "My Package"
installerInfo.pProductName = "My Package"
installerInfo.pMfgName = "Myself"
Dim ptrInstallerInfo As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(INSTALLERINFO))
Marshal.StructureToPtr(INSTALLERINFO, ptrInstallerInfo, False)
Dim InstallResult As Int32 = DriverPackageInstall(infFile, Flags, ptrInstallerInfo, fNeedReboot)
Marshal.FreeHGlobal(ptrInstallerInfo)

Documentation