source: trunk/include/HandleManager.h@ 3951

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

header update

File size: 21.6 KB
Line 
1/* $Id: HandleManager.h,v 1.22 2000-08-04 21:17: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 * 1998/02/11 PH Patrick Haller (haller@zebra.fh-weingarten.de)
7 *
8 * @(#) HandleManager.Cpp 1.0.0 1998/02/11 PH start
9 */
10
11#ifndef _HANDLEMANAGER_H_
12#define _HANDLEMANAGER_H_
13
14
15/*****************************************************************************
16 * Remark *
17 *****************************************************************************
18
19 1998/02/11 PH The interface to the handle manager is twofold:
20 a) HMxxx routines to be called from the "top" from the
21 KERNEL32 stubs
22 b) the HMDeviceHandler class is actually a workaround for
23 the device driver that would handle the requests on Win32.
24 To implement a new pseudo-device, one has create a new
25 HMDeviceHandler class and link it into the table in the
26 HANDLEMANAGER.CPP file.
27 */
28
29
30/*****************************************************************************
31 * Includes *
32 *****************************************************************************/
33
34#ifdef _OS2WIN_H
35#include <winos2def.h>
36#endif
37
38#ifndef __WINE_WINDEF_H
39
40typedef struct tagDCB
41{
42 DWORD DCBlength;
43 DWORD BaudRate;
44 unsigned fBinary :1;
45 unsigned fParity :1;
46 unsigned fOutxCtsFlow :1;
47 unsigned fOutxDsrFlow :1;
48 unsigned fDtrControl :2;
49 unsigned fDsrSensitivity :1;
50 unsigned fTXContinueOnXoff :1;
51 unsigned fOutX :1;
52 unsigned fInX :1;
53 unsigned fErrorChar :1;
54 unsigned fNull :1;
55 unsigned fRtsControl :2;
56 unsigned fAbortOnError :1;
57 unsigned fDummy2 :17;
58 WORD wReserved;
59 WORD XonLim;
60 WORD XoffLim;
61 BYTE ByteSize;
62 BYTE Parity;
63 BYTE StopBits;
64 char XonChar;
65 char XoffChar;
66 char ErrorChar;
67 char EofChar;
68 char EvtChar;
69} DCB, *LPDCB;
70
71#endif
72
73
74//LPSECURITY_ATTRIBUTES
75
76
77/*****************************************************************************
78 * Defines & Macros *
79 *****************************************************************************/
80
81 /* 1998/02/12 PH Correction of os2win.h */
82#undef FILE_TYPE_UNKNOWN
83#define FILE_TYPE_UNKNOWN 0x0000
84
85#undef FILE_TYPE_DISK
86#define FILE_TYPE_DISK 0x0001
87
88#undef FILE_TYPE_CHAR
89#define FILE_TYPE_CHAR 0x0002
90
91#undef FILE_TYPE_PIPE
92#define FILE_TYPE_PIPE 0x0003
93
94#undef FILE_TYPE_REMOTE
95#define FILE_TYPE_REMOTE 0x8000
96
97#ifndef INVALID_HANDLE_ERROR
98#define INVALID_HANDLE_ERROR (-1)
99#endif
100
101
102/*****************************************************************************
103 * Structures *
104 *****************************************************************************/
105
106
107/*****************************************************************************
108 * Prototypes *
109 *****************************************************************************/
110
111DWORD HMInitialize(void); /* initialize the HandleManager */
112
113DWORD HMTerminate(void); /* terminate the HandleManager */
114
115
116 /* handle manager version of GetStdHandle, Open32 can't really help us here */
117HANDLE HMGetStdHandle(DWORD nStdHandle);
118
119 /* handle manager version of GetStdHandle, Open32 can't really help us here */
120BOOL HMSetStdHandle(DWORD nStdHandle,
121 HANDLE hHandle);
122
123
124/*****************************************************************************/
125/* handle translation buffer management */
126/* */
127/* Since some Win32 applications rely (!) on 16-bit handles, we've got to do */
128/* 32-bit to 16-bit and vs vsa translation here. */
129/* Filehandle-based functions should be routed via the handlemanager instead */
130/* of going to Open32 directly. */
131/*****************************************************************************/
132
133DWORD HMHandleAllocate (PULONG phHandle16,
134 ULONG hHandle32);
135
136DWORD HMHandleFree (ULONG hHandle16);
137
138DWORD HMHandleGetUserData (ULONG hHandle16);
139
140DWORD HMHandleValidate (ULONG hHandle16);
141
142DWORD HMHandleTranslateToWin (ULONG hHandle32,
143 PULONG phHandle16);
144
145DWORD HMHandleTranslateToOS2 (ULONG hHandle16,
146 PULONG hHandle32);
147
148DWORD HMHandleTranslateToOS2i(ULONG hHandle16);
149
150
151/*****************************************************************************
152 * Forwarders *
153 *****************************************************************************/
154
155// enable C linkage to avoid parameter mangling
156#ifdef __cplusplus__
157extern "C" {
158#endif
159
160HANDLE HMCreateEvent (LPSECURITY_ATTRIBUTES lpsa,
161 BOOL bManualReset,
162 BOOL bInitialState,
163 LPCSTR lpName);
164
165HANDLE HMCreateMutex (LPSECURITY_ATTRIBUTES lpsa,
166 BOOL bInitialOwner,
167 LPCSTR lpName);
168
169HANDLE HMCreateFile (LPCSTR lpFileName,
170 DWORD dwDesiredAccess,
171 DWORD dwShareMode,
172 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
173 DWORD dwCreationDisposition,
174 DWORD dwFlagsAndAttributes,
175 HANDLE hTemplateFile);
176
177HANDLE HMOpenFile (LPCSTR lpFileName,
178 OFSTRUCT* pOFStruct,
179 UINT fuMode);
180
181HANDLE HMOpenEvent (DWORD fdwAccess,
182 BOOL fInherit,
183 LPCSTR lpName);
184
185HANDLE HMOpenMutex (DWORD fdwAccess,
186 BOOL fInherit,
187 LPCSTR lpName);
188
189BOOL HMCloseHandle (HANDLE hObject);
190
191BOOL HMReadFile (HANDLE hFile,
192 LPVOID lpBuffer,
193 DWORD nNumberOfBytesToRead,
194 LPDWORD lpNumberOfBytesRead,
195 LPOVERLAPPED lpOverlapped);
196
197
198BOOL HMReadFileEx (HANDLE hFile,
199 LPVOID lpBuffer,
200 DWORD nNumberOfBytesToRead,
201 LPOVERLAPPED lpOverlapped,
202 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
203
204BOOL HMWriteFile (HANDLE hFile,
205 LPCVOID lpBuffer,
206 DWORD nNumberOfBytesToWrite,
207 LPDWORD lpNumberOfBytesWritten,
208 LPOVERLAPPED lpOverlapped);
209
210BOOL HMWriteFileEx (HANDLE hFile,
211 LPVOID lpBuffer,
212 DWORD nNumberOfBytesToWrite,
213 LPOVERLAPPED lpOverlapped,
214 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
215
216DWORD HMGetFileType (HANDLE hFile);
217
218DWORD HMDeviceRequest (HANDLE hFile,
219 ULONG ulRequestCode,
220 ULONG arg1,
221 ULONG arg2,
222 ULONG arg3,
223 ULONG arg4);
224
225BOOL HMGetFileInformationByHandle (HANDLE hFile,
226 BY_HANDLE_FILE_INFORMATION *pHFI);
227
228BOOL HMSetEndOfFile (HANDLE hFile);
229
230BOOL HMSetFileTime (HANDLE hFile,
231 const FILETIME *pFT1,
232 const FILETIME *pFT2,
233 const FILETIME *pFT3);
234
235BOOL HMGetFileTime (HANDLE hFile,
236 const FILETIME *pFT1,
237 const FILETIME *pFT2,
238 const FILETIME *pFT3);
239
240DWORD HMGetFileSize (HANDLE hFile,
241 PDWORD pSize);
242
243DWORD HMSetFilePointer (HANDLE hFile,
244 LONG lDistanceToMove,
245 PLONG lpDistanceToMoveHigh,
246 DWORD dwMoveMethod);
247
248BOOL HMLockFile (HFILE hFile,
249 DWORD dwFileOffsetLow,
250 DWORD dwFileOffsetHigh,
251 DWORD nNumberOfBytesToLockLow,
252 DWORD nNumberOfBytesToLockHigh);
253
254BOOL HMLockFileEx (HANDLE hFile,
255 DWORD dwFlags,
256 DWORD dwReserved,
257 DWORD nNumberOfBytesToLockLow,
258 DWORD nNumberOfBytesToLockHigh,
259 LPOVERLAPPED lpOverlapped);
260
261BOOL HMUnlockFile (HANDLE hFile,
262 DWORD dwFileOffsetLow,
263 DWORD dwFileOffsetHigh,
264 DWORD cbUnlockLow,
265 DWORD cbUnlockHigh);
266
267BOOL HMUnlockFileEx (HANDLE hFile,
268 DWORD dwReserved,
269 DWORD nNumberOfBytesToLockLow,
270 DWORD nNumberOfBytesToLockHigh,
271 LPOVERLAPPED lpOverlapped);
272
273DWORD HMWaitForSingleObject (HANDLE hObject,
274 DWORD dwTimeout);
275
276DWORD HMWaitForSingleObjectEx (HANDLE hObject,
277 DWORD dwTimeout,
278 BOOL fAlertable);
279
280DWORD HMWaitForMultipleObjects (DWORD cObjects,
281 HANDLE *lphObjects,
282 BOOL fWaitAll,
283 DWORD dwTimeout);
284
285DWORD HMWaitForMultipleObjectsEx (DWORD cObjects,
286 HANDLE *lphObjects,
287 BOOL fWaitAll,
288 DWORD dwTimeout,
289 BOOL fAlertable);
290
291DWORD HMMsgWaitForMultipleObjects (DWORD nCount,
292 HANDLE *pHandles,
293 BOOL fWaitAll,
294 DWORD dwMilliseconds,
295 DWORD dwWakeMask);
296
297BOOL HMFlushFileBuffers (HANDLE hObject);
298
299BOOL HMGetOverlappedResult (HANDLE hObject,
300 LPOVERLAPPED lpOverlapped,
301 LPDWORD lpNumberOfBytesTransferred,
302 BOOL bWait);
303
304BOOL HMReleaseMutex (HANDLE hObject);
305
306BOOL HMSetEvent (HANDLE hEvent);
307
308BOOL HMPulseEvent (HANDLE hEvent);
309
310BOOL HMResetEvent (HANDLE hEvent);
311
312HANDLE HMCreateSemaphore (LPSECURITY_ATTRIBUTES lpsa,
313 LONG lInitialCount,
314 LONG lMaximumCount,
315 LPCSTR lpszSemaphoreName);
316
317HANDLE HMOpenSemaphore (DWORD fdwAccess,
318 BOOL fInheritHandle,
319 LPCSTR lpszSemaphoreName);
320
321BOOL HMReleaseSemaphore (HANDLE hSemaphore,
322 LONG cReleaseCount,
323 LPLONG lpPreviousCount);
324
325
326HANDLE HMCreateFileMapping(
327 HFILE hFile, /* [in] Handle of file to map */
328 SECURITY_ATTRIBUTES *sa, /* [in] Optional security attributes*/
329 DWORD protect, /* [in] Protection for mapping object */
330 DWORD size_high, /* [in] High-order 32 bits of object size */
331 DWORD size_low, /* [in] Low-order 32 bits of object size */
332 LPCSTR name); /* [in] Name of file-mapping object */
333
334HANDLE HMOpenFileMapping(
335 DWORD access, /* [in] Access mode */
336 BOOL inherit, /* [in] Inherit flag */
337 LPCSTR name ); /* [in] Name of file-mapping object */
338
339LPVOID HMMapViewOfFileEx (HANDLE hFileMappingObject,
340 DWORD dwDesiredAccess,
341 DWORD dwFileOffsetHigh,
342 DWORD dwFileOffsetLow,
343 DWORD dwNumberOfBytesToMap,
344 LPVOID lpBaseAddress);
345
346BOOL HMDuplicateHandle(HANDLE srcprocess,
347 HANDLE srchandle,
348 HANDLE destprocess,
349 PHANDLE desthandle,
350 DWORD fdwAccess,
351 BOOL fInherit,
352 DWORD fdwOptions,
353 DWORD fdwOdinOptions = 0);
354
355#define DUPLICATE_SHARE_DENYNONE 1
356#define DUPLICATE_SHARE_READ 2
357#define DUPLICATE_ACCESS_READ 4
358#define DUPLICATE_ACCESS_WRITE 8
359#define DUPLICATE_ACCESS_READWRITE (DUPLICATE_ACCESS_WRITE|DUPLICATE_ACCESS_READ)
360
361//SvL: Used internally by memory mapped class
362#define HMDuplicateHandleOdin HMDuplicateHandle
363
364DWORD HMOpenThreadToken(HANDLE ThreadHandle,
365 DWORD DesiredAccess,
366 DWORD OpenAsSelf,
367 HANDLE *TokenHandle);
368
369DWORD HMOpenProcessToken(HANDLE ProcessHandle,
370 DWORD DesiredAccess,
371 DWORD dwUserData,
372 HANDLE *TokenHandle);
373
374BOOL HMSetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue);
375
376BOOL HMGetCommState(INT hCommDev, LPDCB lpdcb);
377
378HANDLE HMCreateThread(LPSECURITY_ATTRIBUTES lpsa,
379 DWORD cbStack,
380 LPTHREAD_START_ROUTINE lpStartAddr,
381 LPVOID lpvThreadParm,
382 DWORD fdwCreate,
383 LPDWORD lpIDThread,
384 BOOL fFirstThread = FALSE);
385INT HMGetThreadPriority(HANDLE hThread);
386DWORD HMSuspendThread(HANDLE hThread);
387BOOL HMSetThreadPriority(HANDLE hThread, int priority);
388BOOL HMGetThreadContext(HANDLE hThread, CONTEXT *lpContext);
389BOOL HMSetThreadContext(HANDLE hThread, const CONTEXT *lpContext);
390BOOL HMTerminateThread(HANDLE hThread, DWORD exitcode);
391DWORD HMResumeThread(HANDLE hThread);
392BOOL HMGetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
393BOOL HMSetThreadTerminated(HANDLE hThread);
394BOOL HMPeekNamedPipe(HANDLE pHMHandleData,
395 LPVOID lpvBuffer,
396 DWORD cbBuffer,
397 LPDWORD lpcbRead,
398 LPDWORD lpcbAvail,
399 LPDWORD lpcbMessage);
400
401DWORD HMCreateNamedPipe(LPCTSTR lpName,
402 DWORD dwOpenMode,
403 DWORD dwPipeMode,
404 DWORD nMaxInstances,
405 DWORD nOutBufferSize,
406 DWORD nInBufferSize,
407 DWORD nDefaultTimeOut,
408 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
409
410BOOL HMConnectNamedPipe(HANDLE hPipe, LPOVERLAPPED lpOverlapped);
411
412BOOL HMDisconnectNamedPipe(HANDLE hPipe);
413
414BOOL HMGetNamedPipeHandleState(HANDLE hPipe,
415 LPDWORD lpState,
416 LPDWORD lpCurInstances,
417 LPDWORD lpMaxCollectionCount,
418 LPDWORD lpCollectDataTimeout,
419 LPTSTR lpUserName,
420 DWORD nMaxUserNameSize);
421
422BOOL HMGetNamedPipeInfo(HANDLE hPipe,
423 LPDWORD lpFlags,
424 LPDWORD lpOutBufferSize,
425 LPDWORD lpInBufferSize,
426 LPDWORD lpMaxInstances);
427
428
429DWORD HMTransactNamedPipe(HANDLE hPipe,
430 LPVOID lpvWriteBuf,
431 DWORD cbWriteBuf,
432 LPVOID lpvReadBuf,
433 DWORD cbReadBuf,
434 LPDWORD lpcbRead,
435 LPOVERLAPPED lpo);
436
437
438BOOL HMPeekNamedPipe(HANDLE hPipe,
439 LPVOID lpvBuffer,
440 DWORD cbBuffer,
441 LPDWORD lpcbRead,
442 LPDWORD lpcbAvail,
443 LPDWORD lpcbMessage);
444
445DWORD HMCreateNamedPipe(LPCTSTR lpName,
446 DWORD dwOpenMode,
447 DWORD dwPipeMode,
448 DWORD nMaxInstances,
449 DWORD nOutBufferSize,
450 DWORD nInBufferSize,
451 DWORD nDefaultTimeOut,
452 void* lpSecurityAttributes);
453
454BOOL HMConnectNamedPipe(HANDLE hPipe, LPOVERLAPPED lpOverlapped);
455
456BOOL HMDisconnectNamedPipe(HANDLE hPipe);
457
458BOOL HMGetNamedPipeHandleState(HANDLE hPipe,
459 LPDWORD lpState,
460 LPDWORD lpCurInstances,
461 LPDWORD lpMaxCollectionCount,
462 LPDWORD lpCollectDataTimeout,
463 LPTSTR lpUserName,
464 DWORD nMaxUserNameSize);
465
466BOOL HMGetNamedPipeInfo(HANDLE hPipe,
467 LPDWORD lpFlags,
468 LPDWORD lpOutBufferSize,
469 LPDWORD lpInBufferSize,
470 LPDWORD lpMaxInstances);
471
472DWORD HMTransactNamedPipe(HANDLE hPipe,
473 LPVOID lpvWriteBuf,
474 DWORD cbWriteBuf,
475 LPVOID lpvReadBuf,
476 DWORD cbReadBuf,
477 LPDWORD lpcbRead,
478 LPOVERLAPPED lpo);
479
480BOOL HMSetNamedPipeHandleState(HANDLE hNamedPipe,
481 LPDWORD lpdwMode,
482 LPDWORD lpcbMaxCollect,
483 LPDWORD lpdwCollectDataTimeout);
484
485BOOL HMCreatePipe(PHANDLE phRead,
486 PHANDLE phWrite,
487 LPSECURITY_ATTRIBUTES lpsa,
488 DWORD cbPipe);
489
490#ifdef __cplusplus__
491 }
492#endif
493
494#endif /* _HANDLEMANAGER_H_ */
Note: See TracBrowser for help on using the repository browser.