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

Last change on this file since 385 was 278, checked in by phaller, 26 years ago

Add: HandleManager support for kernel objects, various fixes

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