advpack: Branch off the advpack install functions into install.c.
This commit is contained in:
parent
b88b480851
commit
60de11c084
|
@ -10,6 +10,7 @@ EXTRALIBS = $(LIBUNICODE)
|
|||
C_SRCS = \
|
||||
advpack.c \
|
||||
files.c \
|
||||
install.c \
|
||||
reg.c
|
||||
|
||||
SUBDIRS = tests
|
||||
|
|
|
@ -140,146 +140,6 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* 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.@)
|
||||
*
|
||||
|
@ -497,29 +357,6 @@ void WINAPI RegisterOCX( HWND hWnd, HINSTANCE hInst, LPCSTR cmdline, INT show )
|
|||
FreeLibrary(hm);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* 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.@)
|
||||
*
|
||||
|
|
|
@ -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 <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#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;
|
||||
}
|
Loading…
Reference in New Issue