1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CLOUD_PRINT_VIRTUAL_DRIVER_WIN_PORT_MONITOR_SPOOLER_WIN_H_
6#define CLOUD_PRINT_VIRTUAL_DRIVER_WIN_PORT_MONITOR_SPOOLER_WIN_H_
7
8#include <windows.h>
9
10// Compatible structures and prototypes are also defined in the Windows DDK in
11// winsplp.h.
12#ifndef _WINSPLP_
13
14typedef struct {
15  DWORD size;
16  BOOL (WINAPI *pfnEnumPorts)(HANDLE,
17                              wchar_t*,
18                              DWORD level,
19                              BYTE*  ports,
20                              DWORD   ports_size,
21                              DWORD* needed_bytes,
22                              DWORD* returned);
23
24  BOOL (WINAPI *pfnOpenPort)(HANDLE monitor_data, wchar_t*, HANDLE* handle);
25
26  void* pfnOpenPortEx;  // Unused.
27
28  BOOL (WINAPI *pfnStartDocPort)(HANDLE port_handle,
29                                 wchar_t* printer_name,
30                                 DWORD job_id,
31                                 DWORD,
32                                 BYTE*);
33
34  BOOL (WINAPI *pfnWritePort)(HANDLE port,
35                               BYTE*  buffer,
36                               DWORD   buffer_size,
37                               DWORD* bytes_written);
38
39  BOOL (WINAPI *pfnReadPort)(HANDLE, BYTE*, DWORD, DWORD* bytes_read);
40
41  BOOL (WINAPI *pfnEndDocPort)(HANDLE port_handle);
42
43  BOOL (WINAPI *pfnClosePort)(HANDLE  port_handle);
44
45  void* pfnAddPort;  // Unused.
46
47  void* pfnAddPortEx;  // Unused.
48
49  void* pfnConfigurePort;  // Unused.
50
51  void* pfnDeletePort;  // Unused.
52
53  void* pfnGetPrinterDataFromPort;  // Unused.
54
55  void* pfnSetPortTimeOuts;  // Unusued.
56
57  BOOL (WINAPI *pfnXcvOpenPort)(HANDLE monitor,
58                               const wchar_t*,
59                               ACCESS_MASK granted_access,
60                               HANDLE* handle);
61
62  DWORD (WINAPI *pfnXcvDataPort)(HANDLE xcv_handle,
63                                const wchar_t* data_name,
64                                BYTE*,
65                                DWORD,
66                                BYTE* output_data,
67                                DWORD output_data_bytes,
68                                DWORD* output_data_bytes_needed);
69
70  BOOL (WINAPI *pfnXcvClosePort)(HANDLE handle);
71
72  VOID (WINAPI *pfnShutdown)(HANDLE monitor_handle);
73} MONITOR2;
74
75typedef struct {
76  DWORD size;
77
78  BOOL (WINAPI *pfnAddPortUI)(const wchar_t*,
79                              HWND hwnd,
80                              const wchar_t* monitor_name,
81                              wchar_t**);
82
83  BOOL (WINAPI *pfnConfigurePortUI)(const wchar_t*,
84                                    HWND hwnd,
85                                    const wchar_t* port_name);
86
87  BOOL (WINAPI *pfnDeletePortUI)(const wchar_t*,
88                                 HWND hwnd,
89                                 const wchar_t* port_name);
90} MONITORUI;
91
92typedef struct {
93  DWORD cbSize;
94  HANDLE hSpooler;
95  HKEY hckRegistryRoot;
96  void* pMonitorReg;  // Unused
97  BOOL bLocal;
98  LPCWSTR pszServerName;
99} MONITORINIT;
100
101MONITOR2* WINAPI InitializePrintMonitor2(MONITORINIT* monitor_init,
102                                         HANDLE* monitor_handle);
103
104MONITORUI* WINAPI InitializePrintMonitorUI(void);
105
106#endif  // ifdef USE_WIN_DDK
107#endif  // CLOUD_PRINT_VIRTUAL_DRIVER_WIN_PORT_MONITOR_SPOOLER_WIN_H_
108
109