prevent buffer overflow, LoadString accepts the size of the buffer in TCHARs, not...
[reactos.git] / reactos / drivers / dd / green / green.h
1 #if defined(__GNUC__)
2 #include <ddk/ntddk.h>
3 #include <ddk/ntddser.h>
4 #include <ntos/halfuncs.h>
5 #include <ddk/ntddblue.h>
6 #include <ddk/ntddkbd.h> /* should be in kbdmou.h */
7
8 #include <debug.h>
9
10 /* FIXME: should be in kbdmou.h */
11 typedef struct _CONNECT_DATA {
12 PDEVICE_OBJECT ClassDeviceObject;
13 PVOID ClassService;
14 } CONNECT_DATA, *PCONNECT_DATA;
15
16 /* FIXME: should be in kbdmou.h */
17 #define IOCTL_INTERNAL_KEYBOARD_CONNECT \
18 CTL_CODE(FILE_DEVICE_KEYBOARD, 0x0080, METHOD_NEITHER, FILE_ANY_ACCESS)
19
20 NTSTATUS STDCALL
21 ObReferenceObjectByName(PUNICODE_STRING ObjectPath,
22 ULONG Attributes,
23 PACCESS_STATE PassedAccessState,
24 ACCESS_MASK DesiredAccess,
25 POBJECT_TYPE ObjectType,
26 KPROCESSOR_MODE AccessMode,
27 PVOID ParseContext,
28 PVOID* ObjectPtr);
29
30 /* FIXME: should be in kbdmou.h */
31 typedef VOID (*PSERVICE_CALLBACK_ROUTINE)(PDEVICE_OBJECT, PKEYBOARD_INPUT_DATA, PKEYBOARD_INPUT_DATA, PULONG);
32
33 typedef struct _CLASS_INFORMATION
34 {
35 PDEVICE_OBJECT DeviceObject;
36 PVOID CallBack;
37 } CLASS_INFORMATION, *PCLASS_INFORMATION;
38
39 #define KEYBOARD_BUFFER_SIZE 100
40
41 #elif defined(_MSC_VER)
42 #include <ntddk.h>
43 #include <ntddser.h>
44 #include <kbdmou.h>
45
46 #define STDCALL
47
48 #define DPRINT1 DbgPrint("(%s:%d) ", __FILE__, __LINE__), DbgPrint
49 #define CHECKPOINT1 DbgPrint("(%s:%d)\n", __FILE__, __LINE__)
50 #define DPRINT DPRINT1
51 #define CHECKPOINT CHECKPOINT1
52 #else
53 #error Unknown compiler!
54 #endif
55
56 typedef enum
57 {
58 Green,
59 Screen,
60 Keyboard
61 } GREEN_DEVICE_TYPE;
62
63 typedef struct _COMMON_DEVICE_EXTENSION
64 {
65 GREEN_DEVICE_TYPE Type;
66 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
67
68 typedef struct _KEYBOARD_DEVICE_EXTENSION
69 {
70 COMMON_DEVICE_EXTENSION Common;
71 PDEVICE_OBJECT Green;
72
73 CLASS_INFORMATION ClassInformation;
74 HANDLE WorkerThreadHandle;
75 KDPC KeyboardDpc;
76
77 ULONG ActiveQueue;
78 ULONG InputDataCount[2];
79 KEYBOARD_INPUT_DATA KeyboardInputData[2][KEYBOARD_BUFFER_SIZE];
80 } KEYBOARD_DEVICE_EXTENSION, *PKEYBOARD_DEVICE_EXTENSION;
81
82 typedef struct _SCREEN_DEVICE_EXTENSION
83 {
84 COMMON_DEVICE_EXTENSION Common;
85 PDEVICE_OBJECT Green;
86
87 PUCHAR VideoMemory; /* Pointer to video memory */
88 USHORT CharAttribute; /* Current color attribute */
89 ULONG Mode;
90 UCHAR ScanLines; /* Height of a text line */
91 UCHAR Rows; /* Number of rows */
92 UCHAR Columns; /* Number of columns */
93 UCHAR TabWidth;
94
95 ULONG LogicalOffset; /* Position of the cursor */
96
97 UCHAR SendBuffer[1024];
98 ULONG SendBufferPosition;
99 } SCREEN_DEVICE_EXTENSION, *PSCREEN_DEVICE_EXTENSION;
100
101 typedef struct _GREEN_DEVICE_EXTENSION
102 {
103 COMMON_DEVICE_EXTENSION Common;
104 PDEVICE_OBJECT Serial;
105
106 PDEVICE_OBJECT LowerDevice;
107 ULONG BaudRate;
108 SERIAL_LINE_CONTROL LineControl;
109 SERIAL_TIMEOUTS Timeouts;
110
111 PDEVICE_OBJECT Keyboard;
112 PDEVICE_OBJECT Screen;
113 } GREEN_DEVICE_EXTENSION, *PGREEN_DEVICE_EXTENSION;
114
115 /************************************ createclose.c */
116
117 NTSTATUS STDCALL
118 GreenCreate(
119 IN PDEVICE_OBJECT DeviceObject,
120 IN PIRP Irp);
121
122 NTSTATUS STDCALL
123 GreenClose(
124 IN PDEVICE_OBJECT DeviceObject,
125 IN PIRP Irp);
126
127 /************************************ dispatch.c */
128
129 NTSTATUS STDCALL
130 GreenDispatch(
131 IN PDEVICE_OBJECT DeviceObject,
132 IN PIRP Irp);
133
134 /************************************ keyboard.c */
135
136 NTSTATUS
137 KeyboardInitialize(
138 IN PDRIVER_OBJECT DriverObject,
139 OUT PDEVICE_OBJECT* KeyboardFdo);
140
141 NTSTATUS
142 KeyboardInternalDeviceControl(
143 IN PDEVICE_OBJECT DeviceObject,
144 IN PIRP Irp);
145
146 /************************************ misc.c */
147
148 NTSTATUS
149 GreenDeviceIoControl(
150 IN PDEVICE_OBJECT DeviceObject,
151 IN ULONG CtlCode,
152 IN PVOID InputBuffer OPTIONAL,
153 IN ULONG InputBufferSize,
154 IN OUT PVOID OutputBuffer OPTIONAL,
155 IN OUT PULONG OutputBufferSize);
156
157 /************************************ pnp.c */
158
159 NTSTATUS STDCALL
160 GreenAddDevice(
161 IN PDRIVER_OBJECT DriverObject,
162 IN PDEVICE_OBJECT Pdo);
163
164 /************************************ screen.c */
165
166 NTSTATUS
167 ScreenInitialize(
168 IN PDRIVER_OBJECT DriverObject,
169 OUT PDEVICE_OBJECT* ScreenFdo);
170
171 NTSTATUS
172 ScreenWrite(
173 IN PDEVICE_OBJECT DeviceObject,
174 IN PIRP Irp);
175
176 NTSTATUS
177 ScreenDeviceControl(
178 IN PDEVICE_OBJECT DeviceObject,
179 IN PIRP Irp);