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

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

semaphore updates

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