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

Last change on this file since 2246 was 2129, checked in by sandervl, 26 years ago

Added token handlemanager class + HMHandleGetUserData export

File size: 15.1 KB
Line 
1/* $Id: hmdevice.h,v 1.14 1999-12-18 21:45:54 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//.....
33
34/*****************************************************************************
35 * Structures *
36 *****************************************************************************/
37
38typedef struct _HMHANDLEDATA
39{
40 HANDLE hHMHandle; /* a copy of the OS/2 system handle */
41
42 DWORD dwType; /* handle type identifier */
43
44 DWORD dwAccess; /* access mode of the handle */
45 DWORD dwShare; /* share mode of the handle */
46 DWORD dwCreation; /* dwCreationDisposition */
47 DWORD dwFlags; /* flags and attributes */
48
49 DWORD dwUserData;
50 DWORD dwInternalType;
51
52 LPVOID lpHandlerData; /* for private use of the device handler */
53} HMHANDLEDATA, *PHMHANDLEDATA;
54
55
56
57class HMDeviceHandler
58{
59 /***************************************************************************
60 * The following methods are called by the handle manager request router. *
61 * They are exact replacements for the corresponding Win32 calls. *
62 ***************************************************************************/
63
64public:
65 LPCSTR lpHMDeviceName; /* a reference to the device name */
66
67 HMDeviceHandler(LPCSTR lpDeviceName); /* constructor with device name */
68
69
70 /***********************************
71 * handle generic standard methods *
72 ***********************************/
73
74 /* this is a special internal method to handle non-standard requests */
75 /* such as GetConsoleMode() for console devices */
76 virtual DWORD _DeviceRequest (PHMHANDLEDATA pHMHandleData,
77 ULONG ulRequestCode,
78 ULONG arg1,
79 ULONG arg2,
80 ULONG arg3,
81 ULONG arg4);
82
83 virtual BOOL DuplicateHandle(PHMHANDLEDATA pHMHandleData, HANDLE srcprocess,
84 PHMHANDLEDATA pHMSrcHandle,
85 HANDLE destprocess,
86 PHANDLE desthandle,
87 DWORD fdwAccess,
88 BOOL fInherit,
89 DWORD fdwOptions);
90
91 /* this is a handler method for calls to CreateFile() */
92 virtual DWORD CreateFile (LPCSTR lpFileName,
93 PHMHANDLEDATA pHMHandleData,
94 PVOID lpSecurityAttributes,
95 PHMHANDLEDATA pHMHandleDataTemplate);
96
97 /* this is a handler method for calls to OpenFile() */
98 virtual DWORD OpenFile (LPCSTR lpFileName,
99 PHMHANDLEDATA pHMHandleData,
100 OFSTRUCT* pOFStruct,
101 UINT fuMode);
102
103 /* this is a handler method for calls to CloseHandle() */
104 virtual DWORD CloseHandle(PHMHANDLEDATA pHMHandleData);
105
106 /* this is a handler method for calls to ReadFile() */
107 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
108 LPCVOID lpBuffer,
109 DWORD nNumberOfBytesToRead,
110 LPDWORD lpNumberOfBytesRead,
111 LPOVERLAPPED lpOverlapped);
112
113 /* this is a handler method for calls to WriteFile() */
114 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
115 LPCVOID lpBuffer,
116 DWORD nNumberOfBytesToWrite,
117 LPDWORD lpNumberOfBytesWritten,
118 LPOVERLAPPED lpOverlapped);
119
120 /* this is a handler method for calls to GetFileType() */
121 virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
122
123
124 /* this is a handler method for calls to GetFileInformationByHandle() */
125 virtual DWORD GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
126 BY_HANDLE_FILE_INFORMATION *pHFI);
127
128 /* this is a handler method for calls to SetEndOfFile() */
129 virtual BOOL SetEndOfFile(PHMHANDLEDATA pHMHandleData);
130
131 /* this is a handler method for calls to SetFileTime() */
132 virtual BOOL SetFileTime (PHMHANDLEDATA pHMHandleData,
133 LPFILETIME pFT1,
134 LPFILETIME pFT2,
135 LPFILETIME pFT3);
136
137 /* this is a handler method for calls to GetFileSize() */
138 virtual DWORD GetFileSize(PHMHANDLEDATA pHMHandleData,
139 PDWORD pSizeHigh);
140
141 /* this is a handler method for calls to SetFilePointer() */
142 virtual DWORD SetFilePointer(PHMHANDLEDATA pHMHandleData,
143 LONG lDistanceToMove,
144 PLONG lpDistanceToMoveHigh,
145 DWORD dwMoveMethod);
146
147 /* this is a handler method for calls to FlushFileBuffers() */
148 virtual BOOL FlushFileBuffers(PHMHANDLEDATA pHMHandleData);
149
150 /* this is a handler method for calls to GetOverlappedResult() */
151 virtual BOOL GetOverlappedResult (PHMHANDLEDATA pHMHandleData,
152 LPOVERLAPPED lpOverlapped,
153 LPDWORD arg3,
154 BOOL arg4);
155
156 /* this is a handler method for calls to LockFile() */
157 virtual DWORD LockFile(PHMHANDLEDATA pHMHandleData,
158 DWORD arg2,
159 DWORD arg3,
160 DWORD arg4,
161 DWORD arg5);
162
163 /* this is a handler method for calls to LockFileEx() */
164 virtual DWORD LockFileEx(PHMHANDLEDATA pHMHandleData,
165 DWORD dwFlags,
166 DWORD dwReserved,
167 DWORD nNumberOfBytesToLockLow,
168 DWORD nNumberOfBytesToLockHigh,
169 LPOVERLAPPED lpOverlapped);
170
171 /* this is a handler method for calls to UnlockFile() */
172 virtual DWORD UnlockFile(PHMHANDLEDATA pHMHandleData,
173 DWORD arg2,
174 DWORD arg3,
175 DWORD arg4,
176 DWORD arg5);
177
178 /* this is a handler method for calls to UnlockFileEx() */
179 virtual DWORD UnlockFileEx(PHMHANDLEDATA pHMHandleData,
180 DWORD dwFlags,
181 DWORD dwReserved,
182 DWORD nNumberOfBytesToLockLow,
183 DWORD nNumberOfBytesToLockHigh,
184 LPOVERLAPPED lpOverlapped);
185
186 /* this is a handler method for calls to WaitForSingleObject */
187 virtual DWORD WaitForSingleObject (PHMHANDLEDATA pHMHandleData,
188 DWORD dwTimeout);
189
190 /* this is a handler method for calls to WaitForSingleObjectEx */
191 virtual DWORD WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
192 DWORD dwTimeout,
193 BOOL fAlertable);
194
195
196 /***************************************************************************
197 * Events *
198 ***************************************************************************/
199
200 /* this is a handler method for calls to CreateEvent() */
201 virtual DWORD CreateEvent (PHMHANDLEDATA pHMHandleData,
202 LPSECURITY_ATTRIBUTES lpsa,
203 BOOL fManualReset,
204 BOOL fInitialState,
205 LPCSTR lpszEventName);
206
207 /* this is a handler method for calls to OpenEvent() */
208 virtual DWORD OpenEvent (PHMHANDLEDATA pHMHandleData,
209 BOOL fInheritHandle,
210 LPCSTR lpszEventName);
211
212 /* this is a handle method for calls to ResetEvent() */
213 virtual BOOL ResetEvent (PHMHANDLEDATA pHMHandleData);
214
215 /* this is a handle method for calls to SetEvent() */
216 virtual BOOL SetEvent (PHMHANDLEDATA pHMHandleData);
217
218 /* this is a handle method for calls to PulseEvent() */
219 virtual BOOL PulseEvent (PHMHANDLEDATA pHMHandleData);
220
221
222 /***************************************************************************
223 * Mutex *
224 ***************************************************************************/
225
226 /* this is a handler method for calls to CreateMutex() */
227 virtual DWORD CreateMutex (PHMHANDLEDATA pHMHandleData,
228 LPSECURITY_ATTRIBUTES lpsa,
229 BOOL fInitialOwner,
230 LPCSTR lpszMutexName);
231
232 /* this is a handler method for calls to OpenMutex() */
233 virtual DWORD OpenMutex (PHMHANDLEDATA pHMHandleData,
234 BOOL fInheritHandle,
235 LPCSTR lpszMutexName);
236
237 /* this is a handle method for calls to ReleaseMutex() */
238 virtual BOOL ReleaseMutex(PHMHANDLEDATA pHMHandleData);
239
240
241 /***************************************************************************
242 * Semaphores *
243 ***************************************************************************/
244
245 /* this is a handler method for calls to CreateSemaphore() */
246 virtual DWORD CreateSemaphore (PHMHANDLEDATA pHMHandleData,
247 LPSECURITY_ATTRIBUTES lpsa,
248 LONG lInitialCount,
249 LONG lMaximumCount,
250 LPCSTR lpszSemaphoreName);
251
252 /* this is a handler method for calls to OpenSemaphore() */
253 virtual DWORD OpenSemaphore (PHMHANDLEDATA pHMHandleData,
254 BOOL fInheritHandle,
255 LPCSTR lpszSemaphoreName);
256
257 /* this is a handle method for calls to ReleaseSemaphore() */
258 virtual BOOL ReleaseSemaphore(PHMHANDLEDATA pHMHandleData,
259 LONG cReleaseCount,
260 LPLONG lpPreviousCount);
261
262 /* this is a handler method for calls to CreateFileMapping() */
263 virtual DWORD CreateFileMapping (PHMHANDLEDATA pHMHandleData,
264 HANDLE hFile,
265 LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
266 DWORD flProtect,
267 DWORD dwMaximumSizeHigh,
268 DWORD dwMaximumSizeLow,
269 LPCSTR lpName,
270 HFILE *hOldMap);
271
272 /* this is a handler method for calls to OpenFileMapping() */
273 virtual DWORD OpenFileMapping (PHMHANDLEDATA pHMHandleData,
274 DWORD access, /* [in] Access mode */
275 BOOL fInherit,
276 LPCSTR lpName);
277
278 /* this is a handler method for calls to MapViewOfFileEx() */
279 virtual LPVOID MapViewOfFileEx (PHMHANDLEDATA pHMHandleData,
280 DWORD dwDesiredAccess,
281 DWORD dwFileOffsetHigh,
282 DWORD dwFileOffsetLow,
283 DWORD dwNumberOfBytesToMap,
284 LPVOID lpBaseAddress);
285
286 /* this is a handler method for calls to DeviceIoControl() */
287 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
288 LPVOID lpInBuffer, DWORD nInBufferSize,
289 LPVOID lpOutBuffer, DWORD nOutBufferSize,
290 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
291
292 /* COM ports */
293 virtual BOOL SetupComm(PHMHANDLEDATA pHMHandleData, DWORD dwInQueue, DWORD dwOutQueue);
294
295 virtual BOOL GetCommState(PHMHANDLEDATA pHMHandleData, LPDCB lpdcb);
296
297 virtual DWORD OpenThreadToken(PHMHANDLEDATA pHMHandleData, DWORD dwUserData,
298 HANDLE ThreadHandle,
299 BOOL OpenAsSelf);
300
301 virtual DWORD OpenProcessToken(PHMHANDLEDATA pHMHandleData, DWORD dwUserData,
302 HANDLE ProcessHandle);
303
304};
305
306
307/*****************************************************************************
308 * Prototypes *
309 *****************************************************************************/
310
311 /* register a new device with the handle manager */
312DWORD HMDeviceRegister(LPSTR pszDeviceName,
313 HMDeviceHandler *pDeviceHandler);
314
315
316#endif /* _HM_DEVICE_H_ */
317
Note: See TracBrowser for help on using the repository browser.