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

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

mmap + share hack

File size: 19.7 KB
Line 
1/* $Id: hmdevice.h,v 1.22 2000-08-04 21:12:07 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} HMHANDLEDATA, *PHMHANDLEDATA;
56
57
58
59class HMDeviceHandler
60{
61 /***************************************************************************
62 * The following methods are called by the handle manager request router. *
63 * They are exact replacements for the corresponding Win32 calls. *
64 ***************************************************************************/
65
66public:
67 LPCSTR lpHMDeviceName; /* a reference to the device name */
68
69 HMDeviceHandler(LPCSTR lpDeviceName); /* constructor with device name */
70
71 /***********************************
72 * handle generic standard methods *
73 ***********************************/
74
75 /* this is a special internal method to handle non-standard requests */
76 /* such as GetConsoleMode() for console devices */
77 virtual DWORD _DeviceRequest (PHMHANDLEDATA pHMHandleData,
78 ULONG ulRequestCode,
79 ULONG arg1,
80 ULONG arg2,
81 ULONG arg3,
82 ULONG arg4);
83
84 virtual BOOL DuplicateHandle(PHMHANDLEDATA pHMHandleData, HANDLE srcprocess,
85 PHMHANDLEDATA pHMSrcHandle,
86 HANDLE destprocess,
87 PHANDLE desthandle,
88 DWORD fdwAccess,
89 BOOL fInherit,
90 DWORD fdwOptions,
91 DWORD fdwOdinOptions);
92
93 /* this is a handler method for calls to CreateFile() */
94 virtual DWORD CreateFile (LPCSTR lpFileName,
95 PHMHANDLEDATA pHMHandleData,
96 PVOID lpSecurityAttributes,
97 PHMHANDLEDATA pHMHandleDataTemplate);
98
99 /* this is a handler method for calls to OpenFile() */
100 virtual DWORD OpenFile (LPCSTR lpFileName,
101 PHMHANDLEDATA pHMHandleData,
102 OFSTRUCT* pOFStruct,
103 UINT fuMode);
104
105 /* this is a handler method for calls to CloseHandle() */
106 virtual DWORD CloseHandle(PHMHANDLEDATA pHMHandleData);
107
108 /* this is a handler method for calls to ReadFile() */
109 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
110 LPCVOID lpBuffer,
111 DWORD nNumberOfBytesToRead,
112 LPDWORD lpNumberOfBytesRead,
113 LPOVERLAPPED lpOverlapped);
114
115 /* this is a handler method for calls to ReadFileEx() */
116 virtual BOOL ReadFileEx(PHMHANDLEDATA pHMHandleData,
117 LPVOID lpBuffer,
118 DWORD nNumberOfBytesToRead,
119 LPOVERLAPPED lpOverlapped,
120 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
121
122 /* this is a handler method for calls to WriteFile() */
123 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
124 LPCVOID lpBuffer,
125 DWORD nNumberOfBytesToWrite,
126 LPDWORD lpNumberOfBytesWritten,
127 LPOVERLAPPED lpOverlapped);
128
129 /* this is a handler method for calls to WriteFileEx() */
130 virtual BOOL WriteFileEx(PHMHANDLEDATA pHMHandleData,
131 LPVOID lpBuffer,
132 DWORD nNumberOfBytesToWrite,
133 LPOVERLAPPED lpOverlapped,
134 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
135
136 /* this is a handler method for calls to GetFileType() */
137 virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
138
139
140 /* this is a handler method for calls to GetFileInformationByHandle() */
141 virtual DWORD GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
142 BY_HANDLE_FILE_INFORMATION *pHFI);
143
144 /* this is a handler method for calls to SetEndOfFile() */
145 virtual BOOL SetEndOfFile(PHMHANDLEDATA pHMHandleData);
146
147 /* this is a handler method for calls to SetFileTime() */
148 virtual BOOL SetFileTime (PHMHANDLEDATA pHMHandleData,
149 LPFILETIME pFT1,
150 LPFILETIME pFT2,
151 LPFILETIME pFT3);
152
153 /* this is a handler method for calls to GetFileTime() */
154 virtual BOOL GetFileTime (PHMHANDLEDATA pHMHandleData,
155 LPFILETIME pFT1,
156 LPFILETIME pFT2,
157 LPFILETIME pFT3);
158
159 /* this is a handler method for calls to GetFileSize() */
160 virtual DWORD GetFileSize(PHMHANDLEDATA pHMHandleData,
161 PDWORD pSizeHigh);
162
163 /* this is a handler method for calls to SetFilePointer() */
164 virtual DWORD SetFilePointer(PHMHANDLEDATA pHMHandleData,
165 LONG lDistanceToMove,
166 PLONG lpDistanceToMoveHigh,
167 DWORD dwMoveMethod);
168
169 /* this is a handler method for calls to FlushFileBuffers() */
170 virtual BOOL FlushFileBuffers(PHMHANDLEDATA pHMHandleData);
171
172 /* this is a handler method for calls to GetOverlappedResult() */
173 virtual BOOL GetOverlappedResult (PHMHANDLEDATA pHMHandleData,
174 LPOVERLAPPED lpOverlapped,
175 LPDWORD arg3,
176 BOOL arg4);
177
178 /* this is a handler method for calls to LockFile() */
179 virtual BOOL LockFile(PHMHANDLEDATA pHMHandleData,
180 DWORD arg2,
181 DWORD arg3,
182 DWORD arg4,
183 DWORD arg5);
184
185 /* this is a handler method for calls to LockFileEx() */
186 virtual BOOL LockFileEx(PHMHANDLEDATA pHMHandleData,
187 DWORD dwFlags,
188 DWORD dwReserved,
189 DWORD nNumberOfBytesToLockLow,
190 DWORD nNumberOfBytesToLockHigh,
191 LPOVERLAPPED lpOverlapped);
192
193 /* this is a handler method for calls to UnlockFile() */
194 virtual BOOL UnlockFile(PHMHANDLEDATA pHMHandleData,
195 DWORD arg2,
196 DWORD arg3,
197 DWORD arg4,
198 DWORD arg5);
199
200 /* this is a handler method for calls to UnlockFileEx() */
201 virtual BOOL UnlockFileEx(PHMHANDLEDATA pHMHandleData,
202 DWORD dwReserved,
203 DWORD nNumberOfBytesToLockLow,
204 DWORD nNumberOfBytesToLockHigh,
205 LPOVERLAPPED lpOverlapped);
206
207 /* this is a handler method for calls to WaitForSingleObject */
208 virtual DWORD WaitForSingleObject (PHMHANDLEDATA pHMHandleData,
209 DWORD dwTimeout);
210
211 /* this is a handler method for calls to WaitForSingleObjectEx */
212 virtual DWORD WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
213 DWORD dwTimeout,
214 BOOL fAlertable);
215
216
217 /***************************************************************************
218 * Events *
219 ***************************************************************************/
220
221 /* this is a handler method for calls to CreateEvent() */
222 virtual DWORD CreateEvent (PHMHANDLEDATA pHMHandleData,
223 LPSECURITY_ATTRIBUTES lpsa,
224 BOOL fManualReset,
225 BOOL fInitialState,
226 LPCSTR lpszEventName);
227
228 /* this is a handler method for calls to OpenEvent() */
229 virtual DWORD OpenEvent (PHMHANDLEDATA pHMHandleData,
230 BOOL fInheritHandle,
231 LPCSTR lpszEventName);
232
233 /* this is a handle method for calls to ResetEvent() */
234 virtual BOOL ResetEvent (PHMHANDLEDATA pHMHandleData);
235
236 /* this is a handle method for calls to SetEvent() */
237 virtual BOOL SetEvent (PHMHANDLEDATA pHMHandleData);
238
239 /* this is a handle method for calls to PulseEvent() */
240 virtual BOOL PulseEvent (PHMHANDLEDATA pHMHandleData);
241
242
243 /***************************************************************************
244 * Mutex *
245 ***************************************************************************/
246
247 /* this is a handler method for calls to CreateMutex() */
248 virtual DWORD CreateMutex (PHMHANDLEDATA pHMHandleData,
249 LPSECURITY_ATTRIBUTES lpsa,
250 BOOL fInitialOwner,
251 LPCSTR lpszMutexName);
252
253 /* this is a handler method for calls to OpenMutex() */
254 virtual DWORD OpenMutex (PHMHANDLEDATA pHMHandleData,
255 BOOL fInheritHandle,
256 LPCSTR lpszMutexName);
257
258 /* this is a handle method for calls to ReleaseMutex() */
259 virtual BOOL ReleaseMutex(PHMHANDLEDATA pHMHandleData);
260
261
262 /***************************************************************************
263 * Semaphores *
264 ***************************************************************************/
265
266 /* this is a handler method for calls to CreateSemaphore() */
267 virtual DWORD CreateSemaphore (PHMHANDLEDATA pHMHandleData,
268 LPSECURITY_ATTRIBUTES lpsa,
269 LONG lInitialCount,
270 LONG lMaximumCount,
271 LPCSTR lpszSemaphoreName);
272
273 /* this is a handler method for calls to OpenSemaphore() */
274 virtual DWORD OpenSemaphore (PHMHANDLEDATA pHMHandleData,
275 BOOL fInheritHandle,
276 LPCSTR lpszSemaphoreName);
277
278 /* this is a handle method for calls to ReleaseSemaphore() */
279 virtual BOOL ReleaseSemaphore(PHMHANDLEDATA pHMHandleData,
280 LONG cReleaseCount,
281 LPLONG lpPreviousCount);
282
283 /* this is a handler method for calls to CreateFileMapping() */
284 virtual DWORD CreateFileMapping (PHMHANDLEDATA pHMHandleData,
285 HANDLE hFile,
286 LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
287 DWORD flProtect,
288 DWORD dwMaximumSizeHigh,
289 DWORD dwMaximumSizeLow,
290 LPCSTR lpName,
291 HFILE *hOldMap);
292
293 /* this is a handler method for calls to OpenFileMapping() */
294 virtual DWORD OpenFileMapping (PHMHANDLEDATA pHMHandleData,
295 DWORD access, /* [in] Access mode */
296 BOOL fInherit,
297 LPCSTR lpName);
298
299 /* this is a handler method for calls to MapViewOfFileEx() */
300 virtual LPVOID MapViewOfFileEx (PHMHANDLEDATA pHMHandleData,
301 DWORD dwDesiredAccess,
302 DWORD dwFileOffsetHigh,
303 DWORD dwFileOffsetLow,
304 DWORD dwNumberOfBytesToMap,
305 LPVOID lpBaseAddress);
306
307 /* this is a handler method for calls to DeviceIoControl() */
308 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
309 LPVOID lpInBuffer, DWORD nInBufferSize,
310 LPVOID lpOutBuffer, DWORD nOutBufferSize,
311 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
312
313 /* COM ports */
314 virtual BOOL SetupComm(PHMHANDLEDATA pHMHandleData, DWORD dwInQueue, DWORD dwOutQueue);
315
316 virtual BOOL GetCommState(PHMHANDLEDATA pHMHandleData, LPDCB lpdcb);
317
318 virtual DWORD OpenThreadToken(PHMHANDLEDATA pHMHandleData,
319 HANDLE ThreadHandle,
320 BOOL OpenAsSelf);
321
322 virtual DWORD OpenProcessToken(PHMHANDLEDATA pHMHandleData, DWORD dwUserData,
323 HANDLE ProcessHandle);
324
325 virtual HANDLE CreateThread(PHMHANDLEDATA pHMHandleData,
326 LPSECURITY_ATTRIBUTES lpsa,
327 DWORD cbStack,
328 LPTHREAD_START_ROUTINE lpStartAddr,
329 LPVOID lpvThreadParm,
330 DWORD fdwCreate,
331 LPDWORD lpIDThread,
332 BOOL fFirstThread);
333
334 virtual INT GetThreadPriority(PHMHANDLEDATA pHMHandleData);
335 virtual DWORD SuspendThread(PHMHANDLEDATA pHMHandleData);
336 virtual BOOL SetThreadPriority(PHMHANDLEDATA pHMHandleData, int priority);
337
338 virtual BOOL GetThreadContext(PHMHANDLEDATA pHMHandleData, PCONTEXT lpContext);
339 virtual BOOL SetThreadContext(PHMHANDLEDATA pHMHandleData, const CONTEXT *lpContext);
340
341 virtual BOOL TerminateThread(PHMHANDLEDATA pHMHandleData, DWORD exitcode);
342 virtual DWORD ResumeThread(PHMHANDLEDATA pHMHandleData);
343 virtual BOOL SetThreadTerminated(PHMHANDLEDATA pHMHandleData);
344
345 virtual BOOL GetExitCodeThread(PHMHANDLEDATA pHMHandleData, LPDWORD lpExitCode);
346
347 /* Named pipes */
348 virtual BOOL PeekNamedPipe(PHMHANDLEDATA pHMHandleData,
349 LPVOID lpvBuffer,
350 DWORD cbBuffer,
351 LPDWORD lpcbRead,
352 LPDWORD lpcbAvail,
353 LPDWORD lpcbMessage);
354
355 virtual DWORD CreateNamedPipe(PHMHANDLEDATA pHMHandleData, LPCTSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode,
356 DWORD nMaxInstances, DWORD nOutBufferSize,
357 DWORD nInBufferSize, DWORD nDefaultTimeOut,
358 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
359
360 virtual BOOL ConnectNamedPipe(PHMHANDLEDATA pHMHandleData, LPOVERLAPPED lpOverlapped);
361
362 virtual BOOL DisconnectNamedPipe(PHMHANDLEDATA pHMHandleData);
363
364 virtual BOOL GetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
365 LPDWORD lpState,
366 LPDWORD lpCurInstances,
367 LPDWORD lpMaxCollectionCount,
368 LPDWORD lpCollectDataTimeout,
369 LPTSTR lpUserName,
370 DWORD nMaxUserNameSize);
371
372 virtual BOOL GetNamedPipeInfo(PHMHANDLEDATA pHMHandleData,
373 LPDWORD lpFlags,
374 LPDWORD lpOutBufferSize,
375 LPDWORD lpInBufferSize,
376 LPDWORD lpMaxInstances);
377
378
379 virtual DWORD TransactNamedPipe(PHMHANDLEDATA pHMHandleData,
380 LPVOID lpvWriteBuf,
381 DWORD cbWriteBuf,
382 LPVOID lpvReadBuf,
383 DWORD cbReadBuf,
384 LPDWORD lpcbRead,
385 LPOVERLAPPED lpo);
386
387 virtual BOOL SetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
388 LPDWORD lpdwMode,
389 LPDWORD lpcbMaxCollect,
390 LPDWORD lpdwCollectDataTimeout);
391
392 virtual BOOL CreatePipe(PHMHANDLEDATA pHMHandleDataRead,
393 PHMHANDLEDATA pHMHandleDataWrite,
394 LPSECURITY_ATTRIBUTES lpsa,
395 DWORD cbPipe);
396
397};
398
399
400/*****************************************************************************
401 * Prototypes *
402 *****************************************************************************/
403
404 /* register a new device with the handle manager */
405DWORD HMDeviceRegister(LPSTR pszDeviceName,
406 HMDeviceHandler *pDeviceHandler);
407
408
409#endif /* _HM_DEVICE_H_ */
410
Note: See TracBrowser for help on using the repository browser.