Started some basic work on the more or less undocumented SETUPX

functions.
This commit is contained in:
Andreas Mohr 2000-09-26 22:46:36 +00:00 committed by Alexandre Julliard
parent 0fc9d151fd
commit 5644cdc1f5
5 changed files with 201 additions and 12 deletions

View file

@ -8,6 +8,7 @@ ALTNAMES = setupx
IMPORTS = advapi32 kernel32
C_SRCS = \
infparse.c \
setupx_main.c \
stubs.c

93
dlls/setupapi/infparse.c Normal file
View file

@ -0,0 +1,93 @@
/*
* SetupX .inf file parsing functions
*
* FIXME: return values ???
*/
#include "debugtools.h"
#include "windef.h"
#include "winbase.h"
#include "wine/winbase16.h"
#include "setupx16.h"
DEFAULT_DEBUG_CHANNEL(setupx);
WORD InfNumEntries = 0;
INF_HANDLE *InfList = NULL;
#define GET_INF_ENTRY(x) ((InfList - x)/4)
RETERR16 IP_OpenInf(LPCSTR lpInfFileName, HINF16 *lphInf)
{
HFILE16 hFile = _lopen16(lpInfFileName, OF_READ);
if (!lphInf)
return IP_ERROR;
if (hFile != HFILE_ERROR16)
{
InfList = HeapReAlloc(GetProcessHeap(), 0, InfList, InfNumEntries+1);
InfList[InfNumEntries].hInfFile = hFile;
InfList[InfNumEntries].lpInfFileName = lpInfFileName;
InfNumEntries++;
*lphInf = &InfList[InfNumEntries-1] - InfList;
return OK;
}
*lphInf = 0xffff;
return ERR_IP_INVALID_INFFILE;
}
LPCSTR IP_GetFileName(HINF16 hInf)
{
if ((hInf <= (InfNumEntries*sizeof(INF_HANDLE *)))
&& ((hInf & 3) == 0)) /* aligned ? */
{
return InfList[hInf/4].lpInfFileName;
}
return NULL;
}
RETERR16 IP_CloseInf(HINF16 hInf)
{
int i;
HFILE16 res = ERR_IP_INVALID_HINF;
if ((hInf <= (InfNumEntries*sizeof(INF_HANDLE *)))
&& ((hInf & 3) == 0)) /* aligned ? */
{
_lclose16(InfList[hInf/4].hInfFile);
res = OK;
for (i=hInf/4; i < InfNumEntries-1; i++)
InfList[i] = InfList[i+1];
InfNumEntries--;
InfList = HeapReAlloc(GetProcessHeap(), 0, InfList, InfNumEntries);
}
return res;
}
/***********************************************************************
* IpOpen16
*
*/
RETERR16 WINAPI IpOpen16(LPCSTR lpInfFileName, HINF16 *lphInf)
{
TRACE("('%s', %p)\n", lpInfFileName, lphInf);
return IP_OpenInf(lpInfFileName, lphInf);
}
/***********************************************************************
* IpClose16
*/
RETERR16 WINAPI IpClose16(HINF16 hInf)
{
return IP_CloseInf(hInf);
}
/***********************************************************************
* IpGetProfileString16
*/
RETERR16 WINAPI IpGetProfileString16(HINF16 hInf, LPCSTR section, LPCSTR entry, LPSTR buffer, WORD buflen)
{
GetPrivateProfileString16(section, entry, "", buffer, buflen, IP_GetFileName(hInf));
return 0;
}

View file

@ -3,9 +3,9 @@ type win16
owner setupapi
1 stub WEP
2 stub IPOPEN
2 pascal16 IpOpen(str ptr) IpOpen16
3 stub IPOPENAPPEND
4 stub IPCLOSE
4 pascal16 IpClose(word) IpClose16
5 stub IPGETLONGFIELD
6 stub IPGETSTRINGFIELD
7 stub IPFINDFIRSTLINE
@ -39,7 +39,7 @@ owner setupapi
35 stub CTLFINDLDD
36 stub CTLADDLDD
37 stub CTLDELLDD
38 stub CTLGETLDDPATH
38 pascal16 CtlGetLddPath(word ptr) CtlGetLddPath16
39 stub SUREGCLOSEKEY
40 stub SUREGCREATEKEY
41 stub SUREGDELETEKEY
@ -48,7 +48,7 @@ owner setupapi
44 stub SUREGENUMVALUE
45 stub SUREGFLUSH
46 stub SUREGINIT
47 pascal SUregOpenKey(word str ptr) SURegOpenKey
47 pascal SURegOpenKey(word str ptr) SURegOpenKey
48 stub SUREGQUERYVALUE
49 stub SUREGQUERYVALUE16
50 pascal SURegQueryValueEx(long str ptr ptr ptr ptr) SURegQueryValueEx
@ -64,9 +64,9 @@ owner setupapi
63 stub SURPLSETUP
64 stub SUSTORELDIDPATH
65 stub WILDCARDSTRCMPI
101 stub GENINSTALL
101 pascal16 GenInstall(word str word) GenInstall16
102 stub GENWININITRENAME
103 stub GENFORMSTRWITHOUTPLACEHOLDERS
103 pascal GenFormStrWithoutPlaceHolders(str str word) GenFormStrWithoutPlaceHolders16
104 stub SETUPX
105 stub CFGSETUPMERGE
106 stub INITDEPENDANTLDIDS
@ -113,8 +113,8 @@ owner setupapi
160 stub SXUPDATEDS
170 stub SUSETMEM
171 stub WRITEDMFBOOTDATA
200 stub VCPOPEN
201 stub VCPCLOSE
200 pascal vcpOpen(ptr str) vcpOpen16
201 pascal vcpClose(word word word) vcpClose16
202 stub VCPDEFCALLBACKPROC
203 stub VCPENUMFILES
204 stub VCPQUEUERENAME
@ -123,7 +123,7 @@ owner setupapi
207 stub VSMSTRINGADD
208 stub VSMGETSTRINGRAWNAME
209 stub IPSAVERESTOREPOSITION
210 stub IPGETPROFILESTRING
210 pascal16 IpGetProfileString(word str str ptr word) IpGetProfileString16
211 stub IPOPENEX
212 stub IPOPENAPPENDEX
213 stub VCPUICALLBACKPROC
@ -204,7 +204,7 @@ owner setupapi
504 stub SXOCPAGEDLG
506 stub SXOCBATCHSETTINGS
507 stub SXOCFIXNEEDS
508 stub CTLSETLDDPATH
508 pascal16 CtlSetLddPath(word str) CtlSetLddPath16
509 stub SXCALLOCPROC
520 stub DIBUILDCLASSDRVINFOLIST
521 stub DIBUILDCOMPATDRVINFOLIST

42
dlls/setupapi/setupx16.h Normal file
View file

@ -0,0 +1,42 @@
#ifndef __WINE_SETUPX16_H
#define __WINE_SETUPX16_H
#include "wine/windef16.h"
typedef UINT16 HINF16;
typedef UINT16 LOGDISKID16;
/* error codes stuff */
typedef UINT16 RETERR16;
#define OK 0
#define IP_ERROR (UINT16)100
enum _IP_ERR {
ERR_IP_INVALID_FILENAME = IP_ERROR+1,
ERR_IP_ALLOC_ERR,
ERR_IP_INVALID_SECT_NAME,
ERR_IP_OUT_OF_HANDLES,
ERR_IP_INF_NOT_FOUND,
ERR_IP_INVALID_INFFILE,
ERR_IP_INVALID_HINF,
ERR_IP_INVALID_FIELD,
ERR_IP_SECTION_NOT_FOUND,
ERR_IP_END_OF_SECTION,
ERR_IP_PROFILE_NOT_FOUND,
ERR_IP_LINE_NOT_FOUND,
ERR_IP_FILEREAD,
ERR_IP_TOOMANYINFFILES,
ERR_IP_INVALID_SAVERESTORE,
ERR_IP_INVALID_INFTYPE
};
typedef struct {
HFILE16 hInfFile;
LPCSTR lpInfFileName;
} INF_HANDLE;
extern INF_HANDLE *InfList;
extern WORD InfNumEntries;
#endif /* __WINE_SETUPX16_H */

View file

@ -1,13 +1,23 @@
/*
* SETUPX library
*
* Copyright 1998 Andreas Mohr
* Copyright 1998,2000 Andreas Mohr
*
* FIXME: Rather non-functional functions for now.
*
* See:
* http://www.geocities.com/SiliconValley/Network/5317/drivers.html
* http://www.microsoft.com/ddk/ddkdocs/win98ddk/devinst_12uw.htm
* DDK: setupx.h
* http://mmatrix.tripod.com/customsystemfolder/infsysntaxfull.html
* http://www.rdrop.com/~cary/html/inf_faq.html
*
* Stuff tested with rs405deu.exe (German Acroread 4.05 setup)
*/
#include "winreg.h"
#include "wine/winuser16.h"
#include "setupx16.h"
#include "debugtools.h"
DEFAULT_DEBUG_CHANNEL(setupx);
@ -48,5 +58,48 @@ DWORD WINAPI SURegQueryValueEx( HKEY hkey, LPSTR lpszValueName,
DWORD WINAPI InstallHinfSection16( HWND16 hwnd, HINSTANCE16 hinst, LPCSTR lpszCmdLine, INT16 nCmdShow)
{
FIXME("(%04x, %04x, %s, %d), stub.\n", hwnd, hinst, lpszCmdLine, nCmdShow);
return 0;
return 0;
}
/*
* GenFormStrWithoutPlaceholders
*
* Any real docu ?
*/
void WINAPI GenFormStrWithoutPlaceHolders16( LPSTR szDst, LPCSTR szSrc, HINF16 hInf)
{
FIXME("(%p, '%s', %04x), stub.\n", szDst, szSrc, hInf);
strcpy(szDst, szSrc);
}
RETERR16 WINAPI CtlGetLddPath16(LOGDISKID16 ldid, LPSTR szPath)
{
FIXME("(%04x, %p), stub.\n", ldid, szPath);
strcpy(szPath, "FIXME_BogusLddPath");
return OK;
}
RETERR16 WINAPI CtlSetLddPath16(LOGDISKID16 ldid, LPSTR szPath)
{
FIXME("(%04x, '%s'), stub.\n", ldid, szPath);
return OK;
}
RETERR16 WINAPI vcpOpen16(LPWORD p1, LPWORD p2)
{
FIXME("(%p, %p, stub.\n", p1, p2);
return OK;
}
RETERR16 WINAPI vcpClose16(WORD w1, WORD w2, WORD w3)
{
FIXME("(%04x, %04x %04x), stub.\n", w1, w2, w3);
return OK;
}
RETERR16 WINAPI GenInstall16(HINF16 hInfFile, LPCSTR szInstallSection, WORD wFlags)
{
FIXME("(%04x, '%s', %04x), stub. This doesn't install anything yet !\n", hInfFile, szInstallSection, wFlags);
return OK;
}