ReactOS  0.4.15-dev-1384-g878186b
precomp.h File Reference
#include <windef.h>
#include <winbase.h>
#include <winuser.h>
#include <wingdi.h>
#include <winreg.h>
#include <winspool.h>
#include <winspool_c.h>
#include <winsplp.h>
#include <winddiui.h>
#include <ndk/rtlfuncs.h>
#include <strsafe.h>
#include <spoolss.h>
#include <marshalling/marshalling.h>
#include "wspool.h"
#include <wine/debug.h>
Include dependency graph for precomp.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _SPOOLER_HANDLE
 
struct  _UNIVERSAL_FONT_ID
 

Macros

#define WIN32_NO_STATUS
 
#define SPOOLER_HANDLE_SIG   'gg'
 

Typedefs

typedef struct _SPOOLER_HANDLE SPOOLER_HANDLE
 
typedef struct _SPOOLER_HANDLEPSPOOLER_HANDLE
 
typedef struct _UNIVERSAL_FONT_ID UNIVERSAL_FONT_ID
 
typedef struct _UNIVERSAL_FONT_IDPUNIVERSAL_FONT_ID
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (winspool)
 
DWORD UnicodeToAnsiInPlace (PWSTR pwszField)
 
DWORD UnicodeToAnsiZZInPlace (PWSTR pwszzField)
 
SECURITY_DESCRIPTORget_sd (SECURITY_DESCRIPTOR *sd, DWORD *size)
 
LONG WINAPI IntProtectHandle (HANDLE, BOOL)
 
BOOL WINAPI IntUnprotectHandle (HANDLE)
 
VOID UpdateTrayIcon (HANDLE hPrinter, DWORD JobId)
 
void RosConvertAnsiDevModeToUnicodeDevmode (PDEVMODEA pDevModeInput, PDEVMODEW *pDevModeOutput)
 
void RosConvertUnicodeDevModeToAnsiDevmode (PDEVMODEW pDevModeInput, PDEVMODEA pDevModeOutput)
 
BOOL WINAPI IsValidDevmodeNoSizeW (PDEVMODEW pDevmode)
 
static PWSTR AsciiToUnicode (UNICODE_STRING *usBufferPtr, LPCSTR src)
 

Variables

HANDLE hProcessHeap
 
CRITICAL_SECTION rtlCritSec
 

Macro Definition Documentation

◆ SPOOLER_HANDLE_SIG

#define SPOOLER_HANDLE_SIG   'gg'

Definition at line 32 of file precomp.h.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 11 of file precomp.h.

Typedef Documentation

◆ PSPOOLER_HANDLE

◆ PUNIVERSAL_FONT_ID

◆ SPOOLER_HANDLE

◆ UNIVERSAL_FONT_ID

Function Documentation

◆ AsciiToUnicode()

static PWSTR AsciiToUnicode ( UNICODE_STRING usBufferPtr,
LPCSTR  src 
)
inlinestatic

Definition at line 89 of file precomp.h.

90 {
91  if ( (src) )
92  {
94  return usBufferPtr->Buffer;
95  }
96  usBufferPtr->Buffer = NULL; /* so that RtlFreeUnicodeString won't barf */
97  return NULL;
98 }
NTSYSAPI BOOLEAN NTAPI RtlCreateUnicodeStringFromAsciiz(_Out_ PUNICODE_STRING Destination, _In_ PCSZ Source)
GLenum src
Definition: glext.h:6340
#define NULL
Definition: types.h:112

◆ get_sd()

SECURITY_DESCRIPTOR* get_sd ( SECURITY_DESCRIPTOR sd,
DWORD size 
)

Definition at line 283 of file utils.c.

