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

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

semaphore updates

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