ReactOS 0.4.15-dev-7953-g1f49173
monitors.c File Reference
#include "precomp.h"
Include dependency graph for monitors.c:

Go to the source code of this file.

Functions

BOOL WINAPI AddMonitorW (PWSTR pName, DWORD Level, PBYTE pMonitors)
 
BOOL WINAPI DeleteMonitorW (PWSTR pName, PWSTR pEnvironment, PWSTR pMonitorName)
 
BOOL WINAPI EnumMonitorsW (PWSTR pName, DWORD Level, PBYTE pMonitors, DWORD cbBuf, PDWORD pcbNeeded, PDWORD pcReturned)
 

Function Documentation

◆ AddMonitorW()

BOOL WINAPI AddMonitorW ( PWSTR  pName,
DWORD  Level,
PBYTE  pMonitors 
)

Definition at line 11 of file monitors.c.

12{
13 BOOL bReturnValue = TRUE;
14 DWORD dwErrorCode = MAXDWORD;
15 PSPOOLSS_PRINT_PROVIDER pPrintProvider;
17
18 // Loop through all Print Provider.
20 {
22
23 // Check if this Print Provider provides the function.
24 if (!pPrintProvider->PrintProvider.fpAddMonitor)
25 continue;
26
27 bReturnValue = pPrintProvider->PrintProvider.fpAddMonitor(pName, Level, pMonitors);
28
29 if ( !bReturnValue )
30 {
31 dwErrorCode = GetLastError();
32 }
33
34 // dwErrorCode shall not be overwritten if a previous call already succeeded.
35 if (dwErrorCode != ERROR_SUCCESS)
36 dwErrorCode = GetLastError();
37 }
38
39 SetLastError(dwErrorCode);
40 return (dwErrorCode == ERROR_SUCCESS);
41}
#define ERROR_SUCCESS
Definition: deptool.c:10
#define TRUE
Definition: types.h:120
#define SetLastError(x)
Definition: compat.h:752
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
PLIST_ENTRY pEntry
Definition: fxioqueue.cpp:4484
static LPSTR pName
Definition: security.c:75
#define MAXDWORD
base of all file and directory entries
Definition: entries.h:83
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
PRINTPROVIDOR PrintProvider
Definition: precomp.h:36
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
LIST_ENTRY PrintProviderList
Definition: main.c:12
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:56

Referenced by _RpcAddMonitor(), and AddMonitorA().

◆ DeleteMonitorW()

BOOL WINAPI DeleteMonitorW ( PWSTR  pName,
PWSTR  pEnvironment,
PWSTR  pMonitorName 
)

Definition at line 44 of file monitors.c.

45{
46 BOOL bReturnValue = TRUE;
47 DWORD dwErrorCode = MAXDWORD;
48 PSPOOLSS_PRINT_PROVIDER pPrintProvider;
50
51 // Loop through all Print Provider.
53 {
55
56 // Check if this Print Provider provides the function.
57 if (!pPrintProvider->PrintProvider.fpDeleteMonitor)
58 continue;
59
60 bReturnValue = pPrintProvider->PrintProvider.fpDeleteMonitor(pName, pEnvironment, pMonitorName);
61
62 if ( !bReturnValue )
63 {
64 dwErrorCode = GetLastError();
65 }
66
67 // dwErrorCode shall not be overwritten if a previous call already succeeded.
68 if (dwErrorCode != ERROR_SUCCESS)
69 dwErrorCode = GetLastError();
70 }
71
72 SetLastError(dwErrorCode);
73 return (dwErrorCode == ERROR_SUCCESS);
74}

Referenced by _RpcDeleteMonitor(), and DeleteMonitorA().

◆ EnumMonitorsW()

BOOL WINAPI EnumMonitorsW ( PWSTR  pName,
DWORD  Level,
PBYTE  pMonitors,
DWORD  cbBuf,
PDWORD  pcbNeeded,
PDWORD  pcReturned 
)

Definition at line 77 of file monitors.c.

78{
79 BOOL bReturnValue = TRUE;
80 DWORD cbCallBuffer;
81 DWORD cbNeeded;
82 DWORD dwReturned;
83 DWORD dwErrorCode = MAXDWORD;
84 PBYTE pCallBuffer;
85 PSPOOLSS_PRINT_PROVIDER pPrintProvider;
87
88 // Sanity checks.
89 if (cbBuf && !pMonitors)
90 {
92 return FALSE;
93 }
94
95 // Begin counting.
96 *pcbNeeded = 0;
97 *pcReturned = 0;
98
99 // At the beginning, we have the full buffer available.
100 cbCallBuffer = cbBuf;
101 pCallBuffer = pMonitors;
102
103 // Loop through all Print Provider.
105 {
107
108 // Check if this Print Provider provides an EnumMonitors function.
109 if (!pPrintProvider->PrintProvider.fpEnumMonitors)
110 continue;
111
112 // Call the EnumMonitors function of this Print Provider.
113 cbNeeded = 0;
114 dwReturned = 0;
115 bReturnValue = pPrintProvider->PrintProvider.fpEnumMonitors(pName, Level, pCallBuffer, cbCallBuffer, &cbNeeded, &dwReturned);
116
117 if ( !bReturnValue )
118 {
119 dwErrorCode = GetLastError();
120 }
121
122 // Add the returned counts to the total values.
123 *pcbNeeded += cbNeeded;
124 *pcReturned += dwReturned;
125
126 // Reduce the available buffer size for the next call without risking an underflow.
127 if (cbNeeded < cbCallBuffer)
128 cbCallBuffer -= cbNeeded;
129 else
130 cbCallBuffer = 0;
131
132 // Advance the buffer if the caller provided it.
133 if (pCallBuffer)
134 pCallBuffer += cbNeeded;
135
136 // dwErrorCode shall not be overwritten if a previous EnumPrinters call already succeeded.
137 if (dwErrorCode != ERROR_SUCCESS)
138 dwErrorCode = GetLastError();
139 }
140
141 SetLastError(dwErrorCode);
142 return (dwErrorCode == ERROR_SUCCESS);
143}
#define FALSE
Definition: types.h:117
BYTE * PBYTE
Definition: pedump.c:66
_In_ DWORD _Out_ PDWORD pcbNeeded
Definition: winddi.h:3828
#define ERROR_INVALID_USER_BUFFER
Definition: winerror.h:1091

Referenced by _RpcEnumMonitors(), and EnumMonitorsA().