284 {
285  PSID sid_group, sid_owner;
286  ACL *sacl, *dacl;
287  BOOL bSet = FALSE, bSetd = FALSE, bSets = FALSE;
288  PSECURITY_DESCRIPTOR absolute_sd, retsd;
289 
290  if ( !IsValidSecurityDescriptor( sd ) )
291  {
292  return NULL;
293  }
294 
296 
297  if ( !GetSecurityDescriptorOwner( sd, &sid_owner, &bSet ) )
298  {
299  return NULL;
300  }
301 
302  SetSecurityDescriptorOwner( &absolute_sd, sid_owner, bSet );
303 
304  if ( !GetSecurityDescriptorGroup( sd, &sid_group, &bSet ) )
305  {
306  return NULL;
307  }
308 
309  SetSecurityDescriptorGroup( &absolute_sd, sid_group, bSet );
310 
311  if ( !GetSecurityDescriptorDacl( sd, &bSetd, &dacl, &bSet ) )
312  {
313  return NULL;
314  }
315 
316  SetSecurityDescriptorDacl( &absolute_sd, bSetd, dacl, bSet );
317 
318  if ( !GetSecurityDescriptorSacl( sd, &bSets, &sacl, &bSet ) )
319  {
320  return(NULL);
321  }
322 
323  SetSecurityDescriptorSacl( &absolute_sd, bSets, sacl, bSet );
324 
325  *size = GetSecurityDescriptorLength( &absolute_sd );
326 
327  retsd = HeapAlloc( GetProcessHeap(), 0, *size );
328 
329  if ( retsd )
330  {
331  if ( !MakeSelfRelativeSD( &absolute_sd, retsd, size ) )
332  {
333  HeapFree( GetProcessHeap(), 0, retsd );
334  retsd = NULL;
335  }
336  }
337 
338  return retsd;
339 }
BOOL WINAPI SetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR pSecurityDescriptor, BOOL bSaclPresent, PACL pSacl, BOOL bSaclDefaulted)
Definition: sec.c:351
BOOL WINAPI IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR pSecurityDescriptor)
Definition: sec.c:176
BOOL WINAPI MakeSelfRelativeSD(PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor, PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor, LPDWORD lpdwBufferLength)
Definition: sec.c:214
BOOL WINAPI SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR pSecurityDescriptor, BOOL bDaclPresent, PACL pDacl, BOOL bDaclDefaulted)
Definition: sec.c:262
BOOL WINAPI GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR pSecurityDescriptor, LPBOOL lpbSaclPresent, PACL *pSacl, LPBOOL lpbSaclDefaulted)
Definition: sec.c:146
BOOL WINAPI InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR pSecurityDescriptor, DWORD dwRevision)
Definition: security.c:808
BOOL WINAPI GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR pSecurityDescriptor, PSID *pGroup, LPBOOL lpbGroupDefaulted)
Definition: sec.c:76
BOOL WINAPI SetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR pSecurityDescriptor, PSID pOwner, BOOL bOwnerDefaulted)
Definition: sec.c:312
#define SECURITY_DESCRIPTOR_REVISION
Definition: setypes.h:58
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL WINAPI SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR pSecurityDescriptor, PSID pGroup, BOOL bGroupDefaulted)
Definition: sec.c:288
BOOL WINAPI GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR pSecurityDescriptor, LPBOOL lpbDaclPresent, PACL *pDacl, LPBOOL lpbDaclDefaulted)
Definition: sec.c:45
GLsizeiptr size
Definition: glext.h:5919
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
Definition: security.c:35
static const WCHAR sd[]
Definition: suminfo.c:287
DWORD WINAPI GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR)
BOOL WINAPI GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR pSecurityDescriptor, PSID *pOwner, LPBOOL lpbOwnerDefaulted)
Definition: sec.c:103
#define NULL
Definition: types.h:112
#define HeapFree(x, y, z)
Definition: compat.h:594

◆ IntProtectHandle()

LONG WINAPI IntProtectHandle ( HANDLE  ,
BOOL   
)

Definition at line 105 of file utils.c.

