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

Last change on this file since 7457 was 7457, checked in by sandervl, 24 years ago

preliminary work on overlapped serial comm IO

File size: 23.6 KB
Line 
1/* $Id: hmdevice.h,v 1.30 2001-11-26 14:54:00 sandervl 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#define HMTYPE_PROCESSTOKEN 3
31#define HMTYPE_THREADTOKEN 4
32#define HMTYPE_THREAD 5
33#define HMTYPE_PIPE 6
34#define HMTYPE_EVENTSEM 7
35#define HMTYPE_MUTEXSEM 8
36#define HMTYPE_SEMAPHORE 9
37//.....
38
39/*****************************************************************************
40 * Structures *
41 *****************************************************************************/
42
43typedef struct _HMHANDLEDATA
44{
45 HANDLE hHMHandle; /* a copy of the OS/2 system handle */
46
47 DWORD dwType; /* handle type identifier */
48
49 DWORD dwAccess; /* access mode of the handle */
50 DWORD dwShare; /* share mode of the handle */
51 DWORD dwCreation; /* dwCreationDisposition */
52 DWORD dwFlags; /* flags and attributes */
53
54 DWORD dwUserData;
55 DWORD dwInternalType;
56
57 LPVOID lpHandlerData; /* for private use of the device handler */
58 LPVOID lpDeviceData;
59} HMHANDLEDATA, *PHMHANDLEDATA;
60
61PHMHANDLEDATA HMQueryHandleData(HANDLE handle);
62
63
64class HMDeviceHandler
65{
66 /***************************************************************************
67 * The following methods are called by the handle manager request router. *
68 * They are exact replacements for the corresponding Win32 calls. *
69 ***************************************************************************/
70
71public:
72 LPCSTR lpHMDeviceName; /* a reference to the device name */
73
74 HMDeviceHandler(LPCSTR lpDeviceName); /* constructor with device name */
75
76 //checks if device name belongs to this class
77 virtual BOOL FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength);
78
79 /***********************************
80 * handle generic standard methods *
81 ***********************************/
82
83 /* this is a special internal method to handle non-standard requests */
84 /* such as GetConsoleMode() for console devices */
85 virtual DWORD _DeviceRequest (PHMHANDLEDATA pHMHandleData,
86 ULONG ulRequestCode,
87 ULONG arg1,
88 ULONG arg2,
89 ULONG arg3,
90 ULONG arg4);
91
92 virtual BOOL DuplicateHandle(PHMHANDLEDATA pHMHandleData, HANDLE srcprocess,
93 PHMHANDLEDATA pHMSrcHandle,
94 HANDLE destprocess,
95 PHANDLE desthandle,
96 DWORD fdwAccess,
97 BOOL fInherit,
98 DWORD fdwOptions,
99 DWORD fdwOdinOptions);
100
101 /* this is a handler method for calls to CreateFile() */
102 virtual DWORD CreateFile (HANDLE hHandle,
103 LPCSTR lpFileName,
104 PHMHANDLEDATA pHMHandleData,
105 PVOID lpSecurityAttributes,
106 PHMHANDLEDATA pHMHandleDataTemplate);
107
108 /* this is a handler method for calls to OpenFile() */
109 virtual DWORD OpenFile (HANDLE hHandle,
110 LPCSTR lpFileName,
111 PHMHANDLEDATA pHMHandleData,
112 OFSTRUCT* pOFStruct,
113 UINT fuMode);
114
115 /* this is a handler method for calls to CloseHandle() */
116 virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData);
117
118 /* this is a handler method for calls to ReadFile() */
119 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
120 LPCVOID lpBuffer,
121 DWORD nNumberOfBytesToRead,
122 LPDWORD lpNumberOfBytesRead,
123 LPOVERLAPPED lpOverlapped);
124
125 /* this is a handler method for calls to ReadFileEx() */
126 virtual BOOL ReadFileEx(PHMHANDLEDATA pHMHandleData,
127 LPVOID lpBuffer,
128 DWORD nNumberOfBytesToRead,
129 LPOVERLAPPED lpOverlapped,
130 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
131
132 /* this is a handler method for calls to WriteFile() */
133 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
134 LPCVOID lpBuffer,
135 DWORD nNumberOfBytesToWrite,
136 LPDWORD lpNumberOfBytesWritten,
137 LPOVERLAPPED lpOverlapped);
138
139 /* this is a handler method for calls to WriteFileEx() */
140 virtual BOOL WriteFileEx(PHMHANDLEDATA pHMHandleData,
141 LPVOID lpBuffer,
142 DWORD nNumberOfBytesToWrite,
143 LPOVERLAPPED lpOverlapped,
144 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
145
146 /* this is a handler method for calls to GetFileType() */
147 virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
148
149
150 /* this is a handler method for calls to GetFileInformationByHandle() */
151 virtual DWORD GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
152 BY_HANDLE_FILE_INFORMATION *pHFI);
153
154 /* this is a handler method for calls to SetEndOfFile() */
155 virtual BOOL SetEndOfFile(PHMHANDLEDATA pHMHandleData);
156
157 /* this is a handler method for calls to SetFileTime() */
158 virtual BOOL SetFileTime (PHMHANDLEDATA pHMHandleData,
159 LPFILETIME pFT1,
160 LPFILETIME pFT2,
161 LPFILETIME pFT3);
162
163 /* this is a handler method for calls to GetFileTime() */
164 virtual BOOL GetFileTime (PHMHANDLEDATA pHMHandleData,
165 LPFILETIME pFT1,
166 LPFILETIME pFT2,
167 LPFILETIME pFT3);
168
169 /* this is a handler method for calls to GetFileSize() */
170 virtual DWORD GetFileSize(PHMHANDLEDATA pHMHandleData,
171 PDWORD pSizeHigh);
172
173 /* this is a handler method for calls to SetFilePointer() */
174 virtual DWORD SetFilePointer(PHMHANDLEDATA pHMHandleData,
175 LONG lDistanceToMove,
176 PLONG lpDistanceToMoveHigh,
177 DWORD dwMoveMethod);
178
179 /* this is a handler method for calls to FlushFileBuffers() */
180 virtual BOOL FlushFileBuffers(PHMHANDLEDATA pHMHandleData);
181
182 /* this is a handler method for calls to GetOverlappedResult() */
183 virtual BOOL GetOverlappedResult (PHMHANDLEDATA pHMHandleData,
184 LPOVERLAPPED lpOverlapped,
185 LPDWORD arg3,
186 BOOL arg4);
187
188 /* this is a handler method for calls to LockFile() */
189 virtual BOOL LockFile(PHMHANDLEDATA pHMHandleData,
190 DWORD arg2,
191 DWORD arg3,
192 DWORD arg4,
193 DWORD arg5);
194
195 /* this is a handler method for calls to LockFileEx() */
196 virtual BOOL LockFileEx(PHMHANDLEDATA pHMHandleData,
197 DWORD dwFlags,
198 DWORD dwReserved,
199 DWORD nNumberOfBytesToLockLow,
200 DWORD nNumberOfBytesToLockHigh,
201 LPOVERLAPPED lpOverlapped);
202
203 /* this is a handler method for calls to UnlockFile() */
204 virtual BOOL UnlockFile(PHMHANDLEDATA pHMHandleData,
205 DWORD arg2,
206 DWORD arg3,
207 DWORD arg4,
208 DWORD arg5);
209
210 /* this is a handler method for calls to UnlockFileEx() */
211 virtual BOOL UnlockFileEx(PHMHANDLEDATA pHMHandleData,
212 DWORD dwReserved,
213 DWORD nNumberOfBytesToLockLow,
214 DWORD nNumberOfBytesToLockHigh,
215 LPOVERLAPPED lpOverlapped);
216
217 /* this is a handler method for calls to WaitForSingleObject */
218 virtual DWORD WaitForSingleObject (PHMHANDLEDATA pHMHandleData,
219 DWORD dwTimeout);
220
221 /* this is a handler method for calls to WaitForSingleObjectEx */
222 virtual DWORD WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
223 DWORD dwTimeout,
224 BOOL fAlertable);
225
226 virtual DWORD MsgWaitForMultipleObjects(PHMHANDLEDATA pHMHandleData,
227 DWORD nCount,
228 PHANDLE pHandles,
229 BOOL fWaitAll,
230 DWORD dwMilliseconds,
231 DWORD dwWakeMask);
232
233 virtual DWORD WaitForMultipleObjects (PHMHANDLEDATA pHMHandleData,
234 DWORD cObjects,
235 PHANDLE lphObjects,
236 BOOL fWaitAll,
237 DWORD dwTimeout);
238
239 /***************************************************************************
240 * Events *
241 ***************************************************************************/
242
243 /* this is a handler method for calls to CreateEvent() */
244 virtual DWORD CreateEvent (PHMHANDLEDATA pHMHandleData,
245 LPSECURITY_ATTRIBUTES lpsa,
246 BOOL fManualReset,
247 BOOL fInitialState,
248 LPCSTR lpszEventName);
249
250 /* this is a handler method for calls to OpenEvent() */
251 virtual DWORD OpenEvent (PHMHANDLEDATA pHMHandleData,
252 BOOL fInheritHandle,
253 LPCSTR lpszEventName);
254
255 /* this is a handle method for calls to ResetEvent() */
256 virtual BOOL ResetEvent (PHMHANDLEDATA pHMHandleData);
257
258 /* this is a handle method for calls to SetEvent() */
259 virtual BOOL SetEvent (PHMHANDLEDATA pHMHandleData);
260
261 /* this is a handle method for calls to PulseEvent() */
262 virtual BOOL PulseEvent (PHMHANDLEDATA pHMHandleData);
263
264
265 /***************************************************************************
266 * Mutex *
267 ***************************************************************************/
268
269 /* this is a handler method for calls to CreateMutex() */
270 virtual DWORD CreateMutex (PHMHANDLEDATA pHMHandleData,
271 LPSECURITY_ATTRIBUTES lpsa,
272 BOOL fInitialOwner,
273 LPCSTR lpszMutexName);
274
275 /* this is a handler method for calls to OpenMutex() */
276 virtual DWORD OpenMutex (PHMHANDLEDATA pHMHandleData,
277 BOOL fInheritHandle,
278 LPCSTR lpszMutexName);
279
280 /* this is a handle method for calls to ReleaseMutex() */
281 virtual BOOL ReleaseMutex(PHMHANDLEDATA pHMHandleData);
282
283
284 /***************************************************************************
285 * Semaphores *
286 ***************************************************************************/
287
288 /* this is a handler method for calls to CreateSemaphore() */
289 virtual DWORD CreateSemaphore (PHMHANDLEDATA pHMHandleData,
290 LPSECURITY_ATTRIBUTES lpsa,
291 LONG lInitialCount,
292 LONG lMaximumCount,
293 LPCSTR lpszSemaphoreName);
294
295 /* this is a handler method for calls to OpenSemaphore() */
296 virtual DWORD OpenSemaphore (PHMHANDLEDATA pHMHandleData,
297 BOOL fInheritHandle,
298 LPCSTR lpszSemaphoreName);
299
300 /* this is a handle method for calls to ReleaseSemaphore() */
301 virtual BOOL ReleaseSemaphore(PHMHANDLEDATA pHMHandleData,
302 LONG cReleaseCount,
303 LPLONG lpPreviousCount);
304
305 /* this is a handler method for calls to CreateFileMapping() */
306 virtual DWORD CreateFileMapping (PHMHANDLEDATA pHMHandleData,
307 HANDLE hFile,
308 LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
309 DWORD flProtect,
310 DWORD dwMaximumSizeHigh,
311 DWORD dwMaximumSizeLow,
312 LPCSTR lpName);
313
314 /* this is a handler method for calls to OpenFileMapping() */
315 virtual DWORD OpenFileMapping (PHMHANDLEDATA pHMHandleData,
316 DWORD access, /* [in] Access mode */
317 BOOL fInherit,
318 LPCSTR lpName);
319
320 /* this is a handler method for calls to MapViewOfFileEx() */
321 virtual LPVOID MapViewOfFileEx (PHMHANDLEDATA pHMHandleData,
322 DWORD dwDesiredAccess,
323 DWORD dwFileOffsetHigh,
324 DWORD dwFileOffsetLow,
325 DWORD dwNumberOfBytesToMap,
326 LPVOID lpBaseAddress);
327
328 /* this is a handler method for calls to DeviceIoControl() */
329 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
330 LPVOID lpInBuffer, DWORD nInBufferSize,
331 LPVOID lpOutBuffer, DWORD nOutBufferSize,
332 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
333
334 virtual BOOL CancelIo (PHMHANDLEDATA pHMHandleData);
335
336 /* COM ports */
337 virtual BOOL SetupComm( PHMHANDLEDATA pHMHandleData,
338 DWORD dwInQueue,
339 DWORD dwOutQueue);
340
341 virtual BOOL GetCommState( PHMHANDLEDATA pHMHandleData,
342 LPDCB lpdcb);
343 virtual BOOL WaitCommEvent( PHMHANDLEDATA pHMHandleData,
344 LPDWORD lpfdwEvtMask,
345 LPOVERLAPPED lpo);
346
347 virtual BOOL GetCommProperties( PHMHANDLEDATA pHMHandleData,
348 LPCOMMPROP lpcmmp);
349 virtual BOOL GetCommMask( PHMHANDLEDATA pHMHandleData,
350 LPDWORD lpfdwEvtMask);
351 virtual BOOL SetCommMask( PHMHANDLEDATA pHMHandleData,
352 DWORD fdwEvtMask);
353 virtual BOOL PurgeComm( PHMHANDLEDATA pHMHandleData,
354 DWORD fdwAction);
355 virtual BOOL ClearCommError( PHMHANDLEDATA pHMHandleData,
356 LPDWORD lpdwErrors,
357 LPCOMSTAT lpcst);
358 virtual BOOL SetCommState( PHMHANDLEDATA pHMHandleData,
359 LPDCB lpdcb) ;
360 virtual BOOL GetCommModemStatus( PHMHANDLEDATA pHMHandleData,
361 LPDWORD lpModemStat );
362 virtual BOOL GetCommTimeouts( PHMHANDLEDATA pHMHandleData,
363 LPCOMMTIMEOUTS lpctmo);
364 virtual BOOL SetCommTimeouts( PHMHANDLEDATA pHMHandleData,
365 LPCOMMTIMEOUTS lpctmo);
366 virtual BOOL TransmitCommChar( PHMHANDLEDATA pHMHandleData,
367 CHAR cChar );
368 virtual BOOL SetCommConfig( PHMHANDLEDATA pHMHandleData,
369 LPCOMMCONFIG lpCC,
370 DWORD dwSize );
371 virtual BOOL SetCommBreak( PHMHANDLEDATA pHMHandleData );
372 virtual BOOL GetCommConfig( PHMHANDLEDATA pHMHandleData,
373 LPCOMMCONFIG lpCC,
374 LPDWORD lpdwSize );
375 virtual BOOL EscapeCommFunction( PHMHANDLEDATA pHMHandleData,
376 UINT dwFunc );
377 virtual BOOL ClearCommBreak( PHMHANDLEDATA pHMHandleData);
378 virtual BOOL SetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
379 LPCOMMCONFIG lpCC,
380 DWORD dwSize);
381 virtual BOOL GetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
382 LPCOMMCONFIG lpCC,
383 LPDWORD lpdwSize);
384
385 virtual DWORD OpenThreadToken(PHMHANDLEDATA pHMHandleData,
386 HANDLE ThreadHandle,
387 BOOL OpenAsSelf);
388
389 virtual DWORD OpenProcessToken(PHMHANDLEDATA pHMHandleData, DWORD dwUserData,
390 HANDLE ProcessHandle);
391
392 virtual HANDLE CreateThread(PHMHANDLEDATA pHMHandleData,
393 LPSECURITY_ATTRIBUTES lpsa,
394 DWORD cbStack,
395 LPTHREAD_START_ROUTINE lpStartAddr,
396 LPVOID lpvThreadParm,
397 DWORD fdwCreate,
398 LPDWORD lpIDThread,
399 BOOL fFirstThread);
400
401 virtual INT GetThreadPriority(PHMHANDLEDATA pHMHandleData);
402 virtual DWORD SuspendThread(PHMHANDLEDATA pHMHandleData);
403 virtual BOOL SetThreadPriority(PHMHANDLEDATA pHMHandleData, int priority);
404
405 virtual BOOL GetThreadContext(PHMHANDLEDATA pHMHandleData, PCONTEXT lpContext);
406 virtual BOOL SetThreadContext(PHMHANDLEDATA pHMHandleData, const CONTEXT *lpContext);
407
408 virtual BOOL TerminateThread(PHMHANDLEDATA pHMHandleData, DWORD exitcode);
409 virtual DWORD ResumeThread(PHMHANDLEDATA pHMHandleData);
410 virtual BOOL SetThreadTerminated(PHMHANDLEDATA pHMHandleData);
411
412 virtual BOOL GetExitCodeThread(PHMHANDLEDATA pHMHandleData, LPDWORD lpExitCode);
413
414 /* Named pipes */
415 virtual BOOL PeekNamedPipe(PHMHANDLEDATA pHMHandleData,
416 LPVOID lpvBuffer,
417 DWORD cbBuffer,
418 LPDWORD lpcbRead,
419 LPDWORD lpcbAvail,
420 LPDWORD lpcbMessage);
421
422 virtual DWORD CreateNamedPipe(PHMHANDLEDATA pHMHandleData, LPCTSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode,
423 DWORD nMaxInstances, DWORD nOutBufferSize,
424 DWORD nInBufferSize, DWORD nDefaultTimeOut,
425 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
426
427 virtual BOOL ConnectNamedPipe(PHMHANDLEDATA pHMHandleData, LPOVERLAPPED lpOverlapped);
428
429 virtual BOOL DisconnectNamedPipe(PHMHANDLEDATA pHMHandleData);
430
431 virtual BOOL GetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
432 LPDWORD lpState,
433 LPDWORD lpCurInstances,
434 LPDWORD lpMaxCollectionCount,
435 LPDWORD lpCollectDataTimeout,
436 LPTSTR lpUserName,
437 DWORD nMaxUserNameSize);
438
439 virtual BOOL GetNamedPipeInfo(PHMHANDLEDATA pHMHandleData,
440 LPDWORD lpFlags,
441 LPDWORD lpOutBufferSize,
442 LPDWORD lpInBufferSize,
443 LPDWORD lpMaxInstances);
444
445
446 virtual DWORD TransactNamedPipe(PHMHANDLEDATA pHMHandleData,
447 LPVOID lpvWriteBuf,
448 DWORD cbWriteBuf,
449 LPVOID lpvReadBuf,
450 DWORD cbReadBuf,
451 LPDWORD lpcbRead,
452 LPOVERLAPPED lpo);
453
454 virtual BOOL SetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
455 LPDWORD lpdwMode,
456 LPDWORD lpcbMaxCollect,
457 LPDWORD lpdwCollectDataTimeout);
458
459 virtual BOOL CreatePipe(PHMHANDLEDATA pHMHandleDataRead,
460 PHMHANDLEDATA pHMHandleDataWrite,
461 LPSECURITY_ATTRIBUTES lpsa,
462 DWORD cbPipe);
463
464 virtual BOOL GetMailslotInfo(PHMHANDLEDATA pHMHandleData,
465 LPDWORD lpMaxMessageSize,
466 LPDWORD lpNextSize,
467 LPDWORD lpMessageCount,
468 LPDWORD lpReadTimeout);
469
470 virtual BOOL SetMailslotInfo(PHMHANDLEDATA pHMHandleData,
471 DWORD dwReadTimeout);
472};
473
474
475/*****************************************************************************
476 * Prototypes *
477 *****************************************************************************/
478
479 /* register a new device with the handle manager */
480DWORD HMDeviceRegister(LPSTR pszDeviceName,
481 HMDeviceHandler *pDeviceHandler);
482
483DWORD HMDeviceRegisterEx(LPSTR pszDeviceName,
484 HMDeviceHandler *pDeviceHandler,
485 VOID *pDevData);
486
487#endif /* _HM_DEVICE_H_ */
488
Note: See TracBrowser for help on using the repository browser.