wine/dlls/advpack/install.c
Francois Gouget be6d891f0d advpack: Prepare the unicodification of advpack.dll.
All functions that manipulate strings should have an Ansi and a
Unicode variant.
Forward the unqualified dll entry points to the Ansi variant for
backward compatibility.
We're not allowed to use unqualified entry points in Wine, so change
RegInstall() calls to RegInstallA().
Update win32.api.
2006-02-27 15:57:33 +01:00

197 lines
6.2 KiB
C

/*
* 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());
}
/***********************************************************************
* ExecuteCabA (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 ExecuteCabA( HWND hwnd, CABINFOA* pCab, LPVOID pReserved )
{
FIXME("(%p %p %p): stub\n", hwnd, pCab, pReserved);
return E_FAIL;
}
/***********************************************************************
* LaunchINFSectionA (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 LaunchINFSectionA( HWND hWnd, HINSTANCE hInst, LPSTR cmdline, INT show )
{
FIXME("(%p %p %s %d): stub\n", hWnd, hInst, debugstr_a(cmdline), show );
return 0;
}
/***********************************************************************
* LaunchINFSectionExA (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 LaunchINFSectionExA( HWND hWnd, HINSTANCE hInst, LPSTR cmdline, INT show )
{
FIXME("(%p %p %s %d): stub\n", hWnd, hInst, debugstr_a(cmdline), show );
return E_FAIL;
}
/***********************************************************************
* RunSetupCommandA (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 RunSetupCommandA(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;
}