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

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

semaphore update

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