Author: dchapyshev Date: Sat Jan 3 05:18:58 2009 New Revision: 38527
URL: http://svn.reactos.org/svn/reactos?rev=38527&view=rev Log: - Add spoolss from Wine
Added: trunk/reactos/dll/win32/spoolss/ (with props) trunk/reactos/dll/win32/spoolss/spoolss.rbuild (with props) trunk/reactos/dll/win32/spoolss/spoolss.spec (with props) trunk/reactos/dll/win32/spoolss/spoolss_main.c (with props) Modified: trunk/reactos/baseaddress.rbuild trunk/reactos/boot/bootdata/packages/reactos.dff trunk/reactos/dll/win32/win32.rbuild trunk/reactos/media/doc/README.WINE
Modified: trunk/reactos/baseaddress.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/baseaddress.rbuild?rev=3852... ============================================================================== --- trunk/reactos/baseaddress.rbuild [iso-8859-1] (original) +++ trunk/reactos/baseaddress.rbuild [iso-8859-1] Sat Jan 3 05:18:58 2009 @@ -110,6 +110,7 @@ <property name="BASEADDRESS_COREDLL" value="0x73d80000" /> <property name="BASEADDRESS_KSUSER" value="0x73ea0000" /> <property name="BASEADDRESS_ICMP" value="0x741f0000" /> + <property name="BASEADDRESS_SPOOLSS" value="0x742a0000" /> <property name="BASEADDRESS_QUARTZ" value="0x747d0000" /> <property name="BASEADDRESS_USERENV" value="0x74850000" /> <property name="BASEADDRESS_WS2_32" value="0x74aa0000" />
Modified: trunk/reactos/boot/bootdata/packages/reactos.dff URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/packages/reac... ============================================================================== --- trunk/reactos/boot/bootdata/packages/reactos.dff [iso-8859-1] (original) +++ trunk/reactos/boot/bootdata/packages/reactos.dff [iso-8859-1] Sat Jan 3 05:18:58 2009 @@ -341,6 +341,7 @@ dll\win32\shlwapi\shlwapi.dll 1 dll\win32\smdll\smdll.dll 1 dll\win32\snmpapi\snmpapi.dll 1 +dll\win32\spoolss\spoolss.dll 1 dll\win32\stdole2.tlb\stdole2.tlb 1 dll\win32\stdole32.tlb\stdole32.tlb 1 dll\win32\sxs\sxs.dll 1
Propchange: trunk/reactos/dll/win32/spoolss/ ------------------------------------------------------------------------------ --- bugtraq:logregex (added) +++ bugtraq:logregex Sat Jan 3 05:18:58 2009 @@ -1,0 +1,2 @@ +([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))? +(\d+)
Propchange: trunk/reactos/dll/win32/spoolss/ ------------------------------------------------------------------------------ bugtraq:message = See issue #%BUGID% for more details.
Propchange: trunk/reactos/dll/win32/spoolss/ ------------------------------------------------------------------------------ bugtraq:url = http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/reactos/dll/win32/spoolss/ ------------------------------------------------------------------------------ tsvn:logminsize = 10
Added: trunk/reactos/dll/win32/spoolss/spoolss.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/spoolss/spoolss.r... ============================================================================== --- trunk/reactos/dll/win32/spoolss/spoolss.rbuild (added) +++ trunk/reactos/dll/win32/spoolss/spoolss.rbuild [iso-8859-1] Sat Jan 3 05:18:58 2009 @@ -1,0 +1,15 @@ +<?xml version="1.0"?> +<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> +<group> +<module name="spoolss" type="win32dll" baseaddress="${BASEADDRESS_SPOOLSS}" installbase="system32" installname="spoolss.dll" allowwarnings="true"> + <importlibrary definition="spoolss.spec" /> + <include base="spoolss">.</include> + <include base="ReactOS">include/reactos/wine</include> + <define name="__WINESRC__" /> + <file>spoolss_main.c</file> + <library>wine</library> + <library>winspool</library> + <library>kernel32</library> + <library>ntdll</library> +</module> +</group>
Propchange: trunk/reactos/dll/win32/spoolss/spoolss.rbuild ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/win32/spoolss/spoolss.spec URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/spoolss/spoolss.s... ============================================================================== --- trunk/reactos/dll/win32/spoolss/spoolss.spec (added) +++ trunk/reactos/dll/win32/spoolss/spoolss.spec [iso-8859-1] Sat Jan 3 05:18:58 2009 @@ -1,0 +1,151 @@ +@ stub AbortPrinter +@ stub AddFormW +@ stub AddJobW +@ stub AddMonitorW +@ stub AddPerMachineConnectionW +@ stub AddPortExW +@ stub AddPortW +@ stub AddPrintProcessorW +@ stub AddPrintProvidorW +@ stub AddPrinterConnectionW +@ stub AddPrinterDriverExW +@ stub AddPrinterDriverW +@ stub AddPrinterExW +@ stub AddPrinterW +@ stdcall AllocSplStr(wstr) +@ stub AppendPrinterNotifyInfoData +@ stdcall BuildOtherNamesFromMachineName(ptr ptr) +@ stub CallDrvDevModeConversion +@ stub CallRouterFindFirstPrinterChangeNotification +@ stub ClosePrinter +@ stub ClusterSplClose +@ stub ClusterSplIsAlive +@ stub ClusterSplOpen +@ stub ConfigurePortW +@ stub CreatePrinterIC +@ stub DbgGetPointers +@ stub DeleteFormW +@ stub DeleteMonitorW +@ stub DeletePerMachineConnectionW +@ stub DeletePortW +@ stub DeletePrintProcessorW +@ stub DeletePrintProvidorW +@ stub DeletePrinter +@ stub DeletePrinterConnectionW +@ stub DeletePrinterDataExW +@ stub DeletePrinterDataW +@ stub DeletePrinterDriverExW +@ stub DeletePrinterDriverW +@ stub DeletePrinterIC +@ stub DeletePrinterKeyW +@ stdcall DllAllocSplMem(long) +@ stdcall DllFreeSplMem(ptr) +@ stdcall DllFreeSplStr(wstr) +@ stub EndDocPrinter +@ stub EndPagePrinter +@ stub EnumFormsW +@ stub EnumJobsW +@ stub EnumMonitorsW +@ stub EnumPerMachineConnectionsW +@ stdcall EnumPortsW(wstr long ptr ptr ptr ptr) winspool.drv.EnumPortsW +@ stub EnumPrintProcessorDatatypesW +@ stub EnumPrintProcessorsW +@ stub EnumPrinterDataExW +@ stub EnumPrinterDataW +@ stub EnumPrinterDriversW +@ stub EnumPrinterKeyW +@ stub EnumPrintersW +@ stub FindClosePrinterChangeNotification +@ stub FlushPrinter +@ stub FormatPrinterForRegistryKey +@ stub FormatRegistryKeyForPrinter +@ stub FreeOtherNames +@ stub GetClientUserHandle +@ stub GetFormW +@ stub GetJobAttributes +@ stub GetJobW +@ stub GetNetworkId +@ stub GetPrintProcessorDirectoryW +@ stub GetPrinterDataExW +@ stub GetPrinterDataW +@ stub GetPrinterDriverDirectoryW +@ stub GetPrinterDriverExW +@ stub GetPrinterDriverW +@ stub GetPrinterW +@ stdcall ImpersonatePrinterClient(long) +@ stdcall InitializeRouter() +@ stdcall IsLocalCall() +@ stub IsNamedPipeRpcCall +@ stub LoadDriver +@ stub LoadDriverFiletoConvertDevmode +@ stub MIDL_user_allocate1 +@ stub MIDL_user_free1 +@ stub MarshallDownStructure +@ stub MarshallUpStructure +@ stub OldGetPrinterDriverW +@ stub OpenPrinterExW +@ stub OpenPrinterPortW +@ stub OpenPrinterW +@ stub PackStrings +@ stub PartialReplyPrinterChangeNotification +@ stub PlayGdiScriptOnPrinterIC +@ stub PrinterHandleRundown +@ stub PrinterMessageBoxW +@ stub ProvidorFindClosePrinterChangeNotification +@ stub ProvidorFindFirstPrinterChangeNotification +@ stub ReadPrinter +@ stub ReallocSplMem +@ stub ReallocSplStr +@ stub RemoteFindFirstPrinterChangeNotification +@ stub ReplyClosePrinter +@ stub ReplyOpenPrinter +@ stub ReplyPrinterChangeNotification +@ stub ResetPrinterW +@ stdcall RevertToPrinterSelf() +@ stub RouterAllocPrinterNotifyInfo +@ stub RouterFindFirstPrinterChangeNotification +@ stub RouterFindNextPrinterChangeNotification +@ stub RouterFreePrinterNotifyInfo +@ stub RouterRefreshPrinterChangeNotification +@ stub RouterReplyPrinter +@ stub ScheduleJob +@ stub SeekPrinter +@ stub SetAllocFailCount +@ stub SetFormW +@ stub SetJobW +@ stub SetPortW +@ stub SetPrinterDataExW +@ stub SetPrinterDataW +@ stub SetPrinterW +@ stub SplCloseSpoolFileHandle +@ stub SplCommitSpoolData +@ stub SplDriverUnloadComplete +@ stub SplGetSpoolFileInfo +@ stdcall SplInitializeWinSpoolDrv(ptr) +@ stdcall SplIsUpgrade() +@ stub SplProcessPnPEvent +@ stub SplReadPrinter +@ stub SplRegisterForDeviceEvents +@ stub SplStartPhase2Init +@ stub SplUnregisterForDeviceEvents +@ stub SpoolerFindClosePrinterChangeNotification +@ stub SpoolerFindFirstPrinterChangeNotification +@ stub SpoolerFindNextPrinterChangeNotification +@ stub SpoolerFreePrinterNotifyInfo +@ stdcall SpoolerHasInitialized() +@ stdcall SpoolerInit() +@ stub StartDocPrinterW +@ stub StartPagePrinter +@ stub UnloadDriver +@ stub UnloadDriverFile +@ stub UpdateBufferSize +@ stub UpdatePrinterRegAll +@ stub UpdatePrinterRegUser +@ stub WaitForPrinterChange +@ stdcall WaitForSpoolerInitialization() +@ stub WritePrinter +@ stub XcvDataW +@ stub bGetDevModePerUser +@ stub bSetDevModePerUser +@ stub pszDbgAllocMsgA +@ stub vDbgLogError
Propchange: trunk/reactos/dll/win32/spoolss/spoolss.spec ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/win32/spoolss/spoolss_main.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/spoolss/spoolss_m... ============================================================================== --- trunk/reactos/dll/win32/spoolss/spoolss_main.c (added) +++ trunk/reactos/dll/win32/spoolss/spoolss_main.c [iso-8859-1] Sat Jan 3 05:18:58 2009 @@ -1,0 +1,369 @@ +/* + * Implementation of the Spooler-Service helper DLL + * + * Copyright 2006 Detlef Riekenberg + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "winerror.h" +#include "winreg.h" + +#include "wingdi.h" +#include "winspool.h" +#include "ddk/winsplp.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(spoolss); + +/* ################################ */ + +static CRITICAL_SECTION backend_cs; +static CRITICAL_SECTION_DEBUG backend_cs_debug = +{ + 0, 0, &backend_cs, + { &backend_cs_debug.ProcessLocksList, &backend_cs_debug.ProcessLocksList }, + 0, 0, { (DWORD_PTR)(__FILE__ ": backend_cs") } +}; +static CRITICAL_SECTION backend_cs = { &backend_cs_debug, -1, 0, 0, 0, 0 }; + +/* ################################ */ + +static HMODULE hwinspool; +static HMODULE hlocalspl; +static BOOL (WINAPI *pInitializePrintProvidor)(LPPRINTPROVIDOR, DWORD, LPWSTR); + +static PRINTPROVIDOR * backend; + +/* ################################ */ + +static const WCHAR localspldllW[] = {'l','o','c','a','l','s','p','l','.','d','l','l',0}; +static const WCHAR winspooldrvW[] = {'w','i','n','s','p','o','o','l','.','d','r','v',0}; + +/****************************************************************************** + * backend_load [internal] + * + * load and init our backend (the local printprovider: "localspl.dll") + * + * PARAMS + * + * RETURNS + * Success: TRUE + * Failure: FALSE and RPC_S_SERVER_UNAVAILABLE + * + * NOTES + * In windows, the spooler router (spoolss.dll) support multiple + * printprovider (localspl.dll for the local system) + * + */ +static BOOL backend_load(void) +{ + static PRINTPROVIDOR mybackend; + DWORD res; + + if (backend) return TRUE; + + EnterCriticalSection(&backend_cs); + hlocalspl = LoadLibraryW(localspldllW); + if (hlocalspl) { + pInitializePrintProvidor = (void *) GetProcAddress(hlocalspl, "InitializePrintProvidor"); + if (pInitializePrintProvidor) { + + /* native localspl does not clear unused entries */ + memset(&mybackend, 0, sizeof(mybackend)); + res = pInitializePrintProvidor(&mybackend, sizeof(mybackend), NULL); + if (res) { + backend = &mybackend; + LeaveCriticalSection(&backend_cs); + TRACE("backend: %p (%p)\n", backend, hlocalspl); + return TRUE; + } + } + FreeLibrary(hlocalspl); + } + + LeaveCriticalSection(&backend_cs); + + WARN("failed to load the backend: %u\n", GetLastError()); + SetLastError(RPC_S_SERVER_UNAVAILABLE); + return FALSE; +} + +/****************************************************************** + * unload_backend [internal] + * + */ +static void backend_unload(void) +{ + EnterCriticalSection(&backend_cs); + if (backend) { + backend = NULL; + FreeLibrary(hlocalspl); + } + LeaveCriticalSection(&backend_cs); +} + +/****************************************************************************** + * + */ +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + TRACE("(%p, %d, %p)\n", hinstDLL, fdwReason, lpvReserved); + + switch (fdwReason) { + case DLL_WINE_PREATTACH: + return FALSE; /* prefer native version */ + case DLL_PROCESS_ATTACH: { + DisableThreadLibraryCalls(hinstDLL); + break; + + case DLL_PROCESS_DETACH: + backend_unload(); + break; + } + } + return TRUE; +} + +/****************************************************************** + * AllocSplStr [SPOOLSS.@] + * + * Create a copy from the String on the Spooler-Heap + * + * PARAMS + * pwstr [I] PTR to the String to copy + * + * RETURNS + * Failure: NULL + * Success: PTR to the copied String + * + */ +LPWSTR WINAPI AllocSplStr(LPCWSTR pwstr) +{ + LPWSTR res = NULL; + DWORD len; + + TRACE("(%s)\n", debugstr_w(pwstr)); + if (!pwstr) return NULL; + + len = (lstrlenW(pwstr) + 1) * sizeof(WCHAR); + res = HeapAlloc(GetProcessHeap(), 0, len); + if (res) lstrcpyW(res, pwstr); + + TRACE("returning %p\n", res); + return res; +} + +/****************************************************************** + * BuildOtherNamesFromMachineName [SPOOLSS.@] + */ +BOOL WINAPI BuildOtherNamesFromMachineName(LPVOID * ptr1, LPVOID * ptr2) +{ + FIXME("(%p, %p) stub\n", ptr1, ptr2); + + *ptr1 = NULL; + *ptr2 = NULL; + return FALSE; +} + +/****************************************************************** + * DllAllocSplMem [SPOOLSS.@] + * + * Allocate cleared memory from the spooler heap + * + * PARAMS + * size [I] Number of bytes to allocate + * + * RETURNS + * Failure: NULL + * Success: PTR to the allocated memory + * + * NOTES + * We use the process heap (Windows use a separate spooler heap) + * + */ +LPVOID WINAPI DllAllocSplMem(DWORD size) +{ + LPVOID res; + + res = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, size); + TRACE("(%d) => %p\n", size, res); + return res; +} + +/****************************************************************** + * DllFreeSplMem [SPOOLSS.@] + * + * Free the allocated spooler memory + * + * PARAMS + * memory [I] PTR to the memory allocated by DllAllocSplMem + * + * RETURNS + * Failure: FALSE + * Success: TRUE + * + * NOTES + * We use the process heap (Windows use a separate spooler heap) + * + */ + +BOOL WINAPI DllFreeSplMem(LPBYTE memory) +{ + TRACE("(%p)\n", memory); + return HeapFree(GetProcessHeap(), 0, memory); +} + +/****************************************************************** + * DllFreeSplStr [SPOOLSS.@] + * + * Free the allocated Spooler-String + * + * PARAMS + * pwstr [I] PTR to the WSTR, allocated by AllocSplStr + * + * RETURNS + * Failure: FALSE + * Success: TRUE + * + */ + +BOOL WINAPI DllFreeSplStr(LPWSTR pwstr) +{ + TRACE("(%s) PTR: %p\n", debugstr_w(pwstr), pwstr); + return HeapFree(GetProcessHeap(), 0, pwstr); +} + + +/****************************************************************** + * ImpersonatePrinterClient [SPOOLSS.@] + */ +BOOL WINAPI ImpersonatePrinterClient(HANDLE hToken) +{ + FIXME("(%p) stub\n", hToken); + return TRUE; +} + +/****************************************************************** + * InitializeRouter [SPOOLSS.@] + */ +BOOL WINAPI InitializeRouter(void) +{ + TRACE("()\n"); + return backend_load(); +} + +/****************************************************************** + * IsLocalCall [SPOOLSS.@] + */ +BOOL WINAPI IsLocalCall(void) +{ + FIXME("() stub\n"); + return TRUE; +} + +/****************************************************************** + * RevertToPrinterSelf [SPOOLSS.@] + */ +HANDLE WINAPI RevertToPrinterSelf(void) +{ + FIXME("() stub\n"); + return (HANDLE) 0xdead0947; +} + +/****************************************************************** + * SplInitializeWinSpoolDrv [SPOOLSS.@] + * + * Dynamic load "winspool.drv" and fill an array with some function-pointer + * + * PARAMS + * table [I] array of function-pointer to fill + * + * RETURNS + * Success: TRUE + * Failure: FALSE + * + * NOTES + * Native "spoolss.dll" from w2k fill the table with 11 Function-Pointer. + * We implement the XP-Version (The table has only 9 Pointer) + * + */ +BOOL WINAPI SplInitializeWinSpoolDrv(LPVOID * table) +{ + DWORD res; + + TRACE("(%p)\n", table); + + hwinspool = LoadLibraryW(winspooldrvW); + if (!hwinspool) return FALSE; + + table[0] = (void *) GetProcAddress(hwinspool, "OpenPrinterW"); + table[1] = (void *) GetProcAddress(hwinspool, "ClosePrinter"); + table[2] = (void *) GetProcAddress(hwinspool, "SpoolerDevQueryPrintW"); + table[3] = (void *) GetProcAddress(hwinspool, "SpoolerPrinterEvent"); + table[4] = (void *) GetProcAddress(hwinspool, "DocumentPropertiesW"); + table[5] = (void *) GetProcAddress(hwinspool, (LPSTR) 212); /* LoadPrinterDriver */ + table[6] = (void *) GetProcAddress(hwinspool, (LPSTR) 213); /* RefCntLoadDriver */ + table[7] = (void *) GetProcAddress(hwinspool, (LPSTR) 214); /* RefCntUnloadDriver */ + table[8] = (void *) GetProcAddress(hwinspool, (LPSTR) 215); /* ForceUnloadDriver */ + + for (res = 0; res < 9; res++) { + if (table[res] == NULL) return FALSE; + } + + return TRUE; + +} + +/****************************************************************** + * SplIsUpgrade [SPOOLSS.@] + */ +BOOL WINAPI SplIsUpgrade(void) +{ + FIXME("() stub\n"); + return FALSE; +} + +/****************************************************************** + * SpoolerHasInitialized [SPOOLSS.@] + */ +BOOL WINAPI SpoolerHasInitialized(void) +{ + FIXME("() stub\n"); + return TRUE; +} + +/****************************************************************** + * SpoolerInit [SPOOLSS.@] + */ +BOOL WINAPI SpoolerInit(void) +{ + FIXME("() stub\n"); + return TRUE; +} + +/****************************************************************** + * WaitForSpoolerInitialization [SPOOLSS.@] + */ +BOOL WINAPI WaitForSpoolerInitialization(void) +{ + FIXME("() stub\n"); + return TRUE; +}
Propchange: trunk/reactos/dll/win32/spoolss/spoolss_main.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/reactos/dll/win32/win32.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/win32.rbuild?rev=... ============================================================================== --- trunk/reactos/dll/win32/win32.rbuild [iso-8859-1] (original) +++ trunk/reactos/dll/win32/win32.rbuild [iso-8859-1] Sat Jan 3 05:18:58 2009 @@ -355,6 +355,9 @@ <directory name="snmpapi"> <xi:include href="snmpapi/snmpapi.rbuild" /> </directory> +<directory name="spoolss"> + <xi:include href="spoolss/spoolss.rbuild" /> +</directory> <directory name="stdole2.tlb"> <xi:include href="stdole2.tlb/stdole2.rbuild" /> </directory>
Modified: trunk/reactos/media/doc/README.WINE URL: http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=3... ============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Sat Jan 3 05:18:58 2009 @@ -98,6 +98,7 @@ reactos/dll/win32/shdocvw # Synced to Wine-0_9_5 reactos/dll/win32/shfolder # Autosync reactos/dll/win32/shlwapi # Autosync +reactos/dll/win32/spoolss # Autosync reactos/dll/win32/stdole2.tlb # Autosync reactos/dll/win32/sxs # Autosync reactos/dll/win32/tapi32 # Autosync