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

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

fix for handle of thread 0

File size: 16.3 KB
Line 
1/* $Id: hmdevice.h,v 1.17 2000-03-17 16:08:39 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
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
92 /* this is a handler method for calls to CreateFile() */
93 virtual DWORD CreateFile (LPCSTR lpFileName,
94 PHMHANDLEDATA pHMHandleData,
95 PVOID lpSecurityAttributes,
96 PHMHANDLEDATA pHMHandleDataTemplate);
97
98 /* this is a handler method for calls to OpenFile() */
99 virtual DWORD OpenFile (LPCSTR lpFileName,
100 PHMHANDLEDATA pHMHandleData,
101 OFSTRUCT* pOFStruct,
102 UINT fuMode);
103
104 /* this is a handler method for calls to CloseHandle() */
105 virtual DWORD CloseHandle(PHMHANDLEDATA pHMHandleData);
106
107 /* this is a handler method for calls to ReadFile() */
108 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
109 LPCVOID lpBuffer,
110 DWORD nNumberOfBytesToRead,
111 LPDWORD lpNumberOfBytesRead,
112 LPOVERLAPPED lpOverlapped);
113
114 /* this is a handler method for calls to WriteFile() */
115 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
116 LPCVOID lpBuffer,
117 DWORD nNumberOfBytesToWrite,
118 LPDWORD lpNumberOfBytesWritten,
119 LPOVERLAPPED lpOverlapped);
120
121 /* this is a handler method for calls to GetFileType() */
122 virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
123
124
125 /* this is a handler method for calls to GetFileInformationByHandle() */
126 virtual DWORD GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
127 BY_HANDLE_FILE_INFORMATION *pHFI);
128
129 /* this is a handler method for calls to SetEndOfFile() */
130 virtual BOOL SetEndOfFile(PHMHANDLEDATA pHMHandleData);
131
132 /* this is a handler method for calls to SetFileTime() */
133 virtual BOOL SetFileTime (PHMHANDLEDATA pHMHandleData,
134 LPFILETIME pFT1,
135 LPFILETIME pFT2,
136 LPFILETIME pFT3);
137
138 /* this is a handler method for calls to GetFileSize() */
139 virtual DWORD GetFileSize(PHMHANDLEDATA pHMHandleData,
140 PDWORD pSizeHigh);
141
142 /* this is a handler method for calls to SetFilePointer() */
143 virtual DWORD SetFilePointer(PHMHANDLEDATA pHMHandleData,
144 LONG lDistanceToMove,
145 PLONG lpDistanceToMoveHigh,
146 DWORD dwMoveMethod);
147
148 /* this is a handler method for calls to FlushFileBuffers() */
149 virtual BOOL FlushFileBuffers(PHMHANDLEDATA pHMHandleData);
150
151 /* this is a handler method for calls to GetOverlappedResult() */
152 virtual BOOL GetOverlappedResult (PHMHANDLEDATA pHMHandleData,
153 LPOVERLAPPED lpOverlapped,
154 LPDWORD arg3,
155 BOOL arg4);
156
157 /* this is a handler method for calls to LockFile() */
158 virtual DWORD LockFile(PHMHANDLEDATA pHMHandleData,
159 DWORD arg2,
160 DWORD arg3,
161 DWORD arg4,
162 DWORD arg5);
163
164 /* this is a handler method for calls to LockFileEx() */
165 virtual DWORD LockFileEx(PHMHANDLEDATA pHMHandleData,
166 DWORD dwFlags,
167 DWORD dwReserved,
168 DWORD nNumberOfBytesToLockLow,
169 DWORD nNumberOfBytesToLockHigh,
170 LPOVERLAPPED lpOverlapped);
171
172 /* this is a handler method for calls to UnlockFile() */
173 virtual DWORD UnlockFile(PHMHANDLEDATA pHMHandleData,
174 DWORD arg2,
175 DWORD arg3,
176 DWORD arg4,
177 DWORD arg5);
178
179 /* this is a handler method for calls to UnlockFileEx() */
180 virtual DWORD UnlockFileEx(PHMHANDLEDATA pHMHandleData,
181 DWORD dwFlags,
182 DWORD dwReserved,
183 DWORD nNumberOfBytesToLockLow,
184 DWORD nNumberOfBytesToLockHigh,
185 LPOVERLAPPED lpOverlapped);
186
187 /* this is a handler method for calls to WaitForSingleObject */
188 virtual DWORD WaitForSingleObject (PHMHANDLEDATA pHMHandleData,
189 DWORD dwTimeout);
190
191 /* this is a handler method for calls to WaitForSingleObjectEx */
192 virtual DWORD WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
193 DWORD dwTimeout,
194 BOOL fAlertable);
195
196
197 /***************************************************************************
198 * Events *
199 ***************************************************************************/
200
201 /* this is a handler method for calls to CreateEvent() */
202 virtual DWORD CreateEvent (PHMHANDLEDATA pHMHandleData,
203 LPSECURITY_ATTRIBUTES lpsa,
204 BOOL fManualReset,
205 BOOL fInitialState,
206 LPCSTR lpszEventName);
207
208 /* this is a handler method for calls to OpenEvent() */
209 virtual DWORD OpenEvent (PHMHANDLEDATA pHMHandleData,
210 BOOL fInheritHandle,
211 LPCSTR lpszEventName);
212
213 /* this is a handle method for calls to ResetEvent() */
214 virtual BOOL ResetEvent (PHMHANDLEDATA pHMHandleData);
215
216 /* this is a handle method for calls to SetEvent() */
217 virtual BOOL SetEvent (PHMHANDLEDATA pHMHandleData);
218
219 /* this is a handle method for calls to PulseEvent() */
220 virtual BOOL PulseEvent (PHMHANDLEDATA pHMHandleData);
221
222
223 /***************************************************************************
224 * Mutex *
225 ***************************************************************************/
226
227 /* this is a handler method for calls to CreateMutex() */
228 virtual DWORD CreateMutex (PHMHANDLEDATA pHMHandleData,
229 LPSECURITY_ATTRIBUTES lpsa,
230 BOOL fInitialOwner,
231 LPCSTR lpszMutexName);
232
233 /* this is a handler method for calls to OpenMutex() */
234 virtual DWORD OpenMutex (PHMHANDLEDATA pHMHandleData,
235 BOOL fInheritHandle,
236 LPCSTR lpszMutexName);
237
238 /* this is a handle method for calls to ReleaseMutex() */
239 virtual BOOL ReleaseMutex(PHMHANDLEDATA pHMHandleData);
240
241
242 /***************************************************************************
243 * Semaphores *
244 ***************************************************************************/
245
246 /* this is a handler method for calls to CreateSemaphore() */
247 virtual DWORD CreateSemaphore (PHMHANDLEDATA pHMHandleData,
248 LPSECURITY_ATTRIBUTES lpsa,
249 LONG lInitialCount,
250 LONG lMaximumCount,
251 LPCSTR lpszSemaphoreName);
252
253 /* this is a handler method for calls to OpenSemaphore() */
254 virtual DWORD OpenSemaphore (PHMHANDLEDATA pHMHandleData,
255 BOOL fInheritHandle,
256 LPCSTR lpszSemaphoreName);
257
258 /* this is a handle method for calls to ReleaseSemaphore() */
259 virtual BOOL ReleaseSemaphore(PHMHANDLEDATA pHMHandleData,
260 LONG cReleaseCount,
261 LPLONG lpPreviousCount);
262
263 /* this is a handler method for calls to CreateFileMapping() */
264 virtual DWORD CreateFileMapping (PHMHANDLEDATA pHMHandleData,
265 HANDLE hFile,
266 LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
267 DWORD flProtect,
268 DWORD dwMaximumSizeHigh,
269 DWORD dwMaximumSizeLow,
270 LPCSTR lpName,
271 HFILE *hOldMap);
272
273 /* this is a handler method for calls to OpenFileMapping() */
274 virtual DWORD OpenFileMapping (PHMHANDLEDATA pHMHandleData,
275 DWORD access, /* [in] Access mode */
276 BOOL fInherit,
277 LPCSTR lpName);
278
279 /* this is a handler method for calls to MapViewOfFileEx() */
280 virtual LPVOID MapViewOfFileEx (PHMHANDLEDATA pHMHandleData,
281 DWORD dwDesiredAccess,
282 DWORD dwFileOffsetHigh,
283 DWORD dwFileOffsetLow,
284 DWORD dwNumberOfBytesToMap,
285 LPVOID lpBaseAddress);
286
287 /* this is a handler method for calls to DeviceIoControl() */
288 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
289 LPVOID lpInBuffer, DWORD nInBufferSize,
290 LPVOID lpOutBuffer, DWORD nOutBufferSize,
291 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
292
293 /* COM ports */
294 virtual BOOL SetupComm(PHMHANDLEDATA pHMHandleData, DWORD dwInQueue, DWORD dwOutQueue);
295
296 virtual BOOL GetCommState(PHMHANDLEDATA pHMHandleData, LPDCB lpdcb);
297
298 virtual DWORD OpenThreadToken(PHMHANDLEDATA pHMHandleData,
299 HANDLE ThreadHandle,
300 BOOL OpenAsSelf);
301
302 virtual DWORD OpenProcessToken(PHMHANDLEDATA pHMHandleData, DWORD dwUserData,
303 HANDLE ProcessHandle);
304
305 virtual HANDLE CreateThread(PHMHANDLEDATA pHMHandleData,
306 LPSECURITY_ATTRIBUTES lpsa,
307 DWORD cbStack,
308 LPTHREAD_START_ROUTINE lpStartAddr,
309 LPVOID lpvThreadParm,
310 DWORD fdwCreate,
311 LPDWORD lpIDThread,
312 BOOL fFirstThread);
313
314 virtual INT GetThreadPriority(PHMHANDLEDATA pHMHandleData);
315 virtual DWORD SuspendThread(PHMHANDLEDATA pHMHandleData);
316 virtual BOOL SetThreadPriority(PHMHANDLEDATA pHMHandleData, int priority);
317
318 virtual BOOL GetThreadContext(PHMHANDLEDATA pHMHandleData, PCONTEXT lpContext);
319 virtual BOOL SetThreadContext(PHMHANDLEDATA pHMHandleData, const CONTEXT *lpContext);
320
321 virtual BOOL TerminateThread(PHMHANDLEDATA pHMHandleData, DWORD exitcode);
322 virtual DWORD ResumeThread(PHMHANDLEDATA pHMHandleData);
323 virtual BOOL SetThreadTerminated(PHMHANDLEDATA pHMHandleData);
324
325 virtual BOOL GetExitCodeThread(PHMHANDLEDATA pHMHandleData, LPDWORD lpExitCode);
326};
327
328
329/*****************************************************************************
330 * Prototypes *
331 *****************************************************************************/
332
333 /* register a new device with the handle manager */
334DWORD HMDeviceRegister(LPSTR pszDeviceName,
335 HMDeviceHandler *pDeviceHandler);
336
337
338#endif /* _HM_DEVICE_H_ */
339
Note: See TracBrowser for help on using the repository browser.