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

Last change on this file since 21302 was 21302, checked in by ydario, 16 years ago

Kernel32 updates.

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