source: trunk/src/kernel32/hmdevice.h@ 2007

Last change on this file since 2007 was 1858, checked in by achimha, 26 years ago

start of COM port implementation

File size: 14.7 KB
Line 
1/* $Id: hmdevice.h,v 1.11 1999-11-27 12:48:26 achimha Exp $ */
2
3/*
4 * Project Odin Software License can be found in LICENSE.TXT
5 * Win32 Unified Handle Manager for OS/2
6 * 1999/06/17 PH Patrick Haller (phaller@gmx.net)
7 */
8
9#ifndef _HM_DEVICE_H_
10#define _HM_DEVICE_H_
11
12
13/*****************************************************************************
14 * Remark *
15 *****************************************************************************
16 */
17
18
19/*****************************************************************************
20 * Includes *
21 *****************************************************************************/
22
23/*****************************************************************************
24 * defines *
25 *****************************************************************************/
26
27#define HMTYPE_UNKNOWN 0
28#define HMTYPE_MEMMAP 1
29#define HMTYPE_DEVICE 2
30//.....
31
32/*****************************************************************************
33 * Structures *
34 *****************************************************************************/
35
36typedef struct _HMHANDLEDATA
37{
38 HANDLE hHMHandle; /* a copy of the OS/2 system handle */
39
40 DWORD dwType; /* handle type identifier */
41
42 DWORD dwAccess; /* access mode of the handle */
43 DWORD dwShare; /* share mode of the handle */
44 DWORD dwCreation; /* dwCreationDisposition */
45 DWORD dwFlags; /* flags and attributes */
46
47 DWORD dwUserData;
48 DWORD dwInternalType;
49
50 LPVOID lpHandlerData; /* for private use of the device handler */
51} HMHANDLEDATA, *PHMHANDLEDATA;
52
53
54
55class HMDeviceHandler
56{
57 /***************************************************************************
58 * The following methods are called by the handle manager request router. *
59 * They are exact replacements for the corresponding Win32 calls. *
60 ***************************************************************************/
61
62public:
63 LPCSTR lpHMDeviceName; /* a reference to the device name */
64
65 HMDeviceHandler(LPCSTR lpDeviceName); /* constructor with device name */
66
67
68 /***********************************
69 * handle generic standard methods *
70 ***********************************/
71
72 /* this is a special internal method to handle non-standard requests */
73 /* such as GetConsoleMode() for console devices */
74 virtual DWORD _DeviceRequest (PHMHANDLEDATA pHMHandleData,
75 ULONG ulRequestCode,
76 ULONG arg1,
77 ULONG arg2,
78 ULONG arg3,
79 ULONG arg4);
80
81 virtual BOOL DuplicateHandle(PHMHANDLEDATA pHMHandleData, HANDLE srcprocess,
82 PHMHANDLEDATA pHMSrcHandle,
83 HANDLE destprocess,
84 PHANDLE desthandle,
85 DWORD fdwAccess,
86 BOOL fInherit,
87 DWORD fdwOptions);
88
89 /* this is a handler method for calls to CreateFile() */
90 virtual DWORD CreateFile (LPCSTR lpFileName,
91 PHMHANDLEDATA pHMHandleData,
92 PVOID lpSecurityAttributes,
93 PHMHANDLEDATA pHMHandleDataTemplate);
94
95 /* this is a handler method for calls to OpenFile() */
96 virtual DWORD OpenFile (LPCSTR lpFileName,
97 PHMHANDLEDATA pHMHandleData,
98 OFSTRUCT* pOFStruct,
99 UINT fuMode);
100
101 /* this is a handler method for calls to CloseHandle() */
102 virtual DWORD CloseHandle(PHMHANDLEDATA pHMHandleData);
103
104 /* this is a handler method for calls to ReadFile() */
105 virtual DWORD ReadFile (PHMHANDLEDATA pHMHandleData,
106 LPCVOID lpBuffer,
107 DWORD nNumberOfBytesToRead,
108 LPDWORD lpNumberOfBytesRead,
109 LPOVERLAPPED lpOverlapped);
110
111 /* this is a handler method for calls to WriteFile() */
112 virtual DWORD WriteFile (PHMHANDLEDATA pHMHandleData,
113 LPCVOID lpBuffer,
114 DWORD nNumberOfBytesToWrite,
115 LPDWORD lpNumberOfBytesWritten,
116 LPOVERLAPPED lpOverlapped);
117
118 /* this is a handler method for calls to GetFileType() */
119 virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
120
121
122 /* this is a handler method for calls to GetFileInformationByHandle() */
123 virtual DWORD GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
124 BY_HANDLE_FILE_INFORMATION *pHFI);
125
126 /* this is a handler method for calls to SetEndOfFile() */
127 virtual BOOL SetEndOfFile(PHMHANDLEDATA pHMHandleData);
128
129 /* this is a handler method for calls to SetFileTime() */
130 virtual BOOL SetFileTime (PHMHANDLEDATA pHMHandleData,
131 LPFILETIME pFT1,
132 LPFILETIME pFT2,
133 LPFILETIME pFT3);
134
135 /* this is a handler method for calls to GetFileSize() */
136 virtual DWORD GetFileSize(PHMHANDLEDATA pHMHandleData,
137 PDWORD pSizeHigh);
138
139 /* this is a handler method for calls to SetFilePointer() */
140 virtual DWORD SetFilePointer(PHMHANDLEDATA pHMHandleData,
141 LONG lDistanceToMove,
142 PLONG lpDistanceToMoveHigh,
143 DWORD dwMoveMethod);
144
145 /* this is a handler method for calls to FlushFileBuffers() */
146 virtual BOOL FlushFileBuffers(PHMHANDLEDATA pHMHandleData);
147
148 /* this is a handler method for calls to GetOverlappedResult() */
149 virtual BOOL GetOverlappedResult (PHMHANDLEDATA pHMHandleData,
150 LPOVERLAPPED lpOverlapped,
151 LPDWORD arg3,
152 BOOL arg4);
153
154 /* this is a handler method for calls to LockFile() */
155 virtual DWORD LockFile(PHMHANDLEDATA pHMHandleData,
156 DWORD arg2,
157 DWORD arg3,
158 DWORD arg4,
159 DWORD arg5);
160
161 /* this is a handler method for calls to LockFileEx() */
162 virtual DWORD LockFileEx(PHMHANDLEDATA pHMHandleData,
163 DWORD dwFlags,
164 DWORD dwReserved,
165 DWORD nNumberOfBytesToLockLow,
166 DWORD nNumberOfBytesToLockHigh,
167 LPOVERLAPPED lpOverlapped);
168
169 /* this is a handler method for calls to UnlockFile() */
170 virtual DWORD UnlockFile(PHMHANDLEDATA pHMHandleData,
171 DWORD arg2,
172 DWORD arg3,
173 DWORD arg4,
174 DWORD arg5);
175
176 /* this is a handler method for calls to UnlockFileEx() */
177 virtual DWORD UnlockFileEx(PHMHANDLEDATA pHMHandleData,
178 DWORD dwFlags,
179 DWORD dwReserved,
180 DWORD nNumberOfBytesToLockLow,
181 DWORD nNumberOfBytesToLockHigh,
182 LPOVERLAPPED lpOverlapped);
183
184 /* this is a handler method for calls to WaitForSingleObject */
185 virtual DWORD WaitForSingleObject (PHMHANDLEDATA pHMHandleData,
186 DWORD dwTimeout);
187
188 /* this is a handler method for calls to WaitForSingleObjectEx */
189 virtual DWORD WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
190 DWORD dwTimeout,
191 BOOL fAlertable);
192
193
194 /***************************************************************************
195 * Events *
196 ***************************************************************************/
197
198 /* this is a handler method for calls to CreateEvent() */
199 virtual DWORD CreateEvent (PHMHANDLEDATA pHMHandleData,
200 LPSECURITY_ATTRIBUTES lpsa,
201 BOOL fManualReset,
202 BOOL fInitialState,
203 LPCSTR lpszEventName);
204
205 /* this is a handler method for calls to OpenEvent() */
206 virtual DWORD OpenEvent (PHMHANDLEDATA pHMHandleData,
207 BOOL fInheritHandle,
208 LPCSTR lpszEventName);
209
210 /* this is a handle method for calls to ResetEvent() */
211 virtual BOOL ResetEvent (PHMHANDLEDATA pHMHandleData);
212
213 /* this is a handle method for calls to SetEvent() */
214 virtual BOOL SetEvent (PHMHANDLEDATA pHMHandleData);
215
216 /* this is a handle method for calls to PulseEvent() */
217 virtual BOOL PulseEvent (PHMHANDLEDATA pHMHandleData);
218
219
220 /***************************************************************************
221 * Mutex *
222 ***************************************************************************/
223
224 /* this is a handler method for calls to CreateMutex() */
225 virtual DWORD CreateMutex (PHMHANDLEDATA pHMHandleData,
226 LPSECURITY_ATTRIBUTES lpsa,
227 BOOL fInitialOwner,
228 LPCSTR lpszMutexName);
229
230 /* this is a handler method for calls to OpenMutex() */
231 virtual DWORD OpenMutex (PHMHANDLEDATA pHMHandleData,
232 BOOL fInheritHandle,
233 LPCSTR lpszMutexName);
234
235 /* this is a handle method for calls to ReleaseMutex() */
236 virtual BOOL ReleaseMutex(PHMHANDLEDATA pHMHandleData);
237
238
239 /***************************************************************************
240 * Semaphores *
241 ***************************************************************************/
242
243 /* this is a handler method for calls to CreateSemaphore() */
244 virtual DWORD CreateSemaphore (PHMHANDLEDATA pHMHandleData,
245 LPSECURITY_ATTRIBUTES lpsa,
246 LONG lInitialCount,
247 LONG lMaximumCount,
248 LPCSTR lpszSemaphoreName);
249
250 /* this is a handler method for calls to OpenSemaphore() */
251 virtual DWORD OpenSemaphore (PHMHANDLEDATA pHMHandleData,
252 BOOL fInheritHandle,
253 LPCSTR lpszSemaphoreName);
254
255 /* this is a handle method for calls to ReleaseSemaphore() */
256 virtual BOOL ReleaseSemaphore(PHMHANDLEDATA pHMHandleData,
257 LONG cReleaseCount,
258 LPLONG lpPreviousCount);
259
260 /* this is a handler method for calls to CreateFileMapping() */
261 virtual DWORD CreateFileMapping (PHMHANDLEDATA pHMHandleData,
262 HANDLE hFile,
263 LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
264 DWORD flProtect,
265 DWORD dwMaximumSizeHigh,
266 DWORD dwMaximumSizeLow,
267 LPCSTR lpName);
268
269 /* this is a handler method for calls to OpenFileMapping() */
270 virtual DWORD OpenFileMapping (PHMHANDLEDATA pHMHandleData,
271 DWORD access, /* [in] Access mode */
272 BOOL fInherit,
273 LPCSTR lpName);
274
275 /* this is a handler method for calls to MapViewOfFileEx() */
276 virtual LPVOID MapViewOfFileEx (PHMHANDLEDATA pHMHandleData,
277 DWORD dwDesiredAccess,
278 DWORD dwFileOffsetHigh,
279 DWORD dwFileOffsetLow,
280 DWORD dwNumberOfBytesToMap,
281 LPVOID lpBaseAddress);
282
283 /* this is a handler method for calls to DeviceIoControl() */
284 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
285 LPVOID lpInBuffer, DWORD nInBufferSize,
286 LPVOID lpOutBuffer, DWORD nOutBufferSize,
287 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
288
289 /* COM ports */
290 virtual BOOL SetupComm(PHMHANDLEDATA pHMHandleData, DWORD dwInQueue, DWORD dwOutQueue);
291
292 virtual BOOL GetCommState(PHMHANDLEDATA pHMHandleData, LPDCB lpdcb);
293
294};
295
296
297/*****************************************************************************
298 * Prototypes *
299 *****************************************************************************/
300
301 /* register a new device with the handle manager */
302DWORD HMDeviceRegister(LPSTR pszDeviceName,
303 HMDeviceHandler *pDeviceHandler);
304
305
306#endif /* _HM_DEVICE_H_ */
307
Note: See TracBrowser for help on using the repository browser.