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

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

Put back handlemanager changes + memory mapped file changes

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