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

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

GetFileTime bugfix + FindResource(Ex)A/W changes + setup thread security objects during creation

File size: 16.6 KB
Line 
1/* $Id: hmdevice.h,v 1.18 2000-05-22 19:07:55 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 GetFileTime() */
139 virtual BOOL GetFileTime (PHMHANDLEDATA pHMHandleData,
140 LPFILETIME pFT1,
141 LPFILETIME pFT2,
142 LPFILETIME pFT3);
143
144 /* this is a handler method for calls to GetFileSize() */
145 virtual DWORD GetFileSize(PHMHANDLEDATA pHMHandleData,
146 PDWORD pSizeHigh);
147
148 /* this is a handler method for calls to SetFilePointer() */
149 virtual DWORD SetFilePointer(PHMHANDLEDATA pHMHandleData,
150 LONG lDistanceToMove,
151 PLONG lpDistanceToMoveHigh,
152 DWORD dwMoveMethod);
153
154 /* this is a handler method for calls to FlushFileBuffers() */
155 virtual BOOL FlushFileBuffers(PHMHANDLEDATA pHMHandleData);
156
157 /* this is a handler method for calls to GetOverlappedResult() */
158 virtual BOOL GetOverlappedResult (PHMHANDLEDATA pHMHandleData,
159 LPOVERLAPPED lpOverlapped,
160 LPDWORD arg3,
161 BOOL arg4);
162
163 /* this is a handler method for calls to LockFile() */
164 virtual DWORD LockFile(PHMHANDLEDATA pHMHandleData,
165 DWORD arg2,
166 DWORD arg3,
167 DWORD arg4,
168 DWORD arg5);
169
170 /* this is a handler method for calls to LockFileEx() */
171 virtual DWORD LockFileEx(PHMHANDLEDATA pHMHandleData,
172 DWORD dwFlags,
173 DWORD dwReserved,
174 DWORD nNumberOfBytesToLockLow,
175 DWORD nNumberOfBytesToLockHigh,
176 LPOVERLAPPED lpOverlapped);
177
178 /* this is a handler method for calls to UnlockFile() */
179 virtual DWORD UnlockFile(PHMHANDLEDATA pHMHandleData,
180 DWORD arg2,
181 DWORD arg3,
182 DWORD arg4,
183 DWORD arg5);
184
185 /* this is a handler method for calls to UnlockFileEx() */
186 virtual DWORD UnlockFileEx(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 WaitForSingleObject */
194 virtual DWORD WaitForSingleObject (PHMHANDLEDATA pHMHandleData,
195 DWORD dwTimeout);
196
197 /* this is a handler method for calls to WaitForSingleObjectEx */
198 virtual DWORD WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
199 DWORD dwTimeout,
200 BOOL fAlertable);
201
202
203 /***************************************************************************
204 * Events *
205 ***************************************************************************/
206
207 /* this is a handler method for calls to CreateEvent() */
208 virtual DWORD CreateEvent (PHMHANDLEDATA pHMHandleData,
209 LPSECURITY_ATTRIBUTES lpsa,
210 BOOL fManualReset,
211 BOOL fInitialState,
212 LPCSTR lpszEventName);
213
214 /* this is a handler method for calls to OpenEvent() */
215 virtual DWORD OpenEvent (PHMHANDLEDATA pHMHandleData,
216 BOOL fInheritHandle,
217 LPCSTR lpszEventName);
218
219 /* this is a handle method for calls to ResetEvent() */
220 virtual BOOL ResetEvent (PHMHANDLEDATA pHMHandleData);
221
222 /* this is a handle method for calls to SetEvent() */
223 virtual BOOL SetEvent (PHMHANDLEDATA pHMHandleData);
224
225 /* this is a handle method for calls to PulseEvent() */
226 virtual BOOL PulseEvent (PHMHANDLEDATA pHMHandleData);
227
228
229 /***************************************************************************
230 * Mutex *
231 ***************************************************************************/
232
233 /* this is a handler method for calls to CreateMutex() */
234 virtual DWORD CreateMutex (PHMHANDLEDATA pHMHandleData,
235 LPSECURITY_ATTRIBUTES lpsa,
236 BOOL fInitialOwner,
237 LPCSTR lpszMutexName);
238
239 /* this is a handler method for calls to OpenMutex() */
240 virtual DWORD OpenMutex (PHMHANDLEDATA pHMHandleData,
241 BOOL fInheritHandle,
242 LPCSTR lpszMutexName);
243
244 /* this is a handle method for calls to ReleaseMutex() */
245 virtual BOOL ReleaseMutex(PHMHANDLEDATA pHMHandleData);
246
247
248 /***************************************************************************
249 * Semaphores *
250 ***************************************************************************/
251
252 /* this is a handler method for calls to CreateSemaphore() */
253 virtual DWORD CreateSemaphore (PHMHANDLEDATA pHMHandleData,
254 LPSECURITY_ATTRIBUTES lpsa,
255 LONG lInitialCount,
256 LONG lMaximumCount,
257 LPCSTR lpszSemaphoreName);
258
259 /* this is a handler method for calls to OpenSemaphore() */
260 virtual DWORD OpenSemaphore (PHMHANDLEDATA pHMHandleData,
261 BOOL fInheritHandle,
262 LPCSTR lpszSemaphoreName);
263
264 /* this is a handle method for calls to ReleaseSemaphore() */
265 virtual BOOL ReleaseSemaphore(PHMHANDLEDATA pHMHandleData,
266 LONG cReleaseCount,
267 LPLONG lpPreviousCount);
268
269 /* this is a handler method for calls to CreateFileMapping() */
270 virtual DWORD CreateFileMapping (PHMHANDLEDATA pHMHandleData,
271 HANDLE hFile,
272 LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
273 DWORD flProtect,
274 DWORD dwMaximumSizeHigh,
275 DWORD dwMaximumSizeLow,
276 LPCSTR lpName,
277 HFILE *hOldMap);
278
279 /* this is a handler method for calls to OpenFileMapping() */
280 virtual DWORD OpenFileMapping (PHMHANDLEDATA pHMHandleData,
281 DWORD access, /* [in] Access mode */
282 BOOL fInherit,
283 LPCSTR lpName);
284
285 /* this is a handler method for calls to MapViewOfFileEx() */
286 virtual LPVOID MapViewOfFileEx (PHMHANDLEDATA pHMHandleData,
287 DWORD dwDesiredAccess,
288 DWORD dwFileOffsetHigh,
289 DWORD dwFileOffsetLow,
290 DWORD dwNumberOfBytesToMap,
291 LPVOID lpBaseAddress);
292
293 /* this is a handler method for calls to DeviceIoControl() */
294 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
295 LPVOID lpInBuffer, DWORD nInBufferSize,
296 LPVOID lpOutBuffer, DWORD nOutBufferSize,
297 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
298
299 /* COM ports */
300 virtual BOOL SetupComm(PHMHANDLEDATA pHMHandleData, DWORD dwInQueue, DWORD dwOutQueue);
301
302 virtual BOOL GetCommState(PHMHANDLEDATA pHMHandleData, LPDCB lpdcb);
303
304 virtual DWORD OpenThreadToken(PHMHANDLEDATA pHMHandleData,
305 HANDLE ThreadHandle,
306 BOOL OpenAsSelf);
307
308 virtual DWORD OpenProcessToken(PHMHANDLEDATA pHMHandleData, DWORD dwUserData,
309 HANDLE ProcessHandle);
310
311 virtual HANDLE CreateThread(PHMHANDLEDATA pHMHandleData,
312 LPSECURITY_ATTRIBUTES lpsa,
313 DWORD cbStack,
314 LPTHREAD_START_ROUTINE lpStartAddr,
315 LPVOID lpvThreadParm,
316 DWORD fdwCreate,
317 LPDWORD lpIDThread,
318 BOOL fFirstThread);
319
320 virtual INT GetThreadPriority(PHMHANDLEDATA pHMHandleData);
321 virtual DWORD SuspendThread(PHMHANDLEDATA pHMHandleData);
322 virtual BOOL SetThreadPriority(PHMHANDLEDATA pHMHandleData, int priority);
323
324 virtual BOOL GetThreadContext(PHMHANDLEDATA pHMHandleData, PCONTEXT lpContext);
325 virtual BOOL SetThreadContext(PHMHANDLEDATA pHMHandleData, const CONTEXT *lpContext);
326
327 virtual BOOL TerminateThread(PHMHANDLEDATA pHMHandleData, DWORD exitcode);
328 virtual DWORD ResumeThread(PHMHANDLEDATA pHMHandleData);
329 virtual BOOL SetThreadTerminated(PHMHANDLEDATA pHMHandleData);
330
331 virtual BOOL GetExitCodeThread(PHMHANDLEDATA pHMHandleData, LPDWORD lpExitCode);
332};
333
334
335/*****************************************************************************
336 * Prototypes *
337 *****************************************************************************/
338
339 /* register a new device with the handle manager */
340DWORD HMDeviceRegister(LPSTR pszDeviceName,
341 HMDeviceHandler *pDeviceHandler);
342
343
344#endif /* _HM_DEVICE_H_ */
345
Note: See TracBrowser for help on using the repository browser.