[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);
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
DIFxAPI Constants - see http://www.pinvoke.net/default.aspx/Constants.DIFxAPI%20Constants
Do you know one? Please contribute it!
You can only uninstall drivers which are already present in the Driver Store.
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.
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)