mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-31 11:43:31 +00:00
Implemented ReadCabinetState and WriteCabinetState.
This commit is contained in:
parent
b5d318460d
commit
5674b8308e
2 changed files with 105 additions and 9 deletions
|
@ -1082,22 +1082,92 @@ BOOL WINAPI DAD_ShowDragImage(BOOL bShow)
|
|||
FIXME("0x%08x stub\n",bShow);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const WCHAR szwCabLocation[] = {
|
||||
'S','o','f','t','w','a','r','e','\\',
|
||||
'M','i','c','r','o','s','o','f','t','\\',
|
||||
'W','i','n','d','o','w','s','\\',
|
||||
'C','u','r','r','e','n','t','V','e','r','s','i','o','n','\\',
|
||||
'E','x','p','l','o','r','e','r','\\',
|
||||
'C','a','b','i','n','e','t','S','t','a','t','e',0
|
||||
};
|
||||
|
||||
static const WCHAR szwSettings[] = { 'S','e','t','t','i','n','g','s',0 };
|
||||
|
||||
/*************************************************************************
|
||||
* ReadCabinetState [SHELL32.651] NT 4.0
|
||||
*
|
||||
*/
|
||||
HRESULT WINAPI ReadCabinetState(DWORD u, DWORD v)
|
||||
{ FIXME("0x%04lx 0x%04lx stub\n",u,v);
|
||||
return 0;
|
||||
BOOL WINAPI ReadCabinetState(CABINETSTATE *cs, int length)
|
||||
{
|
||||
HKEY hkey = 0;
|
||||
DWORD type, r;
|
||||
|
||||
TRACE("%p %d \n",cs,length);
|
||||
|
||||
if( (cs == NULL) || (length < sizeof *cs) )
|
||||
return FALSE;
|
||||
|
||||
r = RegOpenKeyW( HKEY_CURRENT_USER, szwCabLocation, &hkey );
|
||||
if( r == ERROR_SUCCESS )
|
||||
{
|
||||
type = REG_BINARY;
|
||||
r = RegQueryValueExW( hkey, szwSettings,
|
||||
NULL, &type, (LPBYTE)cs, (LPDWORD)&length );
|
||||
RegCloseKey( hkey );
|
||||
|
||||
}
|
||||
|
||||
/* if we can't read from the registry, create default values */
|
||||
if ( (r != ERROR_SUCCESS) || (cs->cLength < sizeof *cs) ||
|
||||
(cs->cLength != length) )
|
||||
{
|
||||
ERR("Initializing shell cabinet settings\n");
|
||||
memset(cs, 0, sizeof *cs);
|
||||
cs->cLength = sizeof *cs;
|
||||
cs->nVersion = 2;
|
||||
cs->fFullPathTitle = FALSE;
|
||||
cs->fSaveLocalView = TRUE;
|
||||
cs->fNotShell = FALSE;
|
||||
cs->fSimpleDefault = TRUE;
|
||||
cs->fDontShowDescBar = FALSE;
|
||||
cs->fNewWindowMode = FALSE;
|
||||
cs->fShowCompColor = FALSE;
|
||||
cs->fDontPrettyNames = FALSE;
|
||||
cs->fAdminsCreateCommonGroups = TRUE;
|
||||
cs->fMenuEnumFilter = 96;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* WriteCabinetState [SHELL32.652] NT 4.0
|
||||
*
|
||||
*/
|
||||
HRESULT WINAPI WriteCabinetState(DWORD u)
|
||||
{ FIXME("0x%04lx stub\n",u);
|
||||
return 0;
|
||||
BOOL WINAPI WriteCabinetState(CABINETSTATE *cs)
|
||||
{
|
||||
DWORD r;
|
||||
HKEY hkey = 0;
|
||||
|
||||
TRACE("%p\n",cs);
|
||||
|
||||
if( cs == NULL )
|
||||
return FALSE;
|
||||
|
||||
r = RegCreateKeyExW( HKEY_CURRENT_USER, szwCabLocation, 0,
|
||||
NULL, 0, KEY_ALL_ACCESS, NULL, &hkey, NULL);
|
||||
if( r == ERROR_SUCCESS )
|
||||
{
|
||||
r = RegSetValueExW( hkey, szwSettings, 0,
|
||||
REG_BINARY, (LPBYTE) cs, cs->cLength);
|
||||
|
||||
RegCloseKey( hkey );
|
||||
}
|
||||
|
||||
return (r==ERROR_SUCCESS);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* FileIconInit [SHELL32.660]
|
||||
*
|
||||
|
@ -1257,9 +1327,10 @@ BOOL WINAPI SHWaitForFileToOpen(
|
|||
* HCU\Software\Microsoft\Windows\CurrentVersion\Explorer\CabinetState
|
||||
* I'm (js) guessing: this one is just ReadCabinetState ;-)
|
||||
*/
|
||||
HRESULT WINAPI shell32_654 (DWORD x, DWORD y)
|
||||
{ FIXME("0x%08lx 0x%08lx stub\n",x,y);
|
||||
return 0;
|
||||
HRESULT WINAPI shell32_654 (CABINETSTATE *cs, int length)
|
||||
{
|
||||
TRACE("%p %d\n",cs,length);
|
||||
return ReadCabinetState(cs,length);
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
|
|
|
@ -913,6 +913,31 @@ DWORD WINAPI CheckEscapesW(LPWSTR string, DWORD len);
|
|||
BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey);
|
||||
DWORD WINAPI SHRestricted (DWORD policy);
|
||||
|
||||
/* cabinet functions */
|
||||
|
||||
#include "pshpack1.h"
|
||||
|
||||
typedef struct {
|
||||
WORD cLength;
|
||||
WORD nVersion;
|
||||
BOOL fFullPathTitle:1;
|
||||
BOOL fSaveLocalView:1;
|
||||
BOOL fNotShell:1;
|
||||
BOOL fSimpleDefault:1;
|
||||
BOOL fDontShowDescBar:1;
|
||||
BOOL fNewWindowMode:1;
|
||||
BOOL fShowCompColor:1;
|
||||
BOOL fDontPrettyNames:1;
|
||||
BOOL fAdminsCreateCommonGroups:1;
|
||||
UINT fUnusedFlags:7;
|
||||
UINT fMenuEnumFilter;
|
||||
} CABINETSTATE;
|
||||
|
||||
#include "poppack.h"
|
||||
|
||||
BOOL WINAPI ReadCabinetState(CABINETSTATE *, int);
|
||||
BOOL WINAPI WriteCabinetState(CABINETSTATE *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif /* defined(__cplusplus) */
|
||||
|
|
Loading…
Reference in a new issue