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

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

Rewrote file io apis

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