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

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

added mailslot implemenation, named pipe fixes + FreeLibraryAndExitThread

File size: 22.6 KB
Line 
1/* $Id: hmdevice.h,v 1.26 2001-04-26 13:22:44 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
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
296 /* this is a handler method for calls to OpenFileMapping() */
297 virtual DWORD OpenFileMapping (PHMHANDLEDATA pHMHandleData,
298 DWORD access, /* [in] Access mode */
299 BOOL fInherit,
300 LPCSTR lpName);
301
302 /* this is a handler method for calls to MapViewOfFileEx() */
303 virtual LPVOID MapViewOfFileEx (PHMHANDLEDATA pHMHandleData,
304 DWORD dwDesiredAccess,
305 DWORD dwFileOffsetHigh,
306 DWORD dwFileOffsetLow,
307 DWORD dwNumberOfBytesToMap,
308 LPVOID lpBaseAddress);
309
310 /* this is a handler method for calls to DeviceIoControl() */
311 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
312 LPVOID lpInBuffer, DWORD nInBufferSize,
313 LPVOID lpOutBuffer, DWORD nOutBufferSize,
314 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
315
316 /* COM ports */
317 virtual BOOL SetupComm( PHMHANDLEDATA pHMHandleData,
318 DWORD dwInQueue,
319 DWORD dwOutQueue);
320
321 virtual BOOL GetCommState( PHMHANDLEDATA pHMHandleData,
322 LPDCB lpdcb);
323 virtual BOOL WaitCommEvent( PHMHANDLEDATA pHMHandleData,
324 LPDWORD lpfdwEvtMask,
325 LPOVERLAPPED lpo);
326
327 virtual BOOL GetCommProperties( PHMHANDLEDATA pHMHandleData,
328 LPCOMMPROP lpcmmp);
329 virtual BOOL GetCommMask( PHMHANDLEDATA pHMHandleData,
330 LPDWORD lpfdwEvtMask);
331 virtual BOOL SetCommMask( PHMHANDLEDATA pHMHandleData,
332 DWORD fdwEvtMask);
333 virtual BOOL PurgeComm( PHMHANDLEDATA pHMHandleData,
334 DWORD fdwAction);
335 virtual BOOL ClearCommError( PHMHANDLEDATA pHMHandleData,
336 LPDWORD lpdwErrors,
337 LPCOMSTAT lpcst);
338 virtual BOOL SetCommState( PHMHANDLEDATA pHMHandleData,
339 LPDCB lpdcb) ;
340 virtual BOOL GetCommModemStatus( PHMHANDLEDATA pHMHandleData,
341 LPDWORD lpModemStat );
342 virtual BOOL GetCommTimeouts( PHMHANDLEDATA pHMHandleData,
343 LPCOMMTIMEOUTS lpctmo);
344 virtual BOOL SetCommTimeouts( PHMHANDLEDATA pHMHandleData,
345 LPCOMMTIMEOUTS lpctmo);
346 virtual BOOL TransmitCommChar( PHMHANDLEDATA pHMHandleData,
347 CHAR cChar );
348 virtual BOOL SetCommConfig( PHMHANDLEDATA pHMHandleData,
349 LPCOMMCONFIG lpCC,
350 DWORD dwSize );
351 virtual BOOL SetCommBreak( PHMHANDLEDATA pHMHandleData );
352 virtual BOOL GetCommConfig( PHMHANDLEDATA pHMHandleData,
353 LPCOMMCONFIG lpCC,
354 LPDWORD lpdwSize );
355 virtual BOOL EscapeCommFunction( PHMHANDLEDATA pHMHandleData,
356 UINT dwFunc );
357 virtual BOOL ClearCommBreak( PHMHANDLEDATA pHMHandleData);
358 virtual BOOL SetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
359 LPCOMMCONFIG lpCC,
360 DWORD dwSize);
361 virtual BOOL GetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
362 LPCOMMCONFIG lpCC,
363 LPDWORD lpdwSize);
364
365 virtual DWORD OpenThreadToken(PHMHANDLEDATA pHMHandleData,
366 HANDLE ThreadHandle,
367 BOOL OpenAsSelf);
368
369 virtual DWORD OpenProcessToken(PHMHANDLEDATA pHMHandleData, DWORD dwUserData,
370 HANDLE ProcessHandle);
371
372 virtual HANDLE CreateThread(PHMHANDLEDATA pHMHandleData,
373 LPSECURITY_ATTRIBUTES lpsa,
374 DWORD cbStack,
375 LPTHREAD_START_ROUTINE lpStartAddr,
376 LPVOID lpvThreadParm,
377 DWORD fdwCreate,
378 LPDWORD lpIDThread,
379 BOOL fFirstThread);
380
381 virtual INT GetThreadPriority(PHMHANDLEDATA pHMHandleData);
382 virtual DWORD SuspendThread(PHMHANDLEDATA pHMHandleData);
383 virtual BOOL SetThreadPriority(PHMHANDLEDATA pHMHandleData, int priority);
384
385 virtual BOOL GetThreadContext(PHMHANDLEDATA pHMHandleData, PCONTEXT lpContext);
386 virtual BOOL SetThreadContext(PHMHANDLEDATA pHMHandleData, const CONTEXT *lpContext);
387
388 virtual BOOL TerminateThread(PHMHANDLEDATA pHMHandleData, DWORD exitcode);
389 virtual DWORD ResumeThread(PHMHANDLEDATA pHMHandleData);
390 virtual BOOL SetThreadTerminated(PHMHANDLEDATA pHMHandleData);
391
392 virtual BOOL GetExitCodeThread(PHMHANDLEDATA pHMHandleData, LPDWORD lpExitCode);
393
394 /* Named pipes */
395 virtual BOOL PeekNamedPipe(PHMHANDLEDATA pHMHandleData,
396 LPVOID lpvBuffer,
397 DWORD cbBuffer,
398 LPDWORD lpcbRead,
399 LPDWORD lpcbAvail,
400 LPDWORD lpcbMessage);
401
402 virtual DWORD CreateNamedPipe(PHMHANDLEDATA pHMHandleData, LPCTSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode,
403 DWORD nMaxInstances, DWORD nOutBufferSize,
404 DWORD nInBufferSize, DWORD nDefaultTimeOut,
405 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
406
407 virtual BOOL ConnectNamedPipe(PHMHANDLEDATA pHMHandleData, LPOVERLAPPED lpOverlapped);
408
409 virtual BOOL DisconnectNamedPipe(PHMHANDLEDATA pHMHandleData);
410
411 virtual BOOL GetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
412 LPDWORD lpState,
413 LPDWORD lpCurInstances,
414 LPDWORD lpMaxCollectionCount,
415 LPDWORD lpCollectDataTimeout,
416 LPTSTR lpUserName,
417 DWORD nMaxUserNameSize);
418
419 virtual BOOL GetNamedPipeInfo(PHMHANDLEDATA pHMHandleData,
420 LPDWORD lpFlags,
421 LPDWORD lpOutBufferSize,
422 LPDWORD lpInBufferSize,
423 LPDWORD lpMaxInstances);
424
425
426 virtual DWORD TransactNamedPipe(PHMHANDLEDATA pHMHandleData,
427 LPVOID lpvWriteBuf,
428 DWORD cbWriteBuf,
429 LPVOID lpvReadBuf,
430 DWORD cbReadBuf,
431 LPDWORD lpcbRead,
432 LPOVERLAPPED lpo);
433
434 virtual BOOL SetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
435 LPDWORD lpdwMode,
436 LPDWORD lpcbMaxCollect,
437 LPDWORD lpdwCollectDataTimeout);
438
439 virtual BOOL CreatePipe(PHMHANDLEDATA pHMHandleDataRead,
440 PHMHANDLEDATA pHMHandleDataWrite,
441 LPSECURITY_ATTRIBUTES lpsa,
442 DWORD cbPipe);
443
444 virtual BOOL GetMailslotInfo(PHMHANDLEDATA pHMHandleData,
445 LPDWORD lpMaxMessageSize,
446 LPDWORD lpNextSize,
447 LPDWORD lpMessageCount,
448 LPDWORD lpReadTimeout);
449
450 virtual BOOL SetMailslotInfo(PHMHANDLEDATA pHMHandleData,
451 DWORD dwReadTimeout);
452};
453
454
455/*****************************************************************************
456 * Prototypes *
457 *****************************************************************************/
458
459 /* register a new device with the handle manager */
460DWORD HMDeviceRegister(LPSTR pszDeviceName,
461 HMDeviceHandler *pDeviceHandler);
462
463DWORD HMDeviceRegisterEx(LPSTR pszDeviceName,
464 HMDeviceHandler *pDeviceHandler,
465 VOID *pDevData);
466
467#endif /* _HM_DEVICE_H_ */
468
Note: See TracBrowser for help on using the repository browser.