https://git.reactos.org/?p=reactos.git;a=commitdiff;h=46b9165909e145bc8668c…
commit 46b9165909e145bc8668c564d5ad764fa6553138
Author: Colin Finck <colin(a)reactos.org>
AuthorDate: Sat Dec 9 13:35:42 2017 +0100
[WINSPOOL] Provide stubs with tracing and reasonable failure codes for even more
popular Spooler APIs.
This may get more applications to work which previously called into the WINE-generated
stubs (that throw an exception).
It also improves debug logs when the "winspool" debug channel is enabled.
With such detailed debug logs, we may get an idea which winspool APIs need to be
implemented sooner than others.
---
win32ss/printing/base/winspool/CMakeLists.txt | 1 +
win32ss/printing/base/winspool/forms.c | 88 +++++++++++
win32ss/printing/base/winspool/monitors.c | 24 +++
win32ss/printing/base/winspool/ports.c | 64 ++++++++
win32ss/printing/base/winspool/printerdata.c | 106 ++++++++++++-
win32ss/printing/base/winspool/printerdrivers.c | 56 +++++++
win32ss/printing/base/winspool/printers.c | 56 ++++++-
win32ss/printing/base/winspool/printprocessors.c | 40 ++++-
win32ss/printing/base/winspool/printproviders.c | 16 ++
win32ss/printing/base/winspool/winspool.spec | 182 +++++++++++------------
10 files changed, 531 insertions(+), 102 deletions(-)
diff --git a/win32ss/printing/base/winspool/CMakeLists.txt
b/win32ss/printing/base/winspool/CMakeLists.txt
index 71d18ba9a4..b4dcf8a163 100644
--- a/win32ss/printing/base/winspool/CMakeLists.txt
+++ b/win32ss/printing/base/winspool/CMakeLists.txt
@@ -5,6 +5,7 @@ spec2def(winspool.drv winspool.spec ADD_IMPORTLIB)
list(APPEND SOURCE
devmode.c
+ forms.c
jobs.c
main.c
monitors.c
diff --git a/win32ss/printing/base/winspool/forms.c
b/win32ss/printing/base/winspool/forms.c
new file mode 100644
index 0000000000..50ce561338
--- /dev/null
+++ b/win32ss/printing/base/winspool/forms.c
@@ -0,0 +1,88 @@
+/*
+ * PROJECT: ReactOS Spooler API
+ * LICENSE: GPL-2.0+ (
https://spdx.org/licenses/GPL-2.0+)
+ * PURPOSE: Functions related to Forms
+ * COPYRIGHT: Copyright 2017 Colin Finck (colin(a)reactos.org)
+ */
+
+#include "precomp.h"
+
+BOOL WINAPI
+AddFormA(HANDLE hPrinter, DWORD Level, PBYTE pForm)
+{
+ TRACE("AddFormA(%p, %lu, %p)\n", hPrinter, Level, pForm);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+AddFormW(HANDLE hPrinter, DWORD Level, PBYTE pForm)
+{
+ TRACE("AddFormW(%p, %lu, %p)\n", hPrinter, Level, pForm);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+DeleteFormA(HANDLE hPrinter, PSTR pFormName)
+{
+ TRACE("DeleteFormA(%p, %s)\n", hPrinter, pFormName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+DeleteFormW(HANDLE hPrinter, PWSTR pFormName)
+{
+ TRACE("DeleteFormW(%p, %S)\n", hPrinter, pFormName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+EnumFormsA(HANDLE hPrinter, DWORD Level, PBYTE pForm, DWORD cbBuf, PDWORD pcbNeeded,
PDWORD pcReturned)
+{
+ TRACE("EnumFormsA(%p, %lu, %p, %lu, %p, %p)\n", hPrinter, Level, pForm,
cbBuf, pcbNeeded, pcReturned);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+EnumFormsW(HANDLE hPrinter, DWORD Level, PBYTE pForm, DWORD cbBuf, PDWORD pcbNeeded,
PDWORD pcReturned)
+{
+ TRACE("EnumFormsW(%p, %lu, %p, %lu, %p, %p)\n", hPrinter, Level, pForm,
cbBuf, pcbNeeded, pcReturned);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+GetFormA(HANDLE hPrinter, PSTR pFormName, DWORD Level, PBYTE pForm, DWORD cbBuf, PDWORD
pcbNeeded)
+{
+ TRACE("GetFormA(%p, %s, %lu, %p, %lu, %p)\n", hPrinter, pFormName, Level,
pForm, cbBuf, pcbNeeded);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+GetFormW(HANDLE hPrinter, PWSTR pFormName, DWORD Level, PBYTE pForm, DWORD cbBuf, PDWORD
pcbNeeded)
+{
+ TRACE("GetFormW(%p, %S, %lu, %p, %lu, %p)\n", hPrinter, pFormName, Level,
pForm, cbBuf, pcbNeeded);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+SetFormA(HANDLE hPrinter, PSTR pFormName, DWORD Level, PBYTE pForm)
+{
+ TRACE("SetFormA(%p, %s, %lu, %p)\n", hPrinter, pFormName, Level, pForm);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+SetFormW(HANDLE hPrinter, PWSTR pFormName, DWORD Level, PBYTE pForm)
+{
+ TRACE("SetFormW(%p, %S, %lu, %p)\n", hPrinter, pFormName, Level, pForm);
+ UNIMPLEMENTED;
+ return FALSE;
+}
diff --git a/win32ss/printing/base/winspool/monitors.c
b/win32ss/printing/base/winspool/monitors.c
index a5b30fe7f5..4a36895126 100644
--- a/win32ss/printing/base/winspool/monitors.c
+++ b/win32ss/printing/base/winspool/monitors.c
@@ -22,6 +22,14 @@ _MarshallUpMonitorInfo(PBYTE pMonitorInfo, DWORD Level)
}
}
+BOOL WINAPI
+AddMonitorA(PSTR pName, DWORD Level, PBYTE pMonitors)
+{
+ TRACE("AddMonitorA(%s, %lu, %p)\n", pName, Level, pMonitors);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
AddMonitorW(PWSTR pName, DWORD Level, PBYTE pMonitors)
{
@@ -30,6 +38,14 @@ AddMonitorW(PWSTR pName, DWORD Level, PBYTE pMonitors)
return FALSE;
}
+BOOL WINAPI
+DeleteMonitorA(PSTR pName, PSTR pEnvironment, PSTR pMonitorName)
+{
+ TRACE("DeleteMonitorA(%s, %s, %s)\n", pName, pEnvironment, pMonitorName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
DeleteMonitorW(PWSTR pName, PWSTR pEnvironment, PWSTR pMonitorName)
{
@@ -38,6 +54,14 @@ DeleteMonitorW(PWSTR pName, PWSTR pEnvironment, PWSTR pMonitorName)
return FALSE;
}
+BOOL WINAPI
+EnumMonitorsA(PSTR pName, DWORD Level, PBYTE pMonitors, DWORD cbBuf, PDWORD pcbNeeded,
PDWORD pcReturned)
+{
+ TRACE("EnumMonitorsA(%s, %lu, %p, %lu, %p, %p)\n", pName, Level, pMonitors,
cbBuf, pcbNeeded, pcReturned);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
EnumMonitorsW(PWSTR pName, DWORD Level, PBYTE pMonitors, DWORD cbBuf, PDWORD pcbNeeded,
PDWORD pcReturned)
{
diff --git a/win32ss/printing/base/winspool/ports.c
b/win32ss/printing/base/winspool/ports.c
index 4e8d020e84..28977bdaeb 100644
--- a/win32ss/printing/base/winspool/ports.c
+++ b/win32ss/printing/base/winspool/ports.c
@@ -22,6 +22,30 @@ _MarshallUpPortInfo(PBYTE pPortInfo, DWORD Level)
}
}
+BOOL WINAPI
+AddPortA(PSTR pName, HWND hWnd, PSTR pMonitorName)
+{
+ TRACE("AddPortA(%s, %p, %s)\n", pName, hWnd, pMonitorName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+AddPortExA(PSTR pName, DWORD Level, PBYTE lpBuffer, PSTR lpMonitorName)
+{
+ TRACE("AddPortExA(%s, %lu, %p, %s)\n", pName, Level, lpBuffer,
lpMonitorName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+AddPortExW(PWSTR pName, DWORD Level, PBYTE lpBuffer, PWSTR lpMonitorName)
+{
+ TRACE("AddPortExA(%S, %lu, %p, %S)\n", pName, Level, lpBuffer,
lpMonitorName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
AddPortW(PWSTR pName, HWND hWnd, PWSTR pMonitorName)
{
@@ -30,6 +54,14 @@ AddPortW(PWSTR pName, HWND hWnd, PWSTR pMonitorName)
return FALSE;
}
+BOOL WINAPI
+ConfigurePortA(PSTR pName, HWND hWnd, PSTR pPortName)
+{
+ TRACE("ConfigurePortA(%s, %p, %s)\n", pName, hWnd, pPortName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
ConfigurePortW(PWSTR pName, HWND hWnd, PWSTR pPortName)
{
@@ -38,6 +70,14 @@ ConfigurePortW(PWSTR pName, HWND hWnd, PWSTR pPortName)
return FALSE;
}
+BOOL WINAPI
+DeletePortA(PSTR pName, HWND hWnd, PSTR pPortName)
+{
+ TRACE("DeletePortA(%s, %p, %s)\n", pName, hWnd, pPortName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
DeletePortW(PWSTR pName, HWND hWnd, PWSTR pPortName)
{
@@ -46,6 +86,14 @@ DeletePortW(PWSTR pName, HWND hWnd, PWSTR pPortName)
return FALSE;
}
+BOOL WINAPI
+EnumPortsA(PSTR pName, DWORD Level, PBYTE pPorts, DWORD cbBuf, PDWORD pcbNeeded, PDWORD
pcReturned)
+{
+ TRACE("EnumPortsA(%s, %lu, %p, %lu, %p, %p)\n", pName, Level, pPorts,
cbBuf, pcbNeeded, pcReturned);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
EnumPortsW(PWSTR pName, DWORD Level, PBYTE pPorts, DWORD cbBuf, PDWORD pcbNeeded, PDWORD
pcReturned)
{
@@ -84,3 +132,19 @@ EnumPortsW(PWSTR pName, DWORD Level, PBYTE pPorts, DWORD cbBuf, PDWORD
pcbNeeded
SetLastError(dwErrorCode);
return (dwErrorCode == ERROR_SUCCESS);
}
+
+BOOL WINAPI
+SetPortA(PSTR pName, PSTR pPortName, DWORD dwLevel, PBYTE pPortInfo)
+{
+ TRACE("SetPortA(%s, %s, %lu, %p)\n", pName, pPortName, dwLevel,
pPortInfo);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+SetPortW(PWSTR pName, PWSTR pPortName, DWORD dwLevel, PBYTE pPortInfo)
+{
+ TRACE("SetPortW(%S, %S, %lu, %p)\n", pName, pPortName, dwLevel,
pPortInfo);
+ UNIMPLEMENTED;
+ return FALSE;
+}
diff --git a/win32ss/printing/base/winspool/printerdata.c
b/win32ss/printing/base/winspool/printerdata.c
index 8904bb74d3..aefa944872 100644
--- a/win32ss/printing/base/winspool/printerdata.c
+++ b/win32ss/printing/base/winspool/printerdata.c
@@ -7,12 +7,116 @@
#include "precomp.h"
+LONG WINAPI
+AdvancedDocumentPropertiesA(HWND hWnd, HANDLE hPrinter, PSTR pDeviceName, PDEVMODEA
pDevModeOutput, PDEVMODEA pDevModeInput)
+{
+ TRACE("AdvancedDocumentPropertiesA(%p, %p, %s, %p, %p)\n", hWnd, hPrinter,
pDeviceName, pDevModeOutput, pDevModeInput);
+ UNIMPLEMENTED;
+ return 0;
+}
+
LONG WINAPI
AdvancedDocumentPropertiesW(HWND hWnd, HANDLE hPrinter, PWSTR pDeviceName, PDEVMODEW
pDevModeOutput, PDEVMODEW pDevModeInput)
{
TRACE("AdvancedDocumentPropertiesW(%p, %p, %S, %p, %p)\n", hWnd, hPrinter,
pDeviceName, pDevModeOutput, pDevModeInput);
UNIMPLEMENTED;
- return FALSE;
+ return 0;
+}
+
+DWORD WINAPI
+DeletePrinterDataA(HANDLE hPrinter, PSTR pValueName)
+{
+ TRACE("DeletePrinterDataA(%p, %s)\n", hPrinter, pValueName);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+DeletePrinterDataExA(HANDLE hPrinter, PCSTR pKeyName, PCSTR pValueName)
+{
+ TRACE("DeletePrinterDataExA(%p, %s, %s)\n", hPrinter, pKeyName,
pValueName);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+DeletePrinterDataExW(HANDLE hPrinter, PCWSTR pKeyName, PCWSTR pValueName)
+{
+ TRACE("DeletePrinterDataExW(%p, %S, %S)\n", hPrinter, pKeyName,
pValueName);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+DeletePrinterDataW(HANDLE hPrinter, PWSTR pValueName)
+{
+ TRACE("DeletePrinterDataW(%p, %S)\n", hPrinter, pValueName);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+DeletePrinterKeyA(HANDLE hPrinter, PCSTR pKeyName)
+{
+ TRACE("DeletePrinterKeyA(%p, %s)\n", hPrinter, pKeyName);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+DeletePrinterKeyW(HANDLE hPrinter, PCWSTR pKeyName)
+{
+ TRACE("DeletePrinterKeyW(%p, %S)\n", hPrinter, pKeyName);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+EnumPrinterDataA(HANDLE hPrinter, DWORD dwIndex, PSTR pValueName, DWORD cbValueName,
PDWORD pcbValueName, PDWORD pType, PBYTE pData, DWORD cbData, PDWORD pcbData)
+{
+ TRACE("EnumPrinterDataA(%p, %lu, %s, %lu, %p, %p, %p, %lu, %p)\n",
hPrinter, dwIndex, pValueName, cbValueName, pcbValueName, pType, pData, cbData, pcbData);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+EnumPrinterDataExA(HANDLE hPrinter, PCSTR pKeyName, PBYTE pEnumValues, DWORD
cbEnumValues, PDWORD pcbEnumValues, PDWORD pnEnumValues)
+{
+ TRACE("EnumPrinterDataExA(%p, %s, %p, %lu, %p, %p)\n", hPrinter, pKeyName,
pEnumValues, cbEnumValues, pcbEnumValues, pnEnumValues);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+EnumPrinterDataExW(HANDLE hPrinter, PCWSTR pKeyName, PBYTE pEnumValues, DWORD
cbEnumValues, PDWORD pcbEnumValues, PDWORD pnEnumValues)
+{
+ TRACE("EnumPrinterDataExW(%p, %S, %p, %lu, %p, %p)\n", hPrinter, pKeyName,
pEnumValues, cbEnumValues, pcbEnumValues, pnEnumValues);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+EnumPrinterDataW(HANDLE hPrinter, DWORD dwIndex, PWSTR pValueName, DWORD cbValueName,
PDWORD pcbValueName, PDWORD pType, PBYTE pData, DWORD cbData, PDWORD pcbData)
+{
+ TRACE("EnumPrinterDataW(%p, %lu, %S, %lu, %p, %p, %p, %lu, %p)\n",
hPrinter, dwIndex, pValueName, cbValueName, pcbValueName, pType, pData, cbData, pcbData);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+EnumPrinterKeyA(HANDLE hPrinter, PCSTR pKeyName, PSTR pSubkey, DWORD cbSubkey, PDWORD
pcbSubkey)
+{
+ TRACE("EnumPrinterKeyA(%p, %s, %s, %lu, %p)\n", hPrinter, pKeyName,
pSubkey, cbSubkey, pcbSubkey);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
+}
+
+DWORD WINAPI
+EnumPrinterKeyW(HANDLE hPrinter, PCWSTR pKeyName, PWSTR pSubkey, DWORD cbSubkey, PDWORD
pcbSubkey)
+{
+ TRACE("EnumPrinterKeyW(%p, %S, %S, %lu, %p)\n", hPrinter, pKeyName,
pSubkey, cbSubkey, pcbSubkey);
+ UNIMPLEMENTED;
+ return ERROR_NOT_SUPPORTED;
}
DWORD WINAPI
diff --git a/win32ss/printing/base/winspool/printerdrivers.c
b/win32ss/printing/base/winspool/printerdrivers.c
index d35e804571..de87781085 100644
--- a/win32ss/printing/base/winspool/printerdrivers.c
+++ b/win32ss/printing/base/winspool/printerdrivers.c
@@ -7,6 +7,30 @@
#include "precomp.h"
+BOOL WINAPI
+AddPrinterDriverA(PSTR pName, DWORD Level, PBYTE pDriverInfo)
+{
+ TRACE("AddPrinterDriverA(%s, %lu, %p)\n", pName, Level, pDriverInfo);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+AddPrinterDriverExA(PSTR pName, DWORD Level, PBYTE pDriverInfo, DWORD dwFileCopyFlags)
+{
+ TRACE("AddPrinterDriverExA(%s, %lu, %p, %lu)\n", pName, Level, pDriverInfo,
dwFileCopyFlags);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+AddPrinterDriverExW(PWSTR pName, DWORD Level, PBYTE pDriverInfo, DWORD dwFileCopyFlags)
+{
+ TRACE("AddPrinterDriverExW(%S, %lu, %p, %lu)\n", pName, Level, pDriverInfo,
dwFileCopyFlags);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
AddPrinterDriverW(PWSTR pName, DWORD Level, PBYTE pDriverInfo)
{
@@ -15,6 +39,30 @@ AddPrinterDriverW(PWSTR pName, DWORD Level, PBYTE pDriverInfo)
return FALSE;
}
+BOOL WINAPI
+DeletePrinterDriverA(PSTR pName, PSTR pEnvironment, PSTR pDriverName)
+{
+ TRACE("DeletePrinterDriverA(%s, %s, %s)\n", pName, pEnvironment,
pDriverName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+DeletePrinterDriverExA(PSTR pName, PSTR pEnvironment, PSTR pDriverName, DWORD
dwDeleteFlag, DWORD dwVersionFlag)
+{
+ TRACE("DeletePrinterDriverExA(%s, %s, %s, %lu, %lu)\n", pName,
pEnvironment, pDriverName, dwDeleteFlag, dwVersionFlag);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+BOOL WINAPI
+DeletePrinterDriverExW(PWSTR pName, PWSTR pEnvironment, PWSTR pDriverName, DWORD
dwDeleteFlag, DWORD dwVersionFlag)
+{
+ TRACE("DeletePrinterDriverExW(%S, %S, %S, %lu, %lu)\n", pName,
pEnvironment, pDriverName, dwDeleteFlag, dwVersionFlag);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
DeletePrinterDriverW(PWSTR pName, PWSTR pEnvironment, PWSTR pDriverName)
{
@@ -23,6 +71,14 @@ DeletePrinterDriverW(PWSTR pName, PWSTR pEnvironment, PWSTR
pDriverName)
return FALSE;
}
+BOOL WINAPI
+EnumPrinterDriversA(PSTR pName, PSTR pEnvironment, DWORD Level, PBYTE pDriverInfo, DWORD
cbBuf, PDWORD pcbNeeded, PDWORD pcReturned)
+{
+ TRACE("EnumPrinterDriversA(%s, %s, %lu, %p, %lu, %p, %p)\n", pName,
pEnvironment, Level, pDriverInfo, cbBuf, pcbNeeded, pcReturned);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
EnumPrinterDriversW(PWSTR pName, PWSTR pEnvironment, DWORD Level, PBYTE pDriverInfo,
DWORD cbBuf, PDWORD pcbNeeded, PDWORD pcReturned)
{
diff --git a/win32ss/printing/base/winspool/printers.c
b/win32ss/printing/base/winspool/printers.c
index 7283757098..ffe1823089 100644
--- a/win32ss/printing/base/winspool/printers.c
+++ b/win32ss/printing/base/winspool/printers.c
@@ -212,6 +212,22 @@ _StartDocPrinterWithRPC(PSPOOLER_HANDLE pHandle, PDOC_INFO_1W
pDocInfo1)
return dwErrorCode;
}
+BOOL WINAPI
+AbortPrinter(HANDLE hPrinter)
+{
+ TRACE("AbortPrinter(%p)\n", hPrinter);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
+HANDLE WINAPI
+AddPrinterA(PSTR pName, DWORD Level, PBYTE pPrinter)
+{
+ TRACE("AddPrinterA(%s, %lu, %p)\n", pName, Level, pPrinter);
+ UNIMPLEMENTED;
+ return NULL;
+}
+
HANDLE WINAPI
AddPrinterW(PWSTR pName, DWORD Level, PBYTE pPrinter)
{
@@ -259,10 +275,19 @@ Cleanup:
return (dwErrorCode == ERROR_SUCCESS);
}
+BOOL WINAPI
+DeletePrinter(HANDLE hPrinter)
+{
+ TRACE("DeletePrinter(%p)\n", hPrinter);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
DWORD WINAPI
DeviceCapabilitiesA(LPCSTR pDevice, LPCSTR pPort, WORD fwCapability, LPSTR pOutput, const
DEVMODEA* pDevMode)
{
TRACE("DeviceCapabilitiesA(%s, %s, %hu, %p, %p)\n", pDevice, pPort,
fwCapability, pOutput, pDevMode);
+ UNIMPLEMENTED;
return 0;
}
@@ -270,6 +295,7 @@ DWORD WINAPI
DeviceCapabilitiesW(LPCWSTR pDevice, LPCWSTR pPort, WORD fwCapability, LPWSTR pOutput,
const DEVMODEW* pDevMode)
{
TRACE("DeviceCapabilitiesW(%S, %S, %hu, %p, %p)\n", pDevice, pPort,
fwCapability, pOutput, pDevMode);
+ UNIMPLEMENTED;
return 0;
}
@@ -277,14 +303,16 @@ LONG WINAPI
DocumentPropertiesA(HWND hWnd, HANDLE hPrinter, LPSTR pDeviceName, PDEVMODEA
pDevModeOutput, PDEVMODEA pDevModeInput, DWORD fMode)
{
TRACE("DocumentPropertiesA(%p, %p, %s, %p, %p, %lu)\n", hWnd, hPrinter,
pDeviceName, pDevModeOutput, pDevModeInput, fMode);
- return 0;
+ UNIMPLEMENTED;
+ return -1;
}
LONG WINAPI
DocumentPropertiesW(HWND hWnd, HANDLE hPrinter, LPWSTR pDeviceName, PDEVMODEW
pDevModeOutput, PDEVMODEW pDevModeInput, DWORD fMode)
{
TRACE("DocumentPropertiesW(%p, %p, %S, %p, %p, %lu)\n", hWnd, hPrinter,
pDeviceName, pDevModeOutput, pDevModeInput, fMode);
- return 0;
+ UNIMPLEMENTED;
+ return -1;
}
BOOL WINAPI
@@ -432,6 +460,14 @@ Cleanup:
return (dwErrorCode == ERROR_SUCCESS);
}
+BOOL WINAPI
+FlushPrinter(HANDLE hPrinter, PVOID pBuf, DWORD cbBuf, PDWORD pcWritten, DWORD cSleep)
+{
+ TRACE("FlushPrinter(%p, %p, %lu, %p, %lu)\n", hPrinter, pBuf, cbBuf,
pcWritten, cSleep);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
GetDefaultPrinterA(LPSTR pszBuffer, LPDWORD pcchBuffer)
{
@@ -790,6 +826,14 @@ Cleanup:
return (dwErrorCode == ERROR_SUCCESS);
}
+BOOL WINAPI
+ResetPrinterA(HANDLE hPrinter, PPRINTER_DEFAULTSA pDefault)
+{
+ TRACE("ResetPrinterA(%p, %p)\n", hPrinter, pDefault);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
ResetPrinterW(HANDLE hPrinter, PPRINTER_DEFAULTSW pDefault)
{
@@ -944,6 +988,14 @@ Cleanup:
return (dwErrorCode == ERROR_SUCCESS);
}
+BOOL WINAPI
+SetPrinterA(HANDLE hPrinter, DWORD Level, PBYTE pPrinter, DWORD Command)
+{
+ TRACE("SetPrinterA(%p, %lu, %p, %lu)\n", hPrinter, Level, pPrinter,
Command);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
SetPrinterW(HANDLE hPrinter, DWORD Level, PBYTE pPrinter, DWORD Command)
{
diff --git a/win32ss/printing/base/winspool/printprocessors.c
b/win32ss/printing/base/winspool/printprocessors.c
index 0e5acc7ef6..406297de6f 100644
--- a/win32ss/printing/base/winspool/printprocessors.c
+++ b/win32ss/printing/base/winspool/printprocessors.c
@@ -1,9 +1,9 @@
/*
- * PROJECT: ReactOS Spooler API
- * LICENSE: GPL-2.0+ (
https://spdx.org/licenses/GPL-2.0+)
- * PURPOSE: Functions related to Print Processors
- * COPYRIGHT: Copyright 2015-2017 Colin Finck (colin(a)reactos.org)
- */
+* PROJECT: ReactOS Spooler API
+* LICENSE: GPL-2.0+ (
https://spdx.org/licenses/GPL-2.0+)
+* PURPOSE: Functions related to Print Processors
+* COPYRIGHT: Copyright 2015-2017 Colin Finck (colin(a)reactos.org)
+*/
#include "precomp.h"
#include <prtprocenv.h>
@@ -26,6 +26,14 @@ _MarshallUpPrintProcessorInfo(PPRINTPROCESSOR_INFO_1W*
ppPrintProcessorInfo1)
*ppPrintProcessorInfo1 += sizeof(PRINTPROCESSOR_INFO_1W);
}
+BOOL WINAPI
+AddPrintProcessorA(PSTR pName, PSTR pEnvironment, PSTR pPathName, PSTR
pPrintProcessorName)
+{
+ TRACE("AddPrintProcessorA(%s, %s, %s, %s)\n", pName, pEnvironment,
pPathName, pPrintProcessorName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
AddPrintProcessorW(PWSTR pName, PWSTR pEnvironment, PWSTR pPathName, PWSTR
pPrintProcessorName)
{
@@ -34,6 +42,14 @@ AddPrintProcessorW(PWSTR pName, PWSTR pEnvironment, PWSTR pPathName,
PWSTR pPrin
return FALSE;
}
+BOOL WINAPI
+DeletePrintProcessorA(PSTR pName, PSTR pEnvironment, PSTR pPrintProcessorName)
+{
+ TRACE("DeletePrintProcessorA(%s, %s, %s)\n", pName, pEnvironment,
pPrintProcessorName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
DeletePrintProcessorW(PWSTR pName, PWSTR pEnvironment, PWSTR pPrintProcessorName)
{
@@ -69,7 +85,7 @@ EnumPrintProcessorDatatypesW(PWSTR pName, LPWSTR pPrintProcessorName,
DWORD Leve
{
dwErrorCode = _RpcEnumPrintProcessorDatatypes(pName, pPrintProcessorName, Level,
pDatatypes, cbBuf, pcbNeeded, pcReturned);
}
- RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
dwErrorCode = RpcExceptionCode();
ERR("_RpcEnumPrintProcessorDatatypes failed with exception code
%lu!\n", dwErrorCode);
@@ -90,6 +106,14 @@ Cleanup:
return (dwErrorCode == ERROR_SUCCESS);
}
+BOOL WINAPI
+EnumPrintProcessorsA(PSTR pName, PSTR pEnvironment, DWORD Level, PBYTE
pPrintProcessorInfo, DWORD cbBuf, PDWORD pcbNeeded, PDWORD pcReturned)
+{
+ TRACE("EnumPrintProcessorsA(%s, %s, %lu, %p, %lu, %p, %p)\n", pName,
pEnvironment, Level, pPrintProcessorInfo, cbBuf, pcbNeeded, pcReturned);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
EnumPrintProcessorsW(PWSTR pName, PWSTR pEnvironment, DWORD Level, PBYTE
pPrintProcessorInfo, DWORD cbBuf, PDWORD pcbNeeded, PDWORD pcReturned)
{
@@ -106,7 +130,7 @@ EnumPrintProcessorsW(PWSTR pName, PWSTR pEnvironment, DWORD Level,
PBYTE pPrintP
{
dwErrorCode = _RpcEnumPrintProcessors(pName, pEnvironment, Level,
pPrintProcessorInfo, cbBuf, pcbNeeded, pcReturned);
}
- RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
dwErrorCode = RpcExceptionCode();
}
@@ -226,7 +250,7 @@ GetPrintProcessorDirectoryW(PWSTR pName, PWSTR pEnvironment, DWORD
Level, PBYTE
{
dwErrorCode = _RpcGetPrintProcessorDirectory(pName, pEnvironment, Level,
pPrintProcessorInfo, cbBuf, pcbNeeded);
}
- RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
dwErrorCode = RpcExceptionCode();
}
diff --git a/win32ss/printing/base/winspool/printproviders.c
b/win32ss/printing/base/winspool/printproviders.c
index 3ad4894bb2..58efb89f20 100644
--- a/win32ss/printing/base/winspool/printproviders.c
+++ b/win32ss/printing/base/winspool/printproviders.c
@@ -7,6 +7,14 @@
#include "precomp.h"
+BOOL WINAPI
+AddPrintProvidorA(PSTR pName, DWORD Level, PBYTE pProviderInfo)
+{
+ TRACE("AddPrintProvidorA(%s, %lu, %p)\n", pName, Level, pProviderInfo);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
AddPrintProvidorW(PWSTR pName, DWORD Level, PBYTE pProviderInfo)
{
@@ -15,6 +23,14 @@ AddPrintProvidorW(PWSTR pName, DWORD Level, PBYTE pProviderInfo)
return FALSE;
}
+BOOL WINAPI
+DeletePrintProvidorA(PSTR pName, PSTR pEnvironment, PSTR pPrintProviderName)
+{
+ TRACE("DeletePrintProvidorW(%s, %s, %s)\n", pName, pEnvironment,
pPrintProviderName);
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
BOOL WINAPI
DeletePrintProvidorW(PWSTR pName, PWSTR pEnvironment, PWSTR pPrintProviderName)
{
diff --git a/win32ss/printing/base/winspool/winspool.spec
b/win32ss/printing/base/winspool/winspool.spec
index 1083ebcf0e..5d8fed463e 100644
--- a/win32ss/printing/base/winspool/winspool.spec
+++ b/win32ss/printing/base/winspool/winspool.spec
@@ -6,67 +6,67 @@
105 stub PerfCollect
106 stub PerfOpen
107 stub ADVANCEDSETUPDIALOG
-108 stub AbortPrinter
-109 stub AddFormA
-110 stub AddFormW
-111 stdcall AddJobA(long long ptr long ptr)
-112 stdcall AddJobW(long long ptr long ptr)
-113 stub AddMonitorA
+108 stdcall AbortPrinter(ptr)
+109 stdcall AddFormA(ptr long ptr)
+110 stdcall AddFormW(ptr long ptr)
+111 stdcall AddJobA(ptr long ptr long ptr)
+112 stdcall AddJobW(ptr long ptr long ptr)
+113 stdcall AddMonitorA(str long ptr)
114 stdcall AddMonitorW(wstr long ptr)
-115 stub AddPortA
-116 stub AddPortExA
-117 stub AddPortExW
-118 stdcall AddPortW(wstr long wstr)
-119 stub AddPrintProcessorA
+115 stdcall AddPortA(str ptr str)
+116 stdcall AddPortExA(str long ptr str)
+117 stdcall AddPortExW(wstr long ptr wstr)
+118 stdcall AddPortW(wstr ptr wstr)
+119 stdcall AddPrintProcessorA(str str str str)
120 stdcall AddPrintProcessorW(wstr wstr wstr wstr)
-121 stub AddPrintProvidorA
+121 stdcall AddPrintProvidorA(str long ptr)
122 stdcall AddPrintProvidorW(wstr long ptr)
-123 stub AddPrinterA
+123 stdcall AddPrinterA(str long ptr)
124 stub AddPrinterConnectionA
125 stub AddPrinterConnectionW
-126 stub AddPrinterDriverA
-127 stub AddPrinterDriverExA
-128 stub AddPrinterDriverExW
+126 stdcall AddPrinterDriverA(str long ptr)
+127 stdcall AddPrinterDriverExA(str long ptr long)
+128 stdcall AddPrinterDriverExW(wstr long ptr long)
129 stdcall AddPrinterDriverW(wstr long ptr)
130 stdcall AddPrinterW(wstr long ptr)
-131 stub AdvancedDocumentPropertiesA
-132 stdcall AdvancedDocumentPropertiesW(long long wstr ptr ptr)
+131 stdcall AdvancedDocumentPropertiesA(ptr ptr str ptr ptr)
+132 stdcall AdvancedDocumentPropertiesW(ptr ptr wstr ptr ptr)
133 stub AdvancedSetupDialog
-134 stdcall ClosePrinter(long)
+134 stdcall ClosePrinter(ptr)
135 stub CloseSpoolFileHandle
136 stub CommitSpoolData
-137 stub ConfigurePortA
-138 stdcall ConfigurePortW(wstr long wstr)
+137 stdcall ConfigurePortA(str ptr str)
+138 stdcall ConfigurePortW(wstr ptr wstr)
139 stub ConnectToPrinterDlg
140 stub ConvertAnsiDevModeToUnicodeDevmode
141 stub ConvertUnicodeDevModeToAnsiDevmode
142 stub CreatePrinterIC
143 stub DEVICECAPABILITIES
144 stub DEVICEMODE
-145 stub DeleteFormA
-146 stub DeleteFormW
-147 stub DeleteMonitorA
+145 stdcall DeleteFormA(ptr str)
+146 stdcall DeleteFormW(ptr wstr)
+147 stdcall DeleteMonitorA(str str str)
148 stdcall DeleteMonitorW(wstr wstr wstr)
-149 stub DeletePortA
-150 stdcall DeletePortW(wstr long wstr)
-151 stub DeletePrintProcessorA
+149 stdcall DeletePortA(str ptr str)
+150 stdcall DeletePortW(wstr ptr wstr)
+151 stdcall DeletePrintProcessorA(str str str)
152 stdcall DeletePrintProcessorW(wstr wstr wstr)
-153 stub DeletePrintProvidorA
+153 stdcall DeletePrintProvidorA(str str str)
154 stdcall DeletePrintProvidorW(wstr wstr wstr)
-155 stub DeletePrinter
+155 stdcall DeletePrinter(ptr)
156 stub DeletePrinterConnectionA
157 stub DeletePrinterConnectionW
-158 stub DeletePrinterDataA
-159 stub DeletePrinterDataExA
-160 stub DeletePrinterDataExW
-161 stub DeletePrinterDataW
-162 stub DeletePrinterDriverA
-163 stub DeletePrinterDriverExA
-164 stub DeletePrinterDriverExW
+158 stdcall DeletePrinterDataA(ptr str)
+159 stdcall DeletePrinterDataExA(ptr str str)
+160 stdcall DeletePrinterDataExW(ptr wstr wstr)
+161 stdcall DeletePrinterDataW(ptr wstr)
+162 stdcall DeletePrinterDriverA(str str str)
+163 stdcall DeletePrinterDriverExA(str str str long long)
+164 stdcall DeletePrinterDriverExW(wstr wstr wstr long long)
165 stdcall DeletePrinterDriverW(wstr wstr wstr)
166 stub DeletePrinterIC
-167 stub DeletePrinterKeyA
-168 stub DeletePrinterKeyW
+167 stdcall DeletePrinterKeyA(ptr str)
+168 stdcall DeletePrinterKeyW(ptr wstr)
169 stub DevQueryPrint
170 stub DevQueryPrintEx
171 stub DeviceCapabilities
@@ -75,29 +75,29 @@
174 stub DeviceMode
175 stub DevicePropertySheets
176 stub DocumentEvent
-177 stdcall DocumentPropertiesA(long long ptr ptr ptr long)
-178 stdcall DocumentPropertiesW(long long ptr ptr ptr long)
+177 stdcall DocumentPropertiesA(ptr ptr ptr ptr ptr long)
+178 stdcall DocumentPropertiesW(ptr ptr ptr ptr ptr long)
179 stub DocumentPropertySheets
180 stub EXTDEVICEMODE
-181 stdcall EndDocPrinter(long)
-182 stdcall EndPagePrinter(long)
-183 stub EnumFormsA
-184 stub EnumFormsW
-185 stdcall EnumJobsA(long long long long ptr long ptr ptr)
-186 stdcall EnumJobsW(long long long long ptr long ptr ptr)
-187 stub EnumMonitorsA
+181 stdcall EndDocPrinter(ptr)
+182 stdcall EndPagePrinter(ptr)
+183 stdcall EnumFormsA(ptr long ptr long ptr ptr)
+184 stdcall EnumFormsW(ptr long ptr long ptr ptr)
+185 stdcall EnumJobsA(ptr long long long ptr long ptr ptr)
+186 stdcall EnumJobsW(ptr long long long ptr long ptr ptr)
+187 stdcall EnumMonitorsA(str long ptr long ptr ptr)
188 stdcall EnumMonitorsW(wstr long ptr long ptr ptr)
-189 stub EnumPortsA
+189 stdcall EnumPortsA(str long ptr long ptr ptr)
190 stdcall EnumPortsW(wstr long ptr long ptr ptr)
191 stdcall EnumPrintProcessorDatatypesA(ptr ptr long ptr long ptr ptr)
192 stdcall EnumPrintProcessorDatatypesW(ptr ptr long ptr long ptr ptr)
-193 stub EnumPrintProcessorsA
-194 stdcall EnumPrintProcessorsW(ptr ptr long ptr long ptr ptr)
-195 stub EnumPrinterDataA
-196 stub EnumPrinterDataExA
-197 stub EnumPrinterDataExW
-198 stub EnumPrinterDataW
-199 stub EnumPrinterDriversA
+193 stdcall EnumPrintProcessorsA(str str long ptr long ptr ptr)
+194 stdcall EnumPrintProcessorsW(wstr wstr long ptr long ptr ptr)
+195 stdcall EnumPrinterDataA(ptr long str long ptr ptr ptr long ptr)
+196 stdcall EnumPrinterDataExA(ptr str ptr long ptr ptr)
+197 stdcall EnumPrinterDataExW(ptr wstr ptr long ptr ptr)
+198 stdcall EnumPrinterDataW(ptr long wstr long ptr ptr ptr long ptr)
+199 stdcall EnumPrinterDriversA(str str long ptr long ptr ptr)
200 stdcall EnumPrinterDriversW(wstr wstr long ptr long ptr ptr)
201 stdcall GetDefaultPrinterA(ptr ptr)
202 stdcall SetDefaultPrinterA(str)
@@ -123,7 +123,7 @@
222 stub -noname SendRecvBidiData
223 stub -noname RouterFreeBidiResponseContainer
224 stub -noname ExternalConnectToLd64In32Server
-225 stub EnumPrinterKeyA
+225 stdcall EnumPrinterKeyA(ptr str str long ptr)
226 stub -noname PrintUIWebPnpEntry
227 stub -noname PrintUIWebPnpPostEntry
228 stub -noname PrintUICreateInstance
@@ -131,31 +131,31 @@
230 stub -noname PrintUIPrinterSetup
231 stub -noname PrintUIServerPropPages
232 stub -noname AddDriverCatalog
-233 stub EnumPrinterKeyW
+233 stdcall EnumPrinterKeyW(ptr wstr wstr long ptr)
234 stdcall EnumPrintersA(long ptr long ptr long ptr ptr)
235 stdcall EnumPrintersW(long ptr long ptr long ptr ptr)
236 stub ExtDeviceMode
237 stub FindClosePrinterChangeNotification
238 stub FindFirstPrinterChangeNotification
239 stub FindNextPrinterChangeNotification
-240 stub FlushPrinter
+240 stdcall FlushPrinter(ptr ptr long ptr long)
241 stub FreePrinterNotifyInfo
-242 stub GetFormA
-243 stub GetFormW
-244 stdcall GetJobA(long long long ptr long ptr)
-245 stdcall GetJobW(long long long ptr long ptr)
+242 stdcall GetFormA(ptr str long ptr long ptr)
+243 stdcall GetFormW(ptr str long ptr long ptr)
+244 stdcall GetJobA(ptr long long ptr long ptr)
+245 stdcall GetJobW(ptr long long ptr long ptr)
246 stdcall GetPrintProcessorDirectoryA(str str long ptr long ptr)
247 stdcall GetPrintProcessorDirectoryW(wstr wstr long ptr long ptr)
-248 stdcall GetPrinterA(long long ptr long ptr)
-249 stdcall GetPrinterDataA(long str ptr ptr long ptr)
-250 stdcall GetPrinterDataExA(long str str ptr ptr long ptr)
-251 stdcall GetPrinterDataExW(long wstr wstr ptr ptr long ptr)
-252 stdcall GetPrinterDataW(long wstr ptr ptr long ptr)
-253 stdcall GetPrinterDriverA(long str long ptr long ptr)
+248 stdcall GetPrinterA(ptr long ptr long ptr)
+249 stdcall GetPrinterDataA(ptr str ptr ptr long ptr)
+250 stdcall GetPrinterDataExA(ptr str str ptr ptr long ptr)
+251 stdcall GetPrinterDataExW(ptr wstr wstr ptr ptr long ptr)
+252 stdcall GetPrinterDataW(ptr wstr ptr ptr long ptr)
+253 stdcall GetPrinterDriverA(ptr str long ptr long ptr)
254 stdcall -stub GetPrinterDriverDirectoryA(str str long ptr long ptr)
255 stdcall GetPrinterDriverDirectoryW(wstr wstr long ptr long ptr)
-256 stdcall GetPrinterDriverW(long wstr long ptr long ptr)
-257 stdcall GetPrinterW(long long ptr long ptr)
+256 stdcall GetPrinterDriverW(ptr wstr long ptr long ptr)
+257 stdcall GetPrinterW(ptr long ptr long ptr)
258 stub GetSpoolFileHandle
259 stdcall IsValidDevmodeA(ptr long)
260 stdcall IsValidDevmodeW(ptr long)
@@ -168,33 +168,33 @@
267 stub QueryColorProfile
268 stub QueryRemoteFonts
269 stub QuerySpoolMode
-270 stdcall ReadPrinter(long ptr long ptr)
-271 stub ResetPrinterA
-272 stdcall ResetPrinterW(long ptr)
-273 stdcall ScheduleJob(long long)
+270 stdcall ReadPrinter(ptr ptr long ptr)
+271 stdcall ResetPrinterA(ptr ptr)
+272 stdcall ResetPrinterW(ptr ptr)
+273 stdcall ScheduleJob(ptr long)
274 stub SeekPrinter
275 stub SetAllocFailCount
-276 stub SetFormA
-277 stub SetFormW
-278 stdcall SetJobA(long long long ptr long)
-279 stdcall SetJobW(long long long ptr long)
-280 stub SetPortA
-281 stub SetPortW
-282 stub SetPrinterA
-283 stdcall SetPrinterDataA(long str long ptr long)
-284 stdcall SetPrinterDataExA(long str str long ptr long)
-285 stdcall SetPrinterDataExW(long wstr wstr long ptr long)
-286 stdcall SetPrinterDataW(long wstr long ptr long)
-287 stdcall SetPrinterW(long long ptr long)
+276 stdcall SetFormA(ptr str long str)
+277 stdcall SetFormW(ptr str long str)
+278 stdcall SetJobA(ptr long long ptr long)
+279 stdcall SetJobW(ptr long long ptr long)
+280 stdcall SetPortA(str str long ptr)
+281 stdcall SetPortW(wstr wstr long ptr)
+282 stdcall SetPrinterA(ptr long ptr long)
+283 stdcall SetPrinterDataA(ptr str long ptr long)
+284 stdcall SetPrinterDataExA(ptr str str long ptr long)
+285 stdcall SetPrinterDataExW(ptr wstr wstr long ptr long)
+286 stdcall SetPrinterDataW(ptr wstr long ptr long)
+287 stdcall SetPrinterW(ptr long ptr long)
288 stub SplDriverUnloadComplete
289 stub SpoolerDevQueryPrintW
290 stdcall SpoolerInit()
291 stub SpoolerPrinterEvent
292 stub StartDocDlgA
293 stub StartDocDlgW
-294 stdcall StartDocPrinterA(long long ptr)
-295 stdcall StartDocPrinterW(long long ptr)
-296 stdcall StartPagePrinter(long)
+294 stdcall StartDocPrinterA(ptr long ptr)
+295 stdcall StartDocPrinterW(ptr long ptr)
+296 stdcall StartPagePrinter(ptr)
297 stub WaitForPrinterChange
-298 stdcall WritePrinter(long ptr long ptr)
-299 stdcall XcvDataW(long wstr ptr long ptr long ptr ptr)
+298 stdcall WritePrinter(ptr ptr long ptr)
+299 stdcall XcvDataW(ptr wstr ptr long ptr long ptr ptr)