From 1a0208ef612708c7dd8e570760758d7da2405f9c Mon Sep 17 00:00:00 2001 From: James Hawkins Date: Tue, 20 Jun 2006 14:31:01 -0700 Subject: [PATCH] advpack: Implement DoInfInstall on top of the install framework. --- dlls/advpack/install.c | 69 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 13 deletions(-) diff --git a/dlls/advpack/install.c b/dlls/advpack/install.c index 20441cfe2e3..edfc6635a4b 100644 --- a/dlls/advpack/install.c +++ b/dlls/advpack/install.c @@ -460,6 +460,41 @@ typedef struct LPCSTR section_name; } SETUPCOMMAND_PARAMS; +typedef struct +{ + HWND hwnd; + LPCWSTR title; + LPCWSTR inf_name; + LPCWSTR dir; + LPCWSTR section_name; +} SETUPCOMMAND_PARAMSW; + +/* internal: see DoInfInstall */ +static HRESULT DoInfInstallW(const SETUPCOMMAND_PARAMSW *setup) +{ + ADVInfo info; + HRESULT hr; + + TRACE("(%p)\n", setup); + + ZeroMemory(&info, sizeof(ADVInfo)); + + hr = install_init(setup->inf_name, setup->section_name, setup->dir, 0, &info); + if (hr != S_OK) + goto done; + + hr = spapi_install(&info); + if (hr != S_OK) + goto done; + + hr = adv_install(&info); + +done: + install_release(&info); + + return S_OK; +} + /*********************************************************************** * DoInfInstall (ADVPACK.@) * @@ -474,24 +509,32 @@ typedef struct */ HRESULT WINAPI DoInfInstall(const SETUPCOMMAND_PARAMS *setup) { - BOOL ret; - HINF hinf; - void *callback_context; + UNICODE_STRING title, inf, section, dir; + SETUPCOMMAND_PARAMSW params; + HRESULT hr; - TRACE("(%p)\n", setup); + if (!setup) + return E_INVALIDARG; - hinf = SetupOpenInfFileA(setup->inf_name, NULL, INF_STYLE_WIN4, NULL); - if (hinf == INVALID_HANDLE_VALUE) return HRESULT_FROM_WIN32(GetLastError()); + RtlCreateUnicodeStringFromAsciiz(&title, setup->title); + RtlCreateUnicodeStringFromAsciiz(&inf, setup->inf_name); + RtlCreateUnicodeStringFromAsciiz(§ion, setup->section_name); + RtlCreateUnicodeStringFromAsciiz(&dir, setup->dir); - callback_context = SetupInitDefaultQueueCallback(setup->hwnd); + params.title = title.Buffer; + params.inf_name = inf.Buffer; + params.section_name = section.Buffer; + params.dir = dir.Buffer; + params.hwnd = setup->hwnd; - ret = SetupInstallFromInfSectionA(NULL, hinf, setup->section_name, SPINST_ALL, - NULL, NULL, 0, SetupDefaultQueueCallbackA, - callback_context, NULL, NULL); - SetupTermDefaultQueueCallback(callback_context); - SetupCloseInfFile(hinf); + hr = DoInfInstallW(¶ms); - return ret ? S_OK : HRESULT_FROM_WIN32(GetLastError()); + RtlFreeUnicodeString(&title); + RtlFreeUnicodeString(&inf); + RtlFreeUnicodeString(§ion); + RtlFreeUnicodeString(&dir); + + return hr; } /***********************************************************************