From: Elizabeth Figura zfigura@codeweavers.com
--- dlls/setupapi/devinst.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c index b22ab64a022..e70431e4ec9 100644 --- a/dlls/setupapi/devinst.c +++ b/dlls/setupapi/devinst.c @@ -6198,7 +6198,9 @@ BOOL WINAPI SetupUninstallOEMInfA(const char *inf_file, DWORD flags, void *reser */ BOOL WINAPI SetupUninstallOEMInfW(const WCHAR *inf_file, DWORD flags, void *reserved) { + struct driver_package package; WCHAR target[MAX_PATH]; + DWORD ret;
TRACE("inf_file %s, flags %#lx, reserved %p.\n", debugstr_w(inf_file), flags, reserved);
@@ -6214,12 +6216,21 @@ BOOL WINAPI SetupUninstallOEMInfW(const WCHAR *inf_file, DWORD flags, void *rese wcscat(target, L"\inf\"); wcscat(target, inf_file);
- if (flags & SUOI_FORCEDELETE) - return DeleteFileW(target); + if ((ret = parse_inf(&package, target))) + { + SetLastError(ret); + return FALSE; + }
- FIXME("not deleting %s\n", debugstr_w(target)); + if (package.already_installed) + ret = driver_package_delete(&package); + else + ret = ERROR_FILE_NOT_FOUND;
- return TRUE; + driver_package_cleanup(&package); + + SetLastError(ret); + return !ret; }
HRESULT WINAPI DriverStoreFindDriverPackageW(const WCHAR *inf_path, void *unk1,