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

Last change on this file since 4285 was 4285, checked in by hugh, 25 years ago

Implemented Serial APIs

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