106 {
107  BOOL Bad = TRUE;
108  LONG Ret;
109  PSPOOLER_HANDLE pHandle;
110 
112 
113  _SEH2_TRY
114  {
115  pHandle = (PSPOOLER_HANDLE)hSpooler;
116  if ( pHandle && pHandle->Sig == SPOOLER_HANDLE_SIG )
117  {
118  Bad = FALSE; // Not bad.
119  }
120  }
122  {
123  }
124  _SEH2_END;
125 
126  Ret = Bad; // Set return Level to 1 if we are BAD.
127 
128  if ( Bad )
129  {
131  ERR("IPH : Printer Handle failed!\n");
132  }
133  else
134  {
135  if ( Close )
136  {
137  if ( pHandle->bShared || pHandle->cCount != 0 )
138  {
139  pHandle->bShared = TRUE;
140  Ret = 2; // Return a high level and we are shared.
141  FIXME("IPH Close : We are shared\n");
142  }
143  else
144  {
145  pHandle->bClosed = TRUE;
146  FIXME("IPH Close : closing.\n");
147  }
148  }
149  }
150 
151  if ( !Ret ) // Need to be Level 0.
152  {
153  pHandle->cCount++;
154  FIXME("IPH : Count %d\n",pHandle->cCount);
155  }
156 
158 
159  // Return Level:
160  // 2 : Close and/or shared
161  // 1 : Failed Handle
162  // 0 : In use.
163  return Ret;
164 }
#define TRUE
Definition: types.h:120
#define ERROR_INVALID_HANDLE
Definition: compat.h:98
BOOL bShared
Definition: precomp.h:47
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
_SEH2_TRY
Definition: create.c:4226
#define SPOOLER_HANDLE_SIG
Definition: precomp.h:32
DWORD cCount
Definition: precomp.h:52
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
#define FIXME(fmt,...)
Definition: debug.h:111
#define EXCEPTION_EXECUTE_HANDLER
Definition: excpt.h:85
DWORD_PTR Sig
Definition: precomp.h:40
#define SetLastError(x)
Definition: compat.h:611
BOOL bClosed
Definition: precomp.h:48
#define ERR(fmt,...)
Definition: debug.h:110
_SEH2_END
Definition: create.c:4400
CRITICAL_SECTION rtlCritSec
Definition: main.c:13
Definition: sacdrv.h:267
#define _SEH2_EXCEPT(...)
Definition: pseh2_64.h:6
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
struct _SPOOLER_HANDLE * PSPOOLER_HANDLE

Referenced by ClosePrinter(), CloseSpoolFileHandle(), CommitSpoolData(), and GetSpoolFileHandle().

◆ IntUnprotectHandle()

BOOL WINAPI IntUnprotectHandle ( HANDLE  )

Definition at line 169 of file utils.c.

170 {
171  BOOL Ret = FALSE;
172  PSPOOLER_HANDLE pHandle = (PSPOOLER_HANDLE)hSpooler;
174  if ( pHandle->bShared && --pHandle->cCount == 0 )
175  {
176  pHandle->bClosed = TRUE;
177  pHandle->bShared = FALSE;
178  Ret = TRUE;
179  }
181  FIXME("IUH : Count %d\n",pHandle->cCount);
182  if ( Ret )
183  {
184 // ClosePrinterWorker( pHandle );
185  }
186  return Ret;
187 }
#define TRUE
Definition: types.h:120
BOOL bShared
Definition: precomp.h:47
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
DWORD cCount
Definition: precomp.h:52
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define FIXME(fmt,...)
Definition: debug.h:111
BOOL bClosed
Definition: precomp.h:48
CRITICAL_SECTION rtlCritSec
Definition: main.c:13
void WINAPI LeaveCriticalSection(LPCRITICAL_SECTION)
struct _SPOOLER_HANDLE * PSPOOLER_HANDLE

Referenced by CloseSpoolFileHandle(), CommitSpoolData(), and GetSpoolFileHandle().

◆ IsValidDevmodeNoSizeW()

BOOL WINAPI IsValidDevmodeNoSizeW ( PDEVMODEW  pDevmode)

Definition at line 238 of file devmode.c.

