/*********************************************************************** * SetupUninstallOEMInfA (SETUPAPI.@) */ BOOL WINAPI SetupUninstallOEMInfA( PCSTR inf_file, DWORD flags, PVOID reserved ) { BOOL ret; WCHAR *inf_fileW = NULL; TRACE("%s, 0x%08x, %p\n", debugstr_a(inf_file), flags, reserved); if (inf_file && !(inf_fileW = strdupAtoW( inf_file ))) return FALSE; ret = SetupUninstallOEMInfW( inf_fileW, flags, reserved ); HeapFree( GetProcessHeap(), 0, inf_fileW ); return ret; }
static bool vboxDrvCfgInfEnumerationCallback(LPCWSTR lpszFileName, PVOID pCtxt) { PINFENUM_CONTEXT pContext = (PINFENUM_CONTEXT)pCtxt; DWORD dwErr; NonStandardLogRelCrap((__FUNCTION__": lpszFileName (%S)\n", lpszFileName)); NonStandardLogRelCrap((__FUNCTION__ ": pContext->InfInfo.lpszClassName = (%S)\n", pContext->InfInfo.lpszClassName)); HINF hInf = SetupOpenInfFileW(lpszFileName, pContext->InfInfo.lpszClassName, INF_STYLE_WIN4, NULL /*__in PUINT ErrorLine */); if (hInf == INVALID_HANDLE_VALUE) { dwErr = GetLastError(); // NonStandardAssert(dwErr == ERROR_CLASS_MISMATCH); if (dwErr != ERROR_CLASS_MISMATCH) { NonStandardLogCrap((__FUNCTION__ ": SetupOpenInfFileW err dwErr=%ld\n", dwErr)); } else { NonStandardLogCrap((__FUNCTION__ ": dwErr == ERROR_CLASS_MISMATCH\n")); } return true; } LPWSTR lpszPnPId; HRESULT hr = vboxDrvCfgInfQueryFirstPnPId(hInf, &lpszPnPId); NonStandardLogRelCrap((__FUNCTION__ ": vboxDrvCfgInfQueryFirstPnPId returned lpszPnPId = (%S)\n", lpszPnPId)); NonStandardLogRelCrap((__FUNCTION__ ": pContext->InfInfo.lpszPnPId = (%S)\n", pContext->InfInfo.lpszPnPId)); if (hr == S_OK) { if (!wcsicmp(pContext->InfInfo.lpszPnPId, lpszPnPId)) { if (!SetupUninstallOEMInfW(lpszFileName, pContext->Flags, /*DWORD Flags could be SUOI_FORCEDELETE */ NULL /*__in PVOID Reserved == NULL */ )) { dwErr = GetLastError(); NonStandardLogRelCrap((__FUNCTION__ ": SetupUninstallOEMInf failed for file (%S), dwErr=%ld\n", lpszFileName, dwErr)); NonStandardAssert(0); hr = HRESULT_FROM_WIN32( dwErr ); } } free(lpszPnPId); } else { NonStandardLogCrap((__FUNCTION__ ": vboxDrvCfgInfQueryFirstPnPId failed, hr=0x%x\n", hr)); } SetupCloseInfFile(hInf); return true; }
VBOXDRVCFG_DECL(HRESULT) VBoxDrvCfgInfUninstall(IN LPCWSTR lpszInfPath, DWORD fFlags) { WCHAR DstInfName[MAX_PATH]; DWORD cbDword = sizeof (DstInfName); HRESULT hr = vboxDrvCfgInfCopyEx(lpszInfPath, SP_COPY_REPLACEONLY, DstInfName, cbDword, &cbDword, NULL); if (hr == VBOXDRVCFG_S_INFEXISTS) { if (!SetupUninstallOEMInfW(DstInfName, fFlags, NULL /*__in PVOID Reserved == NULL */)) { DWORD dwErr = GetLastError(); NonStandardLogRelCrap((__FUNCTION__ ": SetupUninstallOEMInf failed for file (%S), oem(%S), dwErr=%ld\n", lpszInfPath, DstInfName, dwErr)); NonStandardAssert(0); return HRESULT_FROM_WIN32(dwErr); } } return S_OK; }