mirror of
https://github.com/reactos/reactos.git
synced 2025-03-01 03:45:16 +00:00
[WINESYNC] setupapi: Add a few printer directory ids.
Signed-off-by: Alexandre Julliard <julliard@winehq.org> wine commit id 00b9c975d4bd3a24ae41c99057d7a1a32f329c00 by Alexandre Julliard <julliard@winehq.org> SYNC NOTE: This commit also reverts wine commit 000136ac301327a85fecbd0aef788bc1629b6121 "setupapi: Add support for DIRID_PRINTPROCESSOR." by Andrey Turkin <andrey.turkin@gmail.com>
This commit is contained in:
parent
e96236418f
commit
a78f1815b8
3 changed files with 55 additions and 13 deletions
|
@ -41,7 +41,7 @@ add_library(setupapi MODULE
|
||||||
|
|
||||||
set_module_type(setupapi win32dll UNICODE)
|
set_module_type(setupapi win32dll UNICODE)
|
||||||
target_link_libraries(setupapi uuid wine ${PSEH_LIB} oldnames)
|
target_link_libraries(setupapi uuid wine ${PSEH_LIB} oldnames)
|
||||||
add_delay_importlibs(setupapi cabinet comdlg32 shell32 winspool.drv wintrust)
|
add_delay_importlibs(setupapi cabinet comdlg32 shell32 wintrust)
|
||||||
add_importlibs(setupapi gdi32 comctl32 advapi32 user32 rpcrt4 version msvcrt kernel32 ntdll)
|
add_importlibs(setupapi gdi32 comctl32 advapi32 user32 rpcrt4 version msvcrt kernel32 ntdll)
|
||||||
add_pch(setupapi setupapi_private.h "${PCH_SKIP_SOURCE}")
|
add_pch(setupapi setupapi_private.h "${PCH_SKIP_SOURCE}")
|
||||||
add_cd_file(TARGET setupapi DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET setupapi DESTINATION reactos/system32 FOR all)
|
||||||
|
|
|
@ -20,8 +20,6 @@
|
||||||
|
|
||||||
#include "setupapi_private.h"
|
#include "setupapi_private.h"
|
||||||
|
|
||||||
#include <winspool.h>
|
|
||||||
|
|
||||||
#define MAX_SYSTEM_DIRID DIRID_PRINTPROCESSOR
|
#define MAX_SYSTEM_DIRID DIRID_PRINTPROCESSOR
|
||||||
#define MIN_CSIDL_DIRID 0x4000
|
#define MIN_CSIDL_DIRID 0x4000
|
||||||
#define MAX_CSIDL_DIRID 0x403f
|
#define MAX_CSIDL_DIRID 0x403f
|
||||||
|
@ -32,9 +30,22 @@ struct user_dirid
|
||||||
WCHAR *str;
|
WCHAR *str;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef __i386__
|
||||||
|
static const WCHAR printer_env[] = L"w32x86";
|
||||||
|
#elif defined __x86_64__
|
||||||
|
static const WCHAR printer_env[] = L"x64";
|
||||||
|
#elif defined __arm__
|
||||||
|
static const WCHAR printer_env[] = L"arm";
|
||||||
|
#elif defined __aarch64__
|
||||||
|
static const WCHAR printer_env[] = L"arm64";
|
||||||
|
#else
|
||||||
|
#error not defined for this cpu
|
||||||
|
#endif
|
||||||
|
|
||||||
static int nb_user_dirids; /* number of user dirids in use */
|
static int nb_user_dirids; /* number of user dirids in use */
|
||||||
static int alloc_user_dirids; /* number of allocated user dirids */
|
static int alloc_user_dirids; /* number of allocated user dirids */
|
||||||
static struct user_dirid *user_dirids;
|
static struct user_dirid *user_dirids;
|
||||||
|
static const WCHAR *printer_dirids[5]; /* 66000..66004 */
|
||||||
static const WCHAR *system_dirids[MAX_SYSTEM_DIRID+1];
|
static const WCHAR *system_dirids[MAX_SYSTEM_DIRID+1];
|
||||||
static const WCHAR *csidl_dirids[MAX_CSIDL_DIRID-MIN_CSIDL_DIRID+1];
|
static const WCHAR *csidl_dirids[MAX_CSIDL_DIRID-MIN_CSIDL_DIRID+1];
|
||||||
|
|
||||||
|
@ -60,7 +71,6 @@ static const WCHAR *create_system_dirid( int dirid )
|
||||||
{
|
{
|
||||||
WCHAR buffer[MAX_PATH+32], *str;
|
WCHAR buffer[MAX_PATH+32], *str;
|
||||||
int len;
|
int len;
|
||||||
DWORD needed;
|
|
||||||
|
|
||||||
switch(dirid)
|
switch(dirid)
|
||||||
{
|
{
|
||||||
|
@ -108,11 +118,11 @@ static const WCHAR *create_system_dirid( int dirid )
|
||||||
lstrcatW( buffer, L"\\system" );
|
lstrcatW( buffer, L"\\system" );
|
||||||
break;
|
break;
|
||||||
case DIRID_SPOOL:
|
case DIRID_SPOOL:
|
||||||
GetWindowsDirectoryW( buffer, MAX_PATH );
|
GetSystemDirectoryW( buffer, MAX_PATH );
|
||||||
lstrcatW( buffer, L"\\spool" );
|
lstrcatW( buffer, L"\\spool" );
|
||||||
break;
|
break;
|
||||||
case DIRID_SPOOLDRIVERS:
|
case DIRID_SPOOLDRIVERS:
|
||||||
GetWindowsDirectoryW( buffer, MAX_PATH );
|
GetSystemDirectoryW( buffer, MAX_PATH );
|
||||||
lstrcatW( buffer, L"\\spool\\drivers" );
|
lstrcatW( buffer, L"\\spool\\drivers" );
|
||||||
break;
|
break;
|
||||||
case DIRID_USERPROFILE:
|
case DIRID_USERPROFILE:
|
||||||
|
@ -121,11 +131,9 @@ static const WCHAR *create_system_dirid( int dirid )
|
||||||
case DIRID_LOADER:
|
case DIRID_LOADER:
|
||||||
return L"C:\\"; /* FIXME */
|
return L"C:\\"; /* FIXME */
|
||||||
case DIRID_PRINTPROCESSOR:
|
case DIRID_PRINTPROCESSOR:
|
||||||
if (!GetPrintProcessorDirectoryW(NULL, NULL, 1, (LPBYTE)buffer, sizeof(buffer), &needed))
|
GetSystemDirectoryW( buffer, MAX_PATH );
|
||||||
{
|
lstrcatW( buffer, L"\\spool\\prtprocs\\" );
|
||||||
WARN( "cannot retrieve print processor directory\n" );
|
lstrcatW( buffer, printer_env );
|
||||||
return get_unknown_dirid();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME( "unknown dirid %d\n", dirid );
|
FIXME( "unknown dirid %d\n", dirid );
|
||||||
|
@ -136,6 +144,35 @@ static const WCHAR *create_system_dirid( int dirid )
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const WCHAR *create_printer_dirid( DWORD dirid )
|
||||||
|
{
|
||||||
|
WCHAR buffer[MAX_PATH+32], *str;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
switch (dirid)
|
||||||
|
{
|
||||||
|
case 66000: /* printer driver */
|
||||||
|
GetSystemDirectoryW( buffer, MAX_PATH );
|
||||||
|
lstrcatW( buffer, L"\\spool\\drivers\\" );
|
||||||
|
lstrcatW( buffer, printer_env );
|
||||||
|
break;
|
||||||
|
case 66001: /* print processor */
|
||||||
|
return create_system_dirid( DIRID_PRINTPROCESSOR );
|
||||||
|
case 66002: /* system directory (FIXME: only for native architecture) */
|
||||||
|
GetSystemDirectoryW( buffer, MAX_PATH );
|
||||||
|
break;
|
||||||
|
case 66003: /* color directory */
|
||||||
|
return create_system_dirid( DIRID_COLOR );
|
||||||
|
case 66004: /* asp files directory */
|
||||||
|
default:
|
||||||
|
FIXME( "unsupported dirid %d\n", dirid );
|
||||||
|
return get_unknown_dirid();
|
||||||
|
}
|
||||||
|
len = (lstrlenW(buffer) + 1) * sizeof(WCHAR);
|
||||||
|
if ((str = HeapAlloc( GetProcessHeap(), 0, len ))) memcpy( str, buffer, len );
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
static const WCHAR *get_csidl_dir( DWORD csidl )
|
static const WCHAR *get_csidl_dir( DWORD csidl )
|
||||||
{
|
{
|
||||||
WCHAR buffer[MAX_PATH], *str;
|
WCHAR buffer[MAX_PATH], *str;
|
||||||
|
@ -158,7 +195,12 @@ const WCHAR *DIRID_get_string( int dirid )
|
||||||
|
|
||||||
if (dirid == DIRID_ABSOLUTE || dirid == DIRID_ABSOLUTE_16BIT) dirid = DIRID_NULL;
|
if (dirid == DIRID_ABSOLUTE || dirid == DIRID_ABSOLUTE_16BIT) dirid = DIRID_NULL;
|
||||||
|
|
||||||
if (dirid >= DIRID_USER)
|
if (dirid >= 66000 && dirid <= 66004)
|
||||||
|
{
|
||||||
|
if (!printer_dirids[dirid - 66000]) printer_dirids[dirid - 66000] = create_printer_dirid( dirid );
|
||||||
|
return printer_dirids[dirid - 66000];
|
||||||
|
}
|
||||||
|
else if (dirid >= DIRID_USER)
|
||||||
{
|
{
|
||||||
for (i = 0; i < nb_user_dirids; i++)
|
for (i = 0; i < nb_user_dirids; i++)
|
||||||
if (user_dirids[i].id == dirid) return user_dirids[i].str;
|
if (user_dirids[i].id == dirid) return user_dirids[i].str;
|
||||||
|
|
|
@ -10,4 +10,4 @@ files:
|
||||||
dlls/setupapi/setupcab.c: dll/win32/setupapi/setupcab.c
|
dlls/setupapi/setupcab.c: dll/win32/setupapi/setupcab.c
|
||||||
dlls/setupapi/stringtable.c: dll/win32/setupapi/stringtable_wine.c
|
dlls/setupapi/stringtable.c: dll/win32/setupapi/stringtable_wine.c
|
||||||
tags:
|
tags:
|
||||||
wine: 8cb6e9585eefd4b0c0257f549d738f6a10f0d097
|
wine: 00b9c975d4bd3a24ae41c99057d7a1a32f329c00
|
||||||
|
|
Loading…
Reference in a new issue