source: trunk/include/HandleManager.h@ 22051

Last change on this file since 22051 was 22051, checked in by dmik, 13 years ago

kernel32: Use file/pipe device classes when standard handles are redirected/piped.

This fixes working with standard handles (stdin/stdout/stderr) broken after r22024.

File size: 16.5 KB
Line 
1/*
2 * Project Odin Software License can be found in LICENSE.TXT
3 * Win32 Unified Handle Manager for OS/2
4 * 1998/02/11 PH Patrick Haller (haller@zebra.fh-weingarten.de)
5 *
6 * @(#) HandleManager.Cpp 1.0.0 1998/02/11 PH start
7 */
8
9#ifndef _HANDLEMANAGER_H_
10#define _HANDLEMANAGER_H_
11
12
13/*****************************************************************************
14 * Remark *
15 *****************************************************************************
16
17 1998/02/11 PH The interface to the handle manager is twofold:
18 a) HMxxx routines to be called from the "top" from the
19 KERNEL32 stubs
20 b) the HMDeviceHandler class is actually a workaround for
21 the device driver that would handle the requests on Win32.
22 To implement a new pseudo-device, one has create a new
23 HMDeviceHandler class and link it into the table in the
24 HANDLEMANAGER.CPP file.
25 */
26
27
28/*****************************************************************************
29 * Includes *
30 *****************************************************************************/
31
32#ifdef _OS2WIN_H
33#include <winos2def.h>
34#endif
35
36
37//LPSECURITY_ATTRIBUTES
38
39
40/*****************************************************************************
41 * Defines & Macros *
42 *****************************************************************************/
43
44 /* 1998/02/12 PH Correction of os2win.h */
45#undef FILE_TYPE_UNKNOWN
46#define FILE_TYPE_UNKNOWN 0x0000
47
48#undef FILE_TYPE_DISK
49#define FILE_TYPE_DISK 0x0001
50
51#undef FILE_TYPE_CHAR
52#define FILE_TYPE_CHAR 0x0002
53
54#undef FILE_TYPE_PIPE
55#define FILE_TYPE_PIPE 0x0003
56
57#undef FILE_TYPE_REMOTE
58#define FILE_TYPE_REMOTE 0x8000
59
60#ifndef INVALID_HANDLE_ERROR
61#define INVALID_HANDLE_ERROR (-1)
62#endif
63
64
65/*****************************************************************************
66 * Structures *
67 *****************************************************************************/
68
69#ifdef __cplusplus
70extern "C" {
71#endif
72
73/*****************************************************************************
74 * Prototypes *
75 *****************************************************************************/
76
77DWORD HMInitialize(void); /* initialize the HandleManager */
78
79DWORD HMTerminate(void); /* terminate the HandleManager */
80
81
82 /* handle manager version of GetStdHandle, Open32 can't really help us here */
83HANDLE HMGetStdHandle(DWORD nStdHandle);
84
85 /* handle manager version of GetStdHandle, Open32 can't really help us here */
86BOOL HMSetStdHandle(DWORD nStdHandle,
87 HANDLE hHandle);
88
89BOOL HMSetupStdHandle(DWORD nStdHandle);
90
91
92/*****************************************************************************/
93/* handle translation buffer management */
94/* */
95/* Since some Win32 applications rely (!) on 16-bit handles, we've got to do */
96/* 32-bit to 16-bit and vs vsa translation here. */
97/* Filehandle-based functions should be routed via the handlemanager instead */
98/* of going to Open32 directly. */
99/*****************************************************************************/
100
101DWORD HMHandleAllocate (PULONG phHandle16,
102 ULONG hHandle32);
103
104DWORD HMHandleFree (ULONG hHandle16);
105
106DWORD HMHandleGetUserData (ULONG hHandle16);
107DWORD HMHandleSetUserData (ULONG hHandle16, ULONG dwUserData);
108
109DWORD HMHandleValidate (ULONG hHandle16);
110
111DWORD HMHandleTranslateToWin (ULONG hHandle32,
112 PULONG phHandle16);
113
114DWORD HMHandleTranslateToOS2 (ULONG hHandle16,
115 PULONG hHandle32);
116
117DWORD HMHandleTranslateToOS2i(ULONG hHandle16);
118
119
120/*****************************************************************************
121 * Forwarders *
122 *****************************************************************************/
123
124HANDLE HMCreateEvent (LPSECURITY_ATTRIBUTES lpsa,
125 BOOL bManualReset,
126 BOOL bInitialState,
127 LPCSTR lpName);
128
129HANDLE HMCreateMutex (LPSECURITY_ATTRIBUTES lpsa,
130 BOOL bInitialOwner,
131 LPCSTR lpName);
132
133HANDLE HMCreateFile (LPCSTR lpFileName,
134 DWORD dwDesiredAccess,
135 DWORD dwShareMode,
136 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
137 DWORD dwCreationDisposition,
138 DWORD dwFlagsAndAttributes,
139 HANDLE hTemplateFile);
140
141HANDLE HMOpenFile (LPCSTR lpFileName,
142 OFSTRUCT* pOFStruct,
143 UINT fuMode);
144
145HANDLE HMOpenEvent (DWORD fdwAccess,
146 BOOL fInherit,
147 LPCSTR lpName);
148
149HANDLE HMOpenMutex (DWORD fdwAccess,
150 BOOL fInherit,
151 LPCSTR lpName);
152
153BOOL HMSetHandleInformation (HANDLE hObject,
154 DWORD dwMask,
155 DWORD dwFlags);
156
157BOOL HMGetHandleInformation (HANDLE hObject,
158 LPDWORD lpdwFlags);
159
160BOOL HMCloseHandle (HANDLE hObject);
161
162BOOL HMReadFile (HANDLE hFile,
163 LPVOID lpBuffer,
164 DWORD nNumberOfBytesToRead,
165 LPDWORD lpNumberOfBytesRead,
166 LPOVERLAPPED lpOverlapped,
167 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
168
169BOOL HMWriteFile (HANDLE hFile,
170 LPCVOID lpBuffer,
171 DWORD nNumberOfBytesToWrite,
172 LPDWORD lpNumberOfBytesWritten,
173 LPOVERLAPPED lpOverlapped,
174 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
175
176DWORD HMGetFileType (HANDLE hFile);
177
178DWORD HMDeviceRequest (HANDLE hFile,
179 ULONG ulRequestCode,
180 ULONG arg1,
181 ULONG arg2,
182 ULONG arg3,
183 ULONG arg4);
184
185BOOL HMGetFileInformationByHandle (HANDLE hFile,
186 BY_HANDLE_FILE_INFORMATION *pHFI);
187
188BOOL HMSetEndOfFile (HANDLE hFile);
189
190BOOL HMSetFileTime (HANDLE hFile,
191 const FILETIME *pFT1,
192 const FILETIME *pFT2,
193 const FILETIME *pFT3);
194
195BOOL HMGetFileTime (HANDLE hFile,
196 const FILETIME *pFT1,
197 const FILETIME *pFT2,
198 const FILETIME *pFT3);
199
200DWORD HMGetFileSize (HANDLE hFile,
201 PDWORD pSize);
202
203DWORD HMSetFilePointer (HANDLE hFile,
204 LONG lDistanceToMove,
205 PLONG lpDistanceToMoveHigh,
206 DWORD dwMoveMethod);
207
208BOOL HMLockFile (HFILE hFile,
209 DWORD dwFileOffsetLow,
210 DWORD dwFileOffsetHigh,
211 DWORD nNumberOfBytesToLockLow,
212 DWORD nNumberOfBytesToLockHigh);
213
214BOOL HMLockFileEx (HANDLE hFile,
215 DWORD dwFlags,
216 DWORD dwReserved,
217 DWORD nNumberOfBytesToLockLow,
218 DWORD nNumberOfBytesToLockHigh,
219 LPOVERLAPPED lpOverlapped);
220
221BOOL HMUnlockFile (HANDLE hFile,
222 DWORD dwFileOffsetLow,
223 DWORD dwFileOffsetHigh,
224 DWORD cbUnlockLow,
225 DWORD cbUnlockHigh);
226
227BOOL HMUnlockFileEx (HANDLE hFile,
228 DWORD dwReserved,
229 DWORD nNumberOfBytesToLockLow,
230 DWORD nNumberOfBytesToLockHigh,
231 LPOVERLAPPED lpOverlapped);
232
233DWORD HMWaitForSingleObject (HANDLE hObject,
234 DWORD dwTimeout);
235
236DWORD HMWaitForSingleObjectEx (HANDLE hObject,
237 DWORD dwTimeout,
238 BOOL fAlertable);
239
240DWORD HMWaitForMultipleObjects (DWORD cObjects,
241 HANDLE *lphObjects,
242 BOOL fWaitAll,
243 DWORD dwTimeout);
244
245DWORD HMWaitForMultipleObjectsEx (DWORD cObjects,
246 HANDLE *lphObjects,
247 BOOL fWaitAll,
248 DWORD dwTimeout,
249 BOOL fAlertable);
250
251DWORD HMMsgWaitForMultipleObjects (DWORD nCount,
252 HANDLE *pHandles,
253 BOOL fWaitAll,
254 DWORD dwMilliseconds,
255 DWORD dwWakeMask);
256
257BOOL HMDeviceIoControl (HANDLE hDevice,
258 DWORD dwIoControlCode,
259 LPVOID lpInBuffer,
260 DWORD nInBufferSize,
261 LPVOID lpOutBuffer,
262 DWORD nOutBufferSize,
263 LPDWORD lpBytesReturned,
264 LPOVERLAPPED lpOverlapped);
265
266BOOL HMCancelIo (HANDLE hDevice);
267
268BOOL HMFlushFileBuffers (HANDLE hObject);
269
270BOOL HMGetOverlappedResult (HANDLE hObject,
271 LPOVERLAPPED lpOverlapped,
272 LPDWORD lpNumberOfBytesTransferred,
273 BOOL bWait);
274
275BOOL HMReleaseMutex (HANDLE hObject);
276
277BOOL HMSetEvent (HANDLE hEvent);
278
279BOOL HMPulseEvent (HANDLE hEvent);
280
281BOOL HMResetEvent (HANDLE hEvent);
282
283HANDLE HMCreateSemaphore (LPSECURITY_ATTRIBUTES lpsa,
284 LONG lInitialCount,
285 LONG lMaximumCount,
286 LPCSTR lpszSemaphoreName);
287
288HANDLE HMOpenSemaphore (DWORD fdwAccess,
289 BOOL fInheritHandle,
290 LPCSTR lpszSemaphoreName);
291
292BOOL HMReleaseSemaphore (HANDLE hSemaphore,
293 LONG cReleaseCount,
294 LPLONG lpPreviousCount);
295
296
297HANDLE HMCreateFileMapping(
298 HANDLE hFile, /* [in] Handle of file to map */
299 SECURITY_ATTRIBUTES *sa, /* [in] Optional security attributes*/
300 DWORD protect, /* [in] Protection for mapping object */
301 DWORD size_high, /* [in] High-order 32 bits of object size */
302 DWORD size_low, /* [in] Low-order 32 bits of object size */
303 LPCSTR name); /* [in] Name of file-mapping object */
304
305HANDLE HMOpenFileMapping(
306 DWORD access, /* [in] Access mode */
307 BOOL inherit, /* [in] Inherit flag */
308 LPCSTR name ); /* [in] Name of file-mapping object */
309
310LPVOID HMMapViewOfFileEx (HANDLE hFileMappingObject,
311 DWORD dwDesiredAccess,
312 DWORD dwFileOffsetHigh,
313 DWORD dwFileOffsetLow,
314 DWORD dwNumberOfBytesToMap,
315 LPVOID lpBaseAddress);
316
317BOOL HMDuplicateHandle(HANDLE srcprocess,
318 HANDLE srchandle,
319 HANDLE destprocess,
320 PHANDLE desthandle,
321 DWORD fdwAccess,
322 BOOL fInherit,
323 DWORD fdwOptions);
324
325DWORD HMOpenThreadToken(HANDLE ThreadHandle,
326 DWORD DesiredAccess,
327 DWORD OpenAsSelf,
328 HANDLE *TokenHandle);
329
330DWORD HMOpenProcessToken(HANDLE ProcessHandle,
331 DWORD DesiredAccess,
332 DWORD dwUserData,
333 HANDLE *TokenHandle);
334
335
336HANDLE HMCreateThread(LPSECURITY_ATTRIBUTES lpsa,
337 DWORD cbStack,
338 LPTHREAD_START_ROUTINE lpStartAddr,
339 LPVOID lpvThreadParm,
340 DWORD fdwCreate,
341 LPDWORD lpIDThread,
342 BOOL fRegisterThread = FALSE);
343BOOL HMSetThreadTerminated(HANDLE hThread);
344
345
346BOOL HMGetFileNameFromHandle(HANDLE hFile, LPSTR lpszFileName, DWORD cbFileName);
347
348#ifdef __cplusplus
349} // extern "C"
350#endif
351
352#endif /* _HANDLEMANAGER_H_ */
Note: See TracBrowser for help on using the repository browser.