From 60de11c084455ce892fcbda0e12f8f6dd8c4349c Mon Sep 17 00:00:00 2001 From: James Hawkins Date: Mon, 20 Feb 2006 21:44:03 -0600 Subject: [PATCH] advpack: Branch off the advpack install functions into install.c. --- dlls/advpack/Makefile.in | 1 + dlls/advpack/advpack.c | 163 --------------------------------------- dlls/advpack/install.c | 196 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 197 insertions(+), 163 deletions(-) create mode 100644 dlls/advpack/install.c diff --git a/dlls/advpack/Makefile.in b/dlls/advpack/Makefile.in index 453808393e7..b1705c7ab6f 100644 --- a/dlls/advpack/Makefile.in +++ b/dlls/advpack/Makefile.in @@ -10,6 +10,7 @@ EXTRALIBS = $(LIBUNICODE) C_SRCS = \ advpack.c \ files.c \ + install.c \ reg.c SUBDIRS = tests diff --git a/dlls/advpack/advpack.c b/dlls/advpack/advpack.c index 0e8c7e58e73..ca1d9f943af 100644 --- a/dlls/advpack/advpack.c +++ b/dlls/advpack/advpack.c @@ -141,146 +141,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) } /*********************************************************************** - * RunSetupCommand (ADVPACK.@) - * - * Executes an install section in an INF file or a program. - * - * PARAMS - * hWnd [I] Handle to parent window, NULL for quiet mode - * szCmdName [I] Inf or EXE filename to execute - * szInfSection [I] Inf section to install, NULL for DefaultInstall - * szDir [I] Path to extracted files - * szTitle [I] Title of all dialogs - * phEXE [O] Handle of EXE to wait for - * dwFlags [I] Flags; see include/advpub.h - * pvReserved [I] Reserved - * - * RETURNS - * S_OK Everything OK - * S_ASYNCHRONOUS OK, required to wait on phEXE - * ERROR_SUCCESS_REBOOT_REQUIRED Reboot required - * E_INVALIDARG Invalid argument given - * HRESULT_FROM_WIN32(ERROR_OLD_WIN_VERSION) - * Not supported on this Windows version - * E_UNEXPECTED Unexpected error - * HRESULT_FROM_WIN32(GetLastError()) Some other error - * - * BUGS - * Unimplemented - */ -HRESULT WINAPI RunSetupCommand( HWND hWnd, LPCSTR szCmdName, - LPCSTR szInfSection, LPCSTR szDir, - LPCSTR lpszTitle, HANDLE *phEXE, - DWORD dwFlags, LPVOID pvReserved ) -{ - FIXME("(%p, %s, %s, %s, %s, %p, 0x%08lx, %p): stub\n", - hWnd, debugstr_a(szCmdName), debugstr_a(szInfSection), - debugstr_a(szDir), debugstr_a(lpszTitle), - phEXE, dwFlags, pvReserved); - return E_UNEXPECTED; -} - -/*********************************************************************** - * LaunchINFSection (ADVPACK.@) - * - * Installs an INF section without BACKUP/ROLLBACK capabilities. - * - * PARAMS - * hWnd [I] Handle to parent window, NULL for desktop. - * hInst [I] Instance of the process. - * cmdline [I] Contains parameters in the order INF,section,flags. - * show [I] Reboot behaviour: - * 'A' reboot always - * 'I' default, reboot if needed - * 'N' no reboot - * - * RETURNS - * Success: S_OK. - * Failure: S_FALSE - * - * BUGS - * Unimplemented. - */ -INT WINAPI LaunchINFSection( HWND hWnd, HINSTANCE hInst, LPSTR cmdline, INT show ) -{ - FIXME("(%p %p %s %d): stub\n", hWnd, hInst, debugstr_a(cmdline), show ); - return 0; -} - -/*********************************************************************** - * LaunchINFSectionEx (ADVPACK.@) - * - * Installs an INF section with BACKUP/ROLLBACK capabilities. - * - * PARAMS - * hWnd [I] Handle to parent window, NULL for desktop. - * hInst [I] Instance of the process. - * cmdline [I] Contains parameters in the order INF,section,CAB,flags. - * show [I] Reboot behaviour: - * 'A' reboot always - * 'I' default, reboot if needed - * 'N' no reboot - * - * RETURNS - * Success: S_OK. - * Failure: E_FAIL. - * - * BUGS - * Unimplemented. - */ -HRESULT WINAPI LaunchINFSectionEx( HWND hWnd, HINSTANCE hInst, LPSTR cmdline, INT show ) -{ - FIXME("(%p %p %s %d): stub\n", hWnd, hInst, debugstr_a(cmdline), show ); - return E_FAIL; -} - -/* this structure very closely resembles parameters of RunSetupCommand() */ -typedef struct -{ - HWND hwnd; - LPCSTR title; - LPCSTR inf_name; - LPCSTR dir; - LPCSTR section_name; -} SETUPCOMMAND_PARAMS; - -/*********************************************************************** - * DoInfInstall (ADVPACK.@) - * - * Install an INF section. - * - * PARAMS - * setup [I] Structure containing install information. - * - * RETURNS - * S_OK Everything OK - * HRESULT_FROM_WIN32(GetLastError()) Some other error - */ -HRESULT WINAPI DoInfInstall(const SETUPCOMMAND_PARAMS *setup) -{ - BOOL ret; - HINF hinf; - void *callback_context; - - TRACE("%p %s %s %s %s\n", setup->hwnd, debugstr_a(setup->title), - debugstr_a(setup->inf_name), debugstr_a(setup->dir), - debugstr_a(setup->section_name)); - - hinf = SetupOpenInfFileA(setup->inf_name, NULL, INF_STYLE_WIN4, NULL); - if (hinf == INVALID_HANDLE_VALUE) return HRESULT_FROM_WIN32(GetLastError()); - - callback_context = SetupInitDefaultQueueCallback(setup->hwnd); - - ret = SetupInstallFromInfSectionA(NULL, hinf, setup->section_name, SPINST_ALL, - NULL, NULL, 0, SetupDefaultQueueCallbackA, - callback_context, NULL, NULL); - SetupTermDefaultQueueCallback(callback_context); - SetupCloseInfFile(hinf); - - return ret ? S_OK : HRESULT_FROM_WIN32(GetLastError()); -} - -/*********************************************************************** * IsNTAdmin (ADVPACK.@) * * Checks if the user has admin privileges. @@ -498,29 +358,6 @@ void WINAPI RegisterOCX( HWND hWnd, HINSTANCE hInst, LPCSTR cmdline, INT show ) } /*********************************************************************** - * ExecuteCab (ADVPACK.@) - * - * Installs the INF file extracted from a specified cabinet file. - * - * PARAMS - * hwnd [I] Handle to the window used for the display. - * pCab [I] Information about the cabinet file. - * pReserved [I] Reserved. Must be NULL. - * - * RETURNS - * Success: S_OK. - * Failure: E_FAIL. - * - * BUGS - * Unimplemented - */ -HRESULT WINAPI ExecuteCab( HWND hwnd, PCABINFO pCab, LPVOID pReserved ) -{ - FIXME("(%p %p %p): stub\n", hwnd, pCab, pReserved); - return E_FAIL; -} - -/*********************************************************************** * SetPerUserSecValues (ADVPACK.@) * * Prepares the per-user stub values under IsInstalled\{GUID} that diff --git a/dlls/advpack/install.c b/dlls/advpack/install.c new file mode 100644 index 00000000000..806f8d537d1 --- /dev/null +++ b/dlls/advpack/install.c @@ -0,0 +1,196 @@ +/* + * Advpack install functions + * + * Copyright 2006 James Hawkins + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "winreg.h" +#include "winver.h" +#include "setupapi.h" +#include "advpub.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(advpack); + +/* this structure very closely resembles parameters of RunSetupCommand() */ +typedef struct +{ + HWND hwnd; + LPCSTR title; + LPCSTR inf_name; + LPCSTR dir; + LPCSTR section_name; +} SETUPCOMMAND_PARAMS; + +/*********************************************************************** + * DoInfInstall (ADVPACK.@) + * + * Install an INF section. + * + * PARAMS + * setup [I] Structure containing install information. + * + * RETURNS + * S_OK Everything OK + * HRESULT_FROM_WIN32(GetLastError()) Some other error + */ +HRESULT WINAPI DoInfInstall(const SETUPCOMMAND_PARAMS *setup) +{ + BOOL ret; + HINF hinf; + void *callback_context; + + TRACE("%p %s %s %s %s\n", setup->hwnd, debugstr_a(setup->title), + debugstr_a(setup->inf_name), debugstr_a(setup->dir), + debugstr_a(setup->section_name)); + + hinf = SetupOpenInfFileA(setup->inf_name, NULL, INF_STYLE_WIN4, NULL); + if (hinf == INVALID_HANDLE_VALUE) return HRESULT_FROM_WIN32(GetLastError()); + + callback_context = SetupInitDefaultQueueCallback(setup->hwnd); + + ret = SetupInstallFromInfSectionA(NULL, hinf, setup->section_name, SPINST_ALL, + NULL, NULL, 0, SetupDefaultQueueCallbackA, + callback_context, NULL, NULL); + SetupTermDefaultQueueCallback(callback_context); + SetupCloseInfFile(hinf); + + return ret ? S_OK : HRESULT_FROM_WIN32(GetLastError()); +} + +/*********************************************************************** + * ExecuteCab (ADVPACK.@) + * + * Installs the INF file extracted from a specified cabinet file. + * + * PARAMS + * hwnd [I] Handle to the window used for the display. + * pCab [I] Information about the cabinet file. + * pReserved [I] Reserved. Must be NULL. + * + * RETURNS + * Success: S_OK. + * Failure: E_FAIL. + * + * BUGS + * Unimplemented + */ +HRESULT WINAPI ExecuteCab( HWND hwnd, PCABINFO pCab, LPVOID pReserved ) +{ + FIXME("(%p %p %p): stub\n", hwnd, pCab, pReserved); + return E_FAIL; +} + +/*********************************************************************** + * LaunchINFSection (ADVPACK.@) + * + * Installs an INF section without BACKUP/ROLLBACK capabilities. + * + * PARAMS + * hWnd [I] Handle to parent window, NULL for desktop. + * hInst [I] Instance of the process. + * cmdline [I] Contains parameters in the order INF,section,flags. + * show [I] Reboot behaviour: + * 'A' reboot always + * 'I' default, reboot if needed + * 'N' no reboot + * + * RETURNS + * Success: S_OK. + * Failure: S_FALSE + * + * BUGS + * Unimplemented. + */ +INT WINAPI LaunchINFSection( HWND hWnd, HINSTANCE hInst, LPSTR cmdline, INT show ) +{ + FIXME("(%p %p %s %d): stub\n", hWnd, hInst, debugstr_a(cmdline), show ); + return 0; +} + +/*********************************************************************** + * LaunchINFSectionEx (ADVPACK.@) + * + * Installs an INF section with BACKUP/ROLLBACK capabilities. + * + * PARAMS + * hWnd [I] Handle to parent window, NULL for desktop. + * hInst [I] Instance of the process. + * cmdline [I] Contains parameters in the order INF,section,CAB,flags. + * show [I] Reboot behaviour: + * 'A' reboot always + * 'I' default, reboot if needed + * 'N' no reboot + * + * RETURNS + * Success: S_OK. + * Failure: E_FAIL. + * + * BUGS + * Unimplemented. + */ +HRESULT WINAPI LaunchINFSectionEx( HWND hWnd, HINSTANCE hInst, LPSTR cmdline, INT show ) +{ + FIXME("(%p %p %s %d): stub\n", hWnd, hInst, debugstr_a(cmdline), show ); + return E_FAIL; +} + +/*********************************************************************** + * RunSetupCommand (ADVPACK.@) + * + * Executes an install section in an INF file or a program. + * + * PARAMS + * hWnd [I] Handle to parent window, NULL for quiet mode + * szCmdName [I] Inf or EXE filename to execute + * szInfSection [I] Inf section to install, NULL for DefaultInstall + * szDir [I] Path to extracted files + * szTitle [I] Title of all dialogs + * phEXE [O] Handle of EXE to wait for + * dwFlags [I] Flags; see include/advpub.h + * pvReserved [I] Reserved + * + * RETURNS + * S_OK Everything OK + * S_ASYNCHRONOUS OK, required to wait on phEXE + * ERROR_SUCCESS_REBOOT_REQUIRED Reboot required + * E_INVALIDARG Invalid argument given + * HRESULT_FROM_WIN32(ERROR_OLD_WIN_VERSION) + * Not supported on this Windows version + * E_UNEXPECTED Unexpected error + * HRESULT_FROM_WIN32(GetLastError()) Some other error + * + * BUGS + * Unimplemented + */ +HRESULT WINAPI RunSetupCommand( HWND hWnd, LPCSTR szCmdName, + LPCSTR szInfSection, LPCSTR szDir, + LPCSTR lpszTitle, HANDLE *phEXE, + DWORD dwFlags, LPVOID pvReserved ) +{ + FIXME("(%p, %s, %s, %s, %s, %p, 0x%08lx, %p): stub\n", + hWnd, debugstr_a(szCmdName), debugstr_a(szInfSection), + debugstr_a(szDir), debugstr_a(lpszTitle), + phEXE, dwFlags, pvReserved); + return E_UNEXPECTED; +} -- 2.11.4.GIT