DriverPackageUninstall (difxapi)
Last changed: Andriy Klyuchevskyy-131.107.0.103

.
Summary
The DriverPackageUninstall function uninstalls the specified driver package from the system and removes the driver package from the driver store.

C# Signature:

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

VB Signature:

Public Declare Auto Function DriverPackageUninstall 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:

You can only uninstall drivers which are already present in the Driver Store.

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_DELETE_FILES;
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 UninstallResult = DriverPackageUninstall(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_DELETE_FILES
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 UninstallResult As Int32 = DriverPackageUninstall(infFile, Flags, ptrInstallerInfo, fNeedReboot)
Marshal.FreeHGlobal(ptrInstallerInfo)

Documentation