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

Last change on this file since 9653 was 9653, checked in by sandervl, 23 years ago

implemented Get/SetHandleInformation; CloseHandle change for HANDLE_FLAG_PROTECT_FROM_CLOSE; inheritance support added to DuplicateHandle

File size: 23.0 KB
Line 
1/* $Id: hmdevice.h,v 1.33 2003-01-10 12:57:13 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 DWORD dwHandleInformation; /* Set by SetHandleInformation */
58
59 LPVOID lpHandlerData; /* for private use of the device handler */
60 LPVOID lpDeviceData;
61} HMHANDLEDATA, *PHMHANDLEDATA;
62
63PHMHANDLEDATA HMQueryHandleData(HANDLE handle);
64
65
66class HMDeviceHandler
67{
68 /***************************************************************************
69 * The following methods are called by the handle manager request router. *
70 * They are exact replacements for the corresponding Win32 calls. *
71 ***************************************************************************/
72
73public:
74 LPCSTR lpHMDeviceName; /* a reference to the device name */
75
76 HMDeviceHandler(LPCSTR lpDeviceName); /* constructor with device name */
77
78 //checks if device name belongs to this class
79 virtual BOOL FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength);
80
81 /***********************************
82 * handle generic standard methods *
83 ***********************************/
84
85 /* this is a special internal method to handle non-standard requests */
86 /* such as GetConsoleMode() for console devices */
87 virtual DWORD _DeviceRequest (PHMHANDLEDATA pHMHandleData,
88 ULONG ulRequestCode,
89 ULONG arg1,
90 ULONG arg2,
91 ULONG arg3,
92 ULONG arg4);
93
94 virtual BOOL DuplicateHandle(PHMHANDLEDATA pHMHandleData, HANDLE srcprocess,
95 PHMHANDLEDATA pHMSrcHandle,
96 HANDLE destprocess,
97 PHANDLE desthandle,
98 DWORD fdwAccess,
99 BOOL fInherit,
100 DWORD fdwOptions,
101 DWORD fdwOdinOptions);
102
103 /* this is a handler method for calls to CreateFile() */
104 virtual DWORD CreateFile (LPCSTR lpFileName,
105 PHMHANDLEDATA pHMHandleData,
106 PVOID lpSecurityAttributes,
107 PHMHANDLEDATA pHMHandleDataTemplate);
108
109 /* this is a handler method for calls to OpenFile() */
110 virtual DWORD OpenFile (LPCSTR lpFileName,
111 PHMHANDLEDATA pHMHandleData,
112 OFSTRUCT* pOFStruct,
113 UINT fuMode);
114
115 /* this is a handler method for calls to CloseHandle() */
116 virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData);
117
118 virtual BOOL SetHandleInformation(PHMHANDLEDATA pHMHandleData,
119 DWORD dwMask,
120 DWORD dwFlags);
121
122 /* this is a handler method for calls to ReadFile/Ex */
123 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
124 LPCVOID lpBuffer,
125 DWORD nNumberOfBytesToRead,
126 LPDWORD lpNumberOfBytesRead,
127 LPOVERLAPPED lpOverlapped,
128 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
129
130 /* this is a handler method for calls to WriteFile/Ex */
131 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
132 LPCVOID lpBuffer,
133 DWORD nNumberOfBytesToWrite,
134 LPDWORD lpNumberOfBytesWritten,
135 LPOVERLAPPED lpOverlapped,
136 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
137
138 /* this is a handler method for calls to GetFileType() */
139 virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
140
141
142 /* this is a handler method for calls to GetFileInformationByHandle() */
143 virtual DWORD GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
144 BY_HANDLE_FILE_INFORMATION *pHFI);
145
146 /* this is a handler method for calls to SetEndOfFile() */
147 virtual BOOL SetEndOfFile(PHMHANDLEDATA pHMHandleData);
148
149 /* this is a handler method for calls to SetFileTime() */
150 virtual BOOL SetFileTime (PHMHANDLEDATA pHMHandleData,
151 LPFILETIME pFT1,
152 LPFILETIME pFT2,
153 LPFILETIME pFT3);
154
155 /* this is a handler method for calls to GetFileTime() */
156 virtual BOOL GetFileTime (PHMHANDLEDATA pHMHandleData,
157 LPFILETIME pFT1,
158 LPFILETIME pFT2,
159 LPFILETIME pFT3);
160
161 /* this is a handler method for calls to GetFileSize() */
162 virtual DWORD GetFileSize(PHMHANDLEDATA pHMHandleData,
163 PDWORD pSizeHigh);
164
165 /* this is a handler method for calls to SetFilePointer() */
166 virtual DWORD SetFilePointer(PHMHANDLEDATA pHMHandleData,
167 LONG lDistanceToMove,
168 PLONG lpDistanceToMoveHigh,
169 DWORD dwMoveMethod);
170
171 /* this is a handler method for calls to FlushFileBuffers() */
172 virtual BOOL FlushFileBuffers(PHMHANDLEDATA pHMHandleData);
173
174 /* this is a handler method for calls to GetOverlappedResult() */
175 virtual BOOL GetOverlappedResult (PHMHANDLEDATA pHMHandleData,
176 LPOVERLAPPED lpOverlapped,
177 LPDWORD arg3,
178 BOOL arg4);
179
180 /* this is a handler method for calls to LockFile() */
181 virtual BOOL LockFile(PHMHANDLEDATA pHMHandleData,
182 DWORD arg2,
183 DWORD arg3,
184 DWORD arg4,
185 DWORD arg5);
186
187 /* this is a handler method for calls to LockFileEx() */
188 virtual BOOL LockFileEx(PHMHANDLEDATA pHMHandleData,
189 DWORD dwFlags,
190 DWORD dwReserved,
191 DWORD nNumberOfBytesToLockLow,
192 DWORD nNumberOfBytesToLockHigh,
193 LPOVERLAPPED lpOverlapped);
194
195 /* this is a handler method for calls to UnlockFile() */
196 virtual BOOL UnlockFile(PHMHANDLEDATA pHMHandleData,
197 DWORD arg2,
198 DWORD arg3,
199 DWORD arg4,
200 DWORD arg5);
201
202 /* this is a handler method for calls to UnlockFileEx() */
203 virtual BOOL UnlockFileEx(PHMHANDLEDATA pHMHandleData,
204 DWORD dwReserved,
205 DWORD nNumberOfBytesToLockLow,
206 DWORD nNumberOfBytesToLockHigh,
207 LPOVERLAPPED lpOverlapped);
208
209 /* this is a handler method for calls to WaitForSingleObject */
210 virtual DWORD WaitForSingleObject (PHMHANDLEDATA pHMHandleData,
211 DWORD dwTimeout);
212
213 /* this is a handler method for calls to WaitForSingleObjectEx */
214 virtual DWORD WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
215 DWORD dwTimeout,
216 BOOL fAlertable);
217
218 virtual DWORD MsgWaitForMultipleObjects(PHMHANDLEDATA pHMHandleData,
219 DWORD nCount,
220 PHANDLE pHandles,
221 BOOL fWaitAll,
222 DWORD dwMilliseconds,
223 DWORD dwWakeMask);
224
225 virtual DWORD WaitForMultipleObjects (PHMHANDLEDATA pHMHandleData,
226 DWORD cObjects,
227 PHANDLE lphObjects,
228 BOOL fWaitAll,
229 DWORD dwTimeout);
230
231 /***************************************************************************
232 * Events *
233 ***************************************************************************/
234
235 /* this is a handler method for calls to CreateEvent() */
236 virtual DWORD CreateEvent (PHMHANDLEDATA pHMHandleData,
237 LPSECURITY_ATTRIBUTES lpsa,
238 BOOL fManualReset,
239 BOOL fInitialState,
240 LPCSTR lpszEventName);
241
242 /* this is a handler method for calls to OpenEvent() */
243 virtual DWORD OpenEvent (PHMHANDLEDATA pHMHandleData,
244 BOOL fInheritHandle,
245 LPCSTR lpszEventName);
246
247 /* this is a handle method for calls to ResetEvent() */
248 virtual BOOL ResetEvent (PHMHANDLEDATA pHMHandleData);
249
250 /* this is a handle method for calls to SetEvent() */
251 virtual BOOL SetEvent (PHMHANDLEDATA pHMHandleData);
252
253 /* this is a handle method for calls to PulseEvent() */
254 virtual BOOL PulseEvent (PHMHANDLEDATA pHMHandleData);
255
256
257 /***************************************************************************
258 * Mutex *
259 ***************************************************************************/
260
261 /* this is a handler method for calls to CreateMutex() */
262 virtual DWORD CreateMutex (PHMHANDLEDATA pHMHandleData,
263 LPSECURITY_ATTRIBUTES lpsa,
264 BOOL fInitialOwner,
265 LPCSTR lpszMutexName);
266
267 /* this is a handler method for calls to OpenMutex() */
268 virtual DWORD OpenMutex (PHMHANDLEDATA pHMHandleData,
269 BOOL fInheritHandle,
270 LPCSTR lpszMutexName);
271
272 /* this is a handle method for calls to ReleaseMutex() */
273 virtual BOOL ReleaseMutex(PHMHANDLEDATA pHMHandleData);
274
275
276 /***************************************************************************
277 * Semaphores *
278 ***************************************************************************/
279
280 /* this is a handler method for calls to CreateSemaphore() */
281 virtual DWORD CreateSemaphore (PHMHANDLEDATA pHMHandleData,
282 LPSECURITY_ATTRIBUTES lpsa,
283 LONG lInitialCount,
284 LONG lMaximumCount,
285 LPCSTR lpszSemaphoreName);
286
287 /* this is a handler method for calls to OpenSemaphore() */
288 virtual DWORD OpenSemaphore (PHMHANDLEDATA pHMHandleData,
289 BOOL fInheritHandle,
290 LPCSTR lpszSemaphoreName);
291
292 /* this is a handle method for calls to ReleaseSemaphore() */
293 virtual BOOL ReleaseSemaphore(PHMHANDLEDATA pHMHandleData,
294 LONG cReleaseCount,
295 LPLONG lpPreviousCount);
296
297 /* this is a handler method for calls to CreateFileMapping() */
298 virtual DWORD CreateFileMapping (PHMHANDLEDATA pHMHandleData,
299 HANDLE hFile,
300 LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
301 DWORD flProtect,
302 DWORD dwMaximumSizeHigh,
303 DWORD dwMaximumSizeLow,
304 LPCSTR lpName);
305
306 /* this is a handler method for calls to OpenFileMapping() */
307 virtual DWORD OpenFileMapping (PHMHANDLEDATA pHMHandleData,
308 DWORD access, /* [in] Access mode */
309 BOOL fInherit,
310 LPCSTR lpName);
311
312 /* this is a handler method for calls to MapViewOfFileEx() */
313 virtual LPVOID MapViewOfFileEx (PHMHANDLEDATA pHMHandleData,
314 DWORD dwDesiredAccess,
315 DWORD dwFileOffsetHigh,
316 DWORD dwFileOffsetLow,
317 DWORD dwNumberOfBytesToMap,
318 LPVOID lpBaseAddress);
319
320 /* this is a handler method for calls to DeviceIoControl() */
321 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
322 LPVOID lpInBuffer, DWORD nInBufferSize,
323 LPVOID lpOutBuffer, DWORD nOutBufferSize,
324 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
325
326 virtual BOOL CancelIo (PHMHANDLEDATA pHMHandleData);
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(HANDLE hThread, PHMHANDLEDATA pHMHandleData);
394 virtual DWORD SuspendThread(HANDLE hThread, PHMHANDLEDATA pHMHandleData);
395 virtual BOOL SetThreadPriority(HANDLE hThread, PHMHANDLEDATA pHMHandleData, int priority);
396
397 virtual BOOL GetThreadContext(HANDLE hThread, PHMHANDLEDATA pHMHandleData, PCONTEXT lpContext);
398 virtual BOOL SetThreadContext(HANDLE hThread, PHMHANDLEDATA pHMHandleData, const CONTEXT *lpContext);
399
400 virtual BOOL TerminateThread(HANDLE hThread, PHMHANDLEDATA pHMHandleData, DWORD exitcode);
401 virtual DWORD ResumeThread(HANDLE hThread, PHMHANDLEDATA pHMHandleData);
402 virtual BOOL SetThreadTerminated(HANDLE hThread, PHMHANDLEDATA pHMHandleData);
403
404 virtual BOOL GetExitCodeThread(HANDLE hThread, 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.