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

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

preliminary changes for new overlapped io framework

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