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

Last change on this file since 4606 was 4588, checked in by sandervl, 25 years ago

Handlemanager fix (MN), changes for device name lookup, com bugfix (error check) + com class now called for COMx: names

File size: 22.3 KB
Line 
1/* $Id: hmdevice.h,v 1.24 2000-11-14 14:27:01 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 DWORD 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
221 /***************************************************************************
222 * Events *
223 ***************************************************************************/
224
225 /* this is a handler method for calls to CreateEvent() */
226 virtual DWORD CreateEvent (PHMHANDLEDATA pHMHandleData,
227 LPSECURITY_ATTRIBUTES lpsa,
228 BOOL fManualReset,
229 BOOL fInitialState,
230 LPCSTR lpszEventName);
231
232 /* this is a handler method for calls to OpenEvent() */
233 virtual DWORD OpenEvent (PHMHANDLEDATA pHMHandleData,
234 BOOL fInheritHandle,
235 LPCSTR lpszEventName);
236
237 /* this is a handle method for calls to ResetEvent() */
238 virtual BOOL ResetEvent (PHMHANDLEDATA pHMHandleData);
239
240 /* this is a handle method for calls to SetEvent() */
241 virtual BOOL SetEvent (PHMHANDLEDATA pHMHandleData);
242
243 /* this is a handle method for calls to PulseEvent() */
244 virtual BOOL PulseEvent (PHMHANDLEDATA pHMHandleData);
245
246
247 /***************************************************************************
248 * Mutex *
249 ***************************************************************************/
250
251 /* this is a handler method for calls to CreateMutex() */
252 virtual DWORD CreateMutex (PHMHANDLEDATA pHMHandleData,
253 LPSECURITY_ATTRIBUTES lpsa,
254 BOOL fInitialOwner,
255 LPCSTR lpszMutexName);
256
257 /* this is a handler method for calls to OpenMutex() */
258 virtual DWORD OpenMutex (PHMHANDLEDATA pHMHandleData,
259 BOOL fInheritHandle,
260 LPCSTR lpszMutexName);
261
262 /* this is a handle method for calls to ReleaseMutex() */
263 virtual BOOL ReleaseMutex(PHMHANDLEDATA pHMHandleData);
264
265
266 /***************************************************************************
267 * Semaphores *
268 ***************************************************************************/
269
270 /* this is a handler method for calls to CreateSemaphore() */
271 virtual DWORD CreateSemaphore (PHMHANDLEDATA pHMHandleData,
272 LPSECURITY_ATTRIBUTES lpsa,
273 LONG lInitialCount,
274 LONG lMaximumCount,
275 LPCSTR lpszSemaphoreName);
276
277 /* this is a handler method for calls to OpenSemaphore() */
278 virtual DWORD OpenSemaphore (PHMHANDLEDATA pHMHandleData,
279 BOOL fInheritHandle,
280 LPCSTR lpszSemaphoreName);
281
282 /* this is a handle method for calls to ReleaseSemaphore() */
283 virtual BOOL ReleaseSemaphore(PHMHANDLEDATA pHMHandleData,
284 LONG cReleaseCount,
285 LPLONG lpPreviousCount);
286
287 /* this is a handler method for calls to CreateFileMapping() */
288 virtual DWORD CreateFileMapping (PHMHANDLEDATA pHMHandleData,
289 HANDLE hFile,
290 LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
291 DWORD flProtect,
292 DWORD dwMaximumSizeHigh,
293 DWORD dwMaximumSizeLow,
294 LPCSTR lpName,
295 HFILE *hOldMap);
296
297 /* this is a handler method for calls to OpenFileMapping() */
298 virtual DWORD OpenFileMapping (PHMHANDLEDATA pHMHandleData,
299 DWORD access, /* [in] Access mode */
300 BOOL fInherit,
301 LPCSTR lpName);
302
303 /* this is a handler method for calls to MapViewOfFileEx() */
304 virtual LPVOID MapViewOfFileEx (PHMHANDLEDATA pHMHandleData,
305 DWORD dwDesiredAccess,
306 DWORD dwFileOffsetHigh,
307 DWORD dwFileOffsetLow,
308 DWORD dwNumberOfBytesToMap,
309 LPVOID lpBaseAddress);
310
311 /* this is a handler method for calls to DeviceIoControl() */
312 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
313 LPVOID lpInBuffer, DWORD nInBufferSize,
314 LPVOID lpOutBuffer, DWORD nOutBufferSize,
315 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
316
317 /* COM ports */
318 virtual BOOL SetupComm( PHMHANDLEDATA pHMHandleData,
319 DWORD dwInQueue,
320 DWORD dwOutQueue);
321
322 virtual BOOL GetCommState( PHMHANDLEDATA pHMHandleData,
323 LPDCB lpdcb);
324 virtual BOOL WaitCommEvent( PHMHANDLEDATA pHMHandleData,
325 LPDWORD lpfdwEvtMask,
326 LPOVERLAPPED lpo);
327
328 virtual BOOL GetCommProperties( PHMHANDLEDATA pHMHandleData,
329 LPCOMMPROP lpcmmp);
330 virtual BOOL GetCommMask( PHMHANDLEDATA pHMHandleData,
331 LPDWORD lpfdwEvtMask);
332 virtual BOOL SetCommMask( PHMHANDLEDATA pHMHandleData,
333 DWORD fdwEvtMask);
334 virtual BOOL PurgeComm( PHMHANDLEDATA pHMHandleData,
335 DWORD fdwAction);
336 virtual BOOL ClearCommError( PHMHANDLEDATA pHMHandleData,
337 LPDWORD lpdwErrors,
338 LPCOMSTAT lpcst);
339 virtual BOOL SetCommState( PHMHANDLEDATA pHMHandleData,
340 LPDCB lpdcb) ;
341 virtual BOOL GetCommModemStatus( PHMHANDLEDATA pHMHandleData,
342 LPDWORD lpModemStat );
343 virtual BOOL GetCommTimeouts( PHMHANDLEDATA pHMHandleData,
344 LPCOMMTIMEOUTS lpctmo);
345 virtual BOOL SetCommTimeouts( PHMHANDLEDATA pHMHandleData,
346 LPCOMMTIMEOUTS lpctmo);
347 virtual BOOL TransmitCommChar( PHMHANDLEDATA pHMHandleData,
348 CHAR cChar );
349 virtual BOOL SetCommConfig( PHMHANDLEDATA pHMHandleData,
350 LPCOMMCONFIG lpCC,
351 DWORD dwSize );
352 virtual BOOL SetCommBreak( PHMHANDLEDATA pHMHandleData );
353 virtual BOOL GetCommConfig( PHMHANDLEDATA pHMHandleData,
354 LPCOMMCONFIG lpCC,
355 LPDWORD lpdwSize );
356 virtual BOOL EscapeCommFunction( PHMHANDLEDATA pHMHandleData,
357 UINT dwFunc );
358 virtual BOOL ClearCommBreak( PHMHANDLEDATA pHMHandleData);
359 virtual BOOL SetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
360 LPCOMMCONFIG lpCC,
361 DWORD dwSize);
362 virtual BOOL GetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
363 LPCOMMCONFIG lpCC,
364 LPDWORD lpdwSize);
365
366 virtual DWORD OpenThreadToken(PHMHANDLEDATA pHMHandleData,
367 HANDLE ThreadHandle,
368 BOOL OpenAsSelf);
369
370 virtual DWORD OpenProcessToken(PHMHANDLEDATA pHMHandleData, DWORD dwUserData,
371 HANDLE ProcessHandle);
372
373 virtual HANDLE CreateThread(PHMHANDLEDATA pHMHandleData,
374 LPSECURITY_ATTRIBUTES lpsa,
375 DWORD cbStack,
376 LPTHREAD_START_ROUTINE lpStartAddr,
377 LPVOID lpvThreadParm,
378 DWORD fdwCreate,
379 LPDWORD lpIDThread,
380 BOOL fFirstThread);
381
382 virtual INT GetThreadPriority(PHMHANDLEDATA pHMHandleData);
383 virtual DWORD SuspendThread(PHMHANDLEDATA pHMHandleData);
384 virtual BOOL SetThreadPriority(PHMHANDLEDATA pHMHandleData, int priority);
385
386 virtual BOOL GetThreadContext(PHMHANDLEDATA pHMHandleData, PCONTEXT lpContext);
387 virtual BOOL SetThreadContext(PHMHANDLEDATA pHMHandleData, const CONTEXT *lpContext);
388
389 virtual BOOL TerminateThread(PHMHANDLEDATA pHMHandleData, DWORD exitcode);
390 virtual DWORD ResumeThread(PHMHANDLEDATA pHMHandleData);
391 virtual BOOL SetThreadTerminated(PHMHANDLEDATA pHMHandleData);
392
393 virtual BOOL GetExitCodeThread(PHMHANDLEDATA pHMHandleData, LPDWORD lpExitCode);
394
395 /* Named pipes */
396 virtual BOOL PeekNamedPipe(PHMHANDLEDATA pHMHandleData,
397 LPVOID lpvBuffer,
398 DWORD cbBuffer,
399 LPDWORD lpcbRead,
400 LPDWORD lpcbAvail,
401 LPDWORD lpcbMessage);
402
403 virtual DWORD CreateNamedPipe(PHMHANDLEDATA pHMHandleData, LPCTSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode,
404 DWORD nMaxInstances, DWORD nOutBufferSize,
405 DWORD nInBufferSize, DWORD nDefaultTimeOut,
406 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
407
408 virtual BOOL ConnectNamedPipe(PHMHANDLEDATA pHMHandleData, LPOVERLAPPED lpOverlapped);
409
410 virtual BOOL DisconnectNamedPipe(PHMHANDLEDATA pHMHandleData);
411
412 virtual BOOL GetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
413 LPDWORD lpState,
414 LPDWORD lpCurInstances,
415 LPDWORD lpMaxCollectionCount,
416 LPDWORD lpCollectDataTimeout,
417 LPTSTR lpUserName,
418 DWORD nMaxUserNameSize);
419
420 virtual BOOL GetNamedPipeInfo(PHMHANDLEDATA pHMHandleData,
421 LPDWORD lpFlags,
422 LPDWORD lpOutBufferSize,
423 LPDWORD lpInBufferSize,
424 LPDWORD lpMaxInstances);
425
426
427 virtual DWORD TransactNamedPipe(PHMHANDLEDATA pHMHandleData,
428 LPVOID lpvWriteBuf,
429 DWORD cbWriteBuf,
430 LPVOID lpvReadBuf,
431 DWORD cbReadBuf,
432 LPDWORD lpcbRead,
433 LPOVERLAPPED lpo);
434
435 virtual BOOL SetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
436 LPDWORD lpdwMode,
437 LPDWORD lpcbMaxCollect,
438 LPDWORD lpdwCollectDataTimeout);
439
440 virtual BOOL CreatePipe(PHMHANDLEDATA pHMHandleDataRead,
441 PHMHANDLEDATA pHMHandleDataWrite,
442 LPSECURITY_ATTRIBUTES lpsa,
443 DWORD cbPipe);
444
445};
446
447
448/*****************************************************************************
449 * Prototypes *
450 *****************************************************************************/
451
452 /* register a new device with the handle manager */
453DWORD HMDeviceRegister(LPSTR pszDeviceName,
454 HMDeviceHandler *pDeviceHandler);
455
456DWORD HMDeviceRegisterEx(LPSTR pszDeviceName,
457 HMDeviceHandler *pDeviceHandler,
458 VOID *pDevData);
459
460#endif /* _HM_DEVICE_H_ */
461
Note: See TracBrowser for help on using the repository browser.