239 {
241  WORD wRequiredSize;
242 
243  TRACE("IsValidDevmodeNoSizeW(%p)\n", pDevmode);
244 
245  // Check if a Devmode was given at all.
246  if (!pDevmode)
247  goto Failure;
248 
249  // If the structure has private members, the public structure must be 32-bit packed.
250  if (pDevmode->dmDriverExtra && pDevmode->dmSize % 4)
251  goto Failure;
252 
253  // Now determine the minimum possible dmSize based on the given fields in dmFields.
254  wRequiredSize = FIELD_OFFSET(DEVMODEW, dmFields) + RTL_FIELD_SIZE(DEVMODEW, dmFields);
255 
256  while (pTable->dwField)
257  {
258  if (pDevmode->dmFields & pTable->dwField)
259  {
260  wRequiredSize = pTable->wSize;
261  break;
262  }
263 
264  pTable++;
265  }
266 
267  // Verify that the value in dmSize is big enough for the used fields.
268  if (pDevmode->dmSize < wRequiredSize)
269  goto Failure;
270 
271  // Check if dmDeviceName and (if used) dmFormName are null-terminated.
272  // Fix this if they aren't.
273  _FixStringW(pDevmode->dmDeviceName, sizeof(pDevmode->dmDeviceName));
274  if (pDevmode->dmFields & DM_FORMNAME)
275  _FixStringW(pDevmode->dmFormName, sizeof(pDevmode->dmFormName));
276 
277  // Return success without setting the error code.
278  return TRUE;
279 
280 Failure:
282  return FALSE;
283 }
#define RTL_FIELD_SIZE(type, field)
Definition: kdb_expr.c:84
static MINIMUM_SIZE_TABLE MinimumSizeW[]
Definition: devmode.c:57
DWORD dmFields
Definition: wingdi.h:1621
#define TRUE
Definition: types.h:120
WORD dmDriverExtra
Definition: wingdi.h:1620
WCHAR dmFormName[CCHFORMNAME]
Definition: wingdi.h:1644
#define FALSE
Definition: types.h:117
#define DM_FORMNAME
Definition: wingdi.h:1265
#define TRACE(s)
Definition: solgame.cpp:4
WORD dmSize
Definition: wingdi.h:1619
unsigned short WORD
Definition: ntddk_ex.h:93
static __inline void _FixStringW(PWSTR String, DWORD cbString)
Definition: devmode.c:116
#define SetLastError(x)
Definition: compat.h:611
WCHAR dmDeviceName[CCHDEVICENAME]
Definition: wingdi.h:1616
#define ERROR_INVALID_DATA
Definition: winerror.h:116
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
static const EHCI_PERIOD pTable[]
Definition: usbehci.c:29

Referenced by AddPrinterW(), DeviceCapabilitiesW(), DocumentPropertiesW(), QueryColorProfile(), and SetPrinterW().

◆ RosConvertAnsiDevModeToUnicodeDevmode()

void RosConvertAnsiDevModeToUnicodeDevmode ( PDEVMODEA  pDevModeInput,
PDEVMODEW pDevModeOutput 
)

Definition at line 285 of file devmode.c.

286 {
287  // FIXME: This function should become ConvertAnsiDevModeToUnicodeDevmode when its parameters are known!
288 
289  // Check if a pDevModeInput and pDevModeOutput are both not NULL.
290  if (!pDevModeInput || !pDevModeOutput)
291  return;
292 
293  *pDevModeOutput = GdiConvertToDevmodeW(pDevModeInput);
294 }
DEVMODEW *WINAPI GdiConvertToDevmodeW(const DEVMODEA *)
Definition: misc.c:969

Referenced by AddPrinterA(), DeviceCapabilitiesA(), DocumentPropertiesA(), ResetPrinterA(), and SetPrinterA().

◆ RosConvertUnicodeDevModeToAnsiDevmode()

void RosConvertUnicodeDevModeToAnsiDevmode ( PDEVMODEW  pDevModeInput,
PDEVMODEA  pDevModeOutput 
)

Definition at line 353 of file devmode.c.

354 {
355  PDEVMODEA pTmp;
356 
357  // FIXME: This function should become ConvertUnicodeDevModeToAnsiDevmode when its parameters are known!
358 
359  // Check if a pDevModeInput and pDevModeOutput are both not NULL.
360  if (!pDevModeInput || !pDevModeOutput)
361  return;
362 
363  pTmp = _ConvertToDevmodeA(pDevModeInput);
364  memcpy( pDevModeOutput, pTmp, pTmp->dmSize + pTmp->dmDriverExtra); // Copy into a Wide char (Larger) buffer.
365  HeapFree(hProcessHeap, 0, pTmp);
366 }
WORD dmSize
Definition: wingdi.h:1567
WORD dmDriverExtra
Definition: wingdi.h:1568
static __inline DEVMODEA * _ConvertToDevmodeA(const DEVMODEW *dmW)
Definition: devmode.c:298
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define HeapFree(x, y, z)
Definition: compat.h:594
HANDLE hProcessHeap
Definition: kbswitch.c:25

Referenced by DocumentPropertiesA(), EnumJobsA(), EnumPrintersA(), GetJobA(), and GetPrinterA().

◆ UnicodeToAnsiInPlace()

DWORD UnicodeToAnsiInPlace ( PWSTR  pwszField)

Definition at line 26 of file utils.c.

27 {
28  PSTR pszTemp;
29  DWORD cch;
30 
31  /*
32  * Map the incoming Unicode pwszField string to an ANSI one here so that we can do
33  * in-place conversion. We read the Unicode input and then we write back the ANSI
34  * conversion into the same buffer for use with our GetPrinterDriverA function
35  */
36  PSTR pszField = (PSTR)pwszField;
37 
38  if (!pwszField)
39  {
40  return ERROR_SUCCESS;
41  }
42 
43  cch = wcslen(pwszField);
44  if (cch == 0)
45  {
46  return ERROR_SUCCESS;
47  }
48 
49  pszTemp = HeapAlloc(hProcessHeap, 0, (cch + 1) * sizeof(CHAR));
50  if (!pszTemp)
51  {
52  ERR("HeapAlloc failed!\n");
54  }
55 
56  WideCharToMultiByte(CP_ACP, 0, pwszField, -1, pszTemp, cch + 1, NULL, NULL);
57  StringCchCopyA(pszField, cch + 1, pszTemp);
58 
59  HeapFree(hProcessHeap, 0, pszTemp);
60 
61  return ERROR_SUCCESS;
62 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define WideCharToMultiByte
Definition: compat.h:111
#define CP_ACP
Definition: compat.h:109
char CHAR
Definition: xmlstorage.h:175
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:201
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
unsigned long DWORD
Definition: ntddk_ex.h:95
#define ERR(fmt,...)
Definition: debug.h:110
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
Definition: strsafe.h:145
signed char * PSTR
Definition: retypes.h:7
#define NULL
Definition: types.h:112
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
Definition: compat.h:594
HANDLE hProcessHeap
Definition: kbswitch.c:25

Referenced by AddJobA(), EnumFormsA(), EnumJobsA(), EnumPrinterDriversA(), GetFormA(), GetJobA(), and GetPrinterDriverA().

◆ UnicodeToAnsiZZInPlace()

DWORD UnicodeToAnsiZZInPlace ( PWSTR  pwszzField)

Definition at line 76 of file utils.c.

77 {
78  PSTR pszTemp;
79  INT len, lenW;
80  PSTR pszField = (PSTR)pwszzField;
81 
82  lenW = multi_sz_lenW(pwszzField);
83  if (lenW == 0)
84  {
85  return ERROR_SUCCESS;
86  }
87 
88  len = WideCharToMultiByte(CP_ACP, 0, pwszzField, lenW, NULL, 0, NULL, NULL);
89 
90  pszTemp = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
91 
92  WideCharToMultiByte(CP_ACP, 0, pwszzField, lenW, pszTemp, len, NULL, NULL);
93 
94  StringCchCopyA(pszField, len, pszTemp);
95 
96  HeapFree(hProcessHeap, 0, pszTemp);
97 
98  return ERROR_SUCCESS;
99 }
#define ERROR_SUCCESS
Definition: deptool.c:10
#define WideCharToMultiByte
Definition: compat.h:111
#define CP_ACP
Definition: compat.h:109
int32_t INT
Definition: typedefs.h:58
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
GLenum GLsizei len
Definition: glext.h:6722
STRSAFEAPI StringCchCopyA(STRSAFE_LPSTR pszDest, size_t cchDest, STRSAFE_LPCSTR pszSrc)
Definition: strsafe.h:145
signed char * PSTR
Definition: retypes.h:7
#define NULL
Definition: types.h:112
static int multi_sz_lenW(const WCHAR *str)
Definition: utils.c:64
#define HeapFree(x, y, z)
Definition: compat.h:594
HANDLE hProcessHeap
Definition: kbswitch.c:25

Referenced by EnumPrinterDriversA(), and GetPrinterDriverA().

◆ UpdateTrayIcon()

VOID UpdateTrayIcon ( HANDLE  hPrinter,
DWORD  JobId 
)

Definition at line 342 of file utils.c.

343 {
344  PSPOOLER_HANDLE pHandle = (PSPOOLER_HANDLE)hPrinter;
345  SHCNF_PRINTJOB_INFO spji;
347  DWORD cbNeeded;
348  PPfpSHChangeNotify fpFunction;
349 
350  pHandle->bTrayIcon = TRUE;
351 
352  spji.JobId = JobId;
353 
354  if (!GetPrinterW( hPrinter, 1, (PBYTE)&pi1w, MAX_GETPRINTER_SIZE, &cbNeeded) )
355  {
356  ERR("UpdateTrayIcon : GetPrinterW cbNeeded %d\n");
357  return;
358  }
359 
360  if ( hShell32 == (HMODULE)-1 )
361  {
362  hShell32 = LoadLibraryW(L"shell32.dll");
363  }
364 
365  if ( hShell32 )
366  {
367  fpFunction = (PPfpSHChangeNotify)GetProcAddress( hShell32, "SHChangeNotify" );
368 
369  if ( fpFunction )
370  {
371  fpFunction( SHCNE_CREATE, (SHCNF_FLUSHNOWAIT|SHCNF_FLUSH|SHCNF_PRINTJOBW), pi1w->pName , &spji );
372  }
373  }
374  else
375  {
376  ERR("UpdateTrayIcon : No Shell32!\n");
377  }
378 }
#define TRUE
Definition: types.h:120
#define LoadLibraryW(x)
Definition: compat.h:606
WINBOOL WINAPI GetPrinterW(HANDLE hPrinter, DWORD Level, LPBYTE pPrinter, DWORD cbBuf, LPDWORD pcbNeeded)
Definition: printers.c:2504
#define MAX_GETPRINTER_SIZE
Definition: utils.c:12
static HMODULE hShell32
Definition: utils.c:15
unsigned long DWORD
Definition: ntddk_ex.h:95
static const WCHAR L[]
Definition: oid.c:1250
#define SHCNF_FLUSH
Definition: shlobj.h:1767
#define ERR(fmt,...)
Definition: debug.h:110
#define SHCNF_PRINTJOBW
Definition: undocshell.h:122
#define GetProcAddress(x, y)
Definition: compat.h:612
#define SHCNE_CREATE
Definition: shlobj.h:1730
BYTE * PBYTE
Definition: pedump.c:66
struct _SPOOLER_HANDLE * PSPOOLER_HANDLE
#define SHCNF_FLUSHNOWAIT
Definition: shlobj.h:1768
BOOL bTrayIcon
Definition: precomp.h:45
void(WINAPI * PPfpSHChangeNotify)(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
Definition: utils.c:13

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( winspool  )

Variable Documentation

◆ hProcessHeap

◆ rtlCritSec

CRITICAL_SECTION rtlCritSec

Definition at line 13 of file main.c.

Referenced by DllMain(), IntProtectHandle(), and IntUnprotectHandle().