2 * PROJECT: ReactOS Spooler API
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Functions related to Print Monitors
5 * COPYRIGHT: Copyright 2015-2018 Colin Finck (colin@reactos.org)
9 #include <marshalling/monitors.h>
12 AddMonitorA(PSTR pName
, DWORD Level
, PBYTE pMonitors
)
14 TRACE("AddMonitorA(%s, %lu, %p)\n", pName
, Level
, pMonitors
);
20 AddMonitorW(PWSTR pName
, DWORD Level
, PBYTE pMonitors
)
22 TRACE("AddMonitorW(%S, %lu, %p)\n", pName
, Level
, pMonitors
);
28 DeleteMonitorA(PSTR pName
, PSTR pEnvironment
, PSTR pMonitorName
)
30 TRACE("DeleteMonitorA(%s, %s, %s)\n", pName
, pEnvironment
, pMonitorName
);
36 DeleteMonitorW(PWSTR pName
, PWSTR pEnvironment
, PWSTR pMonitorName
)
38 TRACE("DeleteMonitorW(%S, %S, %S)\n", pName
, pEnvironment
, pMonitorName
);
44 EnumMonitorsA(PSTR pName
, DWORD Level
, PBYTE pMonitors
, DWORD cbBuf
, PDWORD pcbNeeded
, PDWORD pcReturned
)
46 TRACE("EnumMonitorsA(%s, %lu, %p, %lu, %p, %p)\n", pName
, Level
, pMonitors
, cbBuf
, pcbNeeded
, pcReturned
);
52 EnumMonitorsW(PWSTR pName
, DWORD Level
, PBYTE pMonitors
, DWORD cbBuf
, PDWORD pcbNeeded
, PDWORD pcReturned
)
56 TRACE("EnumMonitorsW(%S, %lu, %p, %lu, %p, %p)\n", pName
, Level
, pMonitors
, cbBuf
, pcbNeeded
, pcReturned
);
61 dwErrorCode
= _RpcEnumMonitors(pName
, Level
, pMonitors
, cbBuf
, pcbNeeded
, pcReturned
);
63 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
65 dwErrorCode
= RpcExceptionCode();
66 ERR("_RpcEnumPorts failed with exception code %lu!\n", dwErrorCode
);
70 if (dwErrorCode
== ERROR_SUCCESS
)
72 // Replace relative offset addresses in the output by absolute pointers.
73 ASSERT(Level
>= 1 && Level
<= 2);
74 MarshallUpStructuresArray(cbBuf
, pMonitors
, *pcReturned
, pMonitorInfoMarshalling
[Level
]->pInfo
, pMonitorInfoMarshalling
[Level
]->cbStructureSize
, TRUE
);
77 SetLastError(dwErrorCode
);
78 return (dwErrorCode
== ERROR_SUCCESS
);