source: trunk/include/HandleManager.h@ 6937

Last change on this file since 6937 was 6937, checked in by sandervl, 24 years ago

header update

File size: 23.7 KB
Line 
1/* $Id: HandleManager.h,v 1.26 2001-10-03 13:50:58 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
39//LPSECURITY_ATTRIBUTES
40
41
42/*****************************************************************************
43 * Defines & Macros *
44 *****************************************************************************/
45
46 /* 1998/02/12 PH Correction of os2win.h */
47#undef FILE_TYPE_UNKNOWN
48#define FILE_TYPE_UNKNOWN 0x0000
49
50#undef FILE_TYPE_DISK
51#define FILE_TYPE_DISK 0x0001
52
53#undef FILE_TYPE_CHAR
54#define FILE_TYPE_CHAR 0x0002
55
56#undef FILE_TYPE_PIPE
57#define FILE_TYPE_PIPE 0x0003
58
59#undef FILE_TYPE_REMOTE
60#define FILE_TYPE_REMOTE 0x8000
61
62#ifndef INVALID_HANDLE_ERROR
63#define INVALID_HANDLE_ERROR (-1)
64#endif
65
66
67/*****************************************************************************
68 * Structures *
69 *****************************************************************************/
70
71
72/*****************************************************************************
73 * Prototypes *
74 *****************************************************************************/
75
76DWORD HMInitialize(void); /* initialize the HandleManager */
77
78DWORD HMTerminate(void); /* terminate the HandleManager */
79
80
81 /* handle manager version of GetStdHandle, Open32 can't really help us here */
82HANDLE HMGetStdHandle(DWORD nStdHandle);
83
84 /* handle manager version of GetStdHandle, Open32 can't really help us here */
85BOOL HMSetStdHandle(DWORD nStdHandle,
86 HANDLE hHandle);
87
88
89/*****************************************************************************/
90/* handle translation buffer management */
91/* */
92/* Since some Win32 applications rely (!) on 16-bit handles, we've got to do */
93/* 32-bit to 16-bit and vs vsa translation here. */
94/* Filehandle-based functions should be routed via the handlemanager instead */
95/* of going to Open32 directly. */
96/*****************************************************************************/
97
98DWORD HMHandleAllocate (PULONG phHandle16,
99 ULONG hHandle32);
100
101DWORD HMHandleFree (ULONG hHandle16);
102
103DWORD HMHandleGetUserData (ULONG hHandle16);
104DWORD HMHandleSetUserData (ULONG hHandle16, ULONG dwUserData);
105
106DWORD HMHandleValidate (ULONG hHandle16);
107
108DWORD HMHandleTranslateToWin (ULONG hHandle32,
109 PULONG phHandle16);
110
111DWORD HMHandleTranslateToOS2 (ULONG hHandle16,
112 PULONG hHandle32);
113
114DWORD HMHandleTranslateToOS2i(ULONG hHandle16);
115
116
117/*****************************************************************************
118 * Forwarders *
119 *****************************************************************************/
120
121// enable C linkage to avoid parameter mangling
122#ifdef __cplusplus__
123extern "C" {
124#endif
125
126HANDLE HMCreateEvent (LPSECURITY_ATTRIBUTES lpsa,
127 BOOL bManualReset,
128 BOOL bInitialState,
129 LPCSTR lpName);
130
131HANDLE HMCreateMutex (LPSECURITY_ATTRIBUTES lpsa,
132 BOOL bInitialOwner,
133 LPCSTR lpName);
134
135HANDLE HMCreateFile (LPCSTR lpFileName,
136 DWORD dwDesiredAccess,
137 DWORD dwShareMode,
138 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
139 DWORD dwCreationDisposition,
140 DWORD dwFlagsAndAttributes,
141 HANDLE hTemplateFile);
142
143HANDLE HMOpenFile (LPCSTR lpFileName,
144 OFSTRUCT* pOFStruct,
145 UINT fuMode);
146
147HANDLE HMOpenEvent (DWORD fdwAccess,
148 BOOL fInherit,
149 LPCSTR lpName);
150
151HANDLE HMOpenMutex (DWORD fdwAccess,
152 BOOL fInherit,
153 LPCSTR lpName);
154
155BOOL HMCloseHandle (HANDLE hObject);
156
157BOOL HMReadFile (HANDLE hFile,
158 LPVOID lpBuffer,
159 DWORD nNumberOfBytesToRead,
160 LPDWORD lpNumberOfBytesRead,
161 LPOVERLAPPED lpOverlapped);
162
163
164BOOL HMReadFileEx (HANDLE hFile,
165 LPVOID lpBuffer,
166 DWORD nNumberOfBytesToRead,
167 LPOVERLAPPED lpOverlapped,
168 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
169
170BOOL HMWriteFile (HANDLE hFile,
171 LPCVOID lpBuffer,
172 DWORD nNumberOfBytesToWrite,
173 LPDWORD lpNumberOfBytesWritten,
174 LPOVERLAPPED lpOverlapped);
175
176BOOL HMWriteFileEx (HANDLE hFile,
177 LPVOID lpBuffer,
178 DWORD nNumberOfBytesToWrite,
179 LPOVERLAPPED lpOverlapped,
180 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
181
182DWORD HMGetFileType (HANDLE hFile);
183
184DWORD HMDeviceRequest (HANDLE hFile,
185 ULONG ulRequestCode,
186 ULONG arg1,
187 ULONG arg2,
188 ULONG arg3,
189 ULONG arg4);
190
191BOOL HMGetFileInformationByHandle (HANDLE hFile,
192 BY_HANDLE_FILE_INFORMATION *pHFI);
193
194BOOL HMSetEndOfFile (HANDLE hFile);
195
196BOOL HMSetFileTime (HANDLE hFile,
197 const FILETIME *pFT1,
198 const FILETIME *pFT2,
199 const FILETIME *pFT3);
200
201BOOL HMGetFileTime (HANDLE hFile,
202 const FILETIME *pFT1,
203 const FILETIME *pFT2,
204 const FILETIME *pFT3);
205
206DWORD HMGetFileSize (HANDLE hFile,
207 PDWORD pSize);
208
209DWORD HMSetFilePointer (HANDLE hFile,
210 LONG lDistanceToMove,
211 PLONG lpDistanceToMoveHigh,
212 DWORD dwMoveMethod);
213
214BOOL HMLockFile (HFILE hFile,
215 DWORD dwFileOffsetLow,
216 DWORD dwFileOffsetHigh,
217 DWORD nNumberOfBytesToLockLow,
218 DWORD nNumberOfBytesToLockHigh);
219
220BOOL HMLockFileEx (HANDLE hFile,
221 DWORD dwFlags,
222 DWORD dwReserved,
223 DWORD nNumberOfBytesToLockLow,
224 DWORD nNumberOfBytesToLockHigh,
225 LPOVERLAPPED lpOverlapped);
226
227BOOL HMUnlockFile (HANDLE hFile,
228 DWORD dwFileOffsetLow,
229 DWORD dwFileOffsetHigh,
230 DWORD cbUnlockLow,
231 DWORD cbUnlockHigh);
232
233BOOL HMUnlockFileEx (HANDLE hFile,
234 DWORD dwReserved,
235 DWORD nNumberOfBytesToLockLow,
236 DWORD nNumberOfBytesToLockHigh,
237 LPOVERLAPPED lpOverlapped);
238
239DWORD HMWaitForSingleObject (HANDLE hObject,
240 DWORD dwTimeout);
241
242DWORD HMWaitForSingleObjectEx (HANDLE hObject,
243 DWORD dwTimeout,
244 BOOL fAlertable);
245
246DWORD HMWaitForMultipleObjects (DWORD cObjects,
247 HANDLE *lphObjects,
248 BOOL fWaitAll,
249 DWORD dwTimeout);
250
251DWORD HMWaitForMultipleObjectsEx (DWORD cObjects,
252 HANDLE *lphObjects,
253 BOOL fWaitAll,
254 DWORD dwTimeout,
255 BOOL fAlertable);
256
257DWORD HMMsgWaitForMultipleObjects (DWORD nCount,
258 HANDLE *pHandles,
259 BOOL fWaitAll,
260 DWORD dwMilliseconds,
261 DWORD dwWakeMask);
262
263BOOL HMDeviceIoControl (HANDLE hDevice,
264 DWORD dwIoControlCode,
265 LPVOID lpInBuffer,
266 DWORD nInBufferSize,
267 LPVOID lpOutBuffer,
268 DWORD nOutBufferSize,
269 LPDWORD lpBytesReturned,
270 LPOVERLAPPED lpOverlapped);
271
272BOOL HMFlushFileBuffers (HANDLE hObject);
273
274BOOL HMGetOverlappedResult (HANDLE hObject,
275 LPOVERLAPPED lpOverlapped,
276 LPDWORD lpNumberOfBytesTransferred,
277 BOOL bWait);
278
279BOOL HMReleaseMutex (HANDLE hObject);
280
281BOOL HMSetEvent (HANDLE hEvent);
282
283BOOL HMPulseEvent (HANDLE hEvent);
284
285BOOL HMResetEvent (HANDLE hEvent);
286
287HANDLE HMCreateSemaphore (LPSECURITY_ATTRIBUTES lpsa,
288 LONG lInitialCount,
289 LONG lMaximumCount,
290 LPCSTR lpszSemaphoreName);
291
292HANDLE HMOpenSemaphore (DWORD fdwAccess,
293 BOOL fInheritHandle,
294 LPCSTR lpszSemaphoreName);
295
296BOOL HMReleaseSemaphore (HANDLE hSemaphore,
297 LONG cReleaseCount,
298 LPLONG lpPreviousCount);
299
300
301HANDLE HMCreateFileMapping(
302 HFILE hFile, /* [in] Handle of file to map */
303 SECURITY_ATTRIBUTES *sa, /* [in] Optional security attributes*/
304 DWORD protect, /* [in] Protection for mapping object */
305 DWORD size_high, /* [in] High-order 32 bits of object size */
306 DWORD size_low, /* [in] Low-order 32 bits of object size */
307 LPCSTR name); /* [in] Name of file-mapping object */
308
309HANDLE HMOpenFileMapping(
310 DWORD access, /* [in] Access mode */
311 BOOL inherit, /* [in] Inherit flag */
312 LPCSTR name ); /* [in] Name of file-mapping object */
313
314LPVOID HMMapViewOfFileEx (HANDLE hFileMappingObject,
315 DWORD dwDesiredAccess,
316 DWORD dwFileOffsetHigh,
317 DWORD dwFileOffsetLow,
318 DWORD dwNumberOfBytesToMap,
319 LPVOID lpBaseAddress);
320
321BOOL HMDuplicateHandle(HANDLE srcprocess,
322 HANDLE srchandle,
323 HANDLE destprocess,
324 PHANDLE desthandle,
325 DWORD fdwAccess,
326 BOOL fInherit,
327 DWORD fdwOptions,
328 DWORD fdwOdinOptions = 0);
329
330#define DUPLICATE_SHARE_DENYNONE 1
331#define DUPLICATE_SHARE_READ 2
332#define DUPLICATE_ACCESS_READ 4
333#define DUPLICATE_ACCESS_WRITE 8
334#define DUPLICATE_ACCESS_READWRITE (DUPLICATE_ACCESS_WRITE|DUPLICATE_ACCESS_READ)
335
336//SvL: Used internally by memory mapped class
337#define HMDuplicateHandleOdin HMDuplicateHandle
338
339DWORD HMOpenThreadToken(HANDLE ThreadHandle,
340 DWORD DesiredAccess,
341 DWORD OpenAsSelf,
342 HANDLE *TokenHandle);
343
344DWORD HMOpenProcessToken(HANDLE ProcessHandle,
345 DWORD DesiredAccess,
346 DWORD dwUserData,
347 HANDLE *TokenHandle);
348
349BOOL HMCommSetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue);
350
351BOOL HMCommGetCommState(HANDLE hCommDev, LPDCB lpdcb);
352BOOL HMCommWaitCommEvent( HANDLE hCommDev,
353 LPDWORD lpfdwEvtMask,
354 LPOVERLAPPED lpo);
355
356BOOL HMCommGetCommProperties( HANDLE hCommDev,
357 LPCOMMPROP lpcmmp);
358
359BOOL HMCommGetCommMask( HANDLE hCommDev,
360 LPDWORD lpfdwEvtMask);
361
362BOOL HMCommSetCommMask( HANDLE hCommDev,
363 DWORD fdwEvtMask);
364
365BOOL HMCommPurgeComm( HANDLE hCommDev,
366 DWORD fdwAction);
367
368BOOL HMCommClearCommError( HANDLE hCommDev,
369 LPDWORD lpdwErrors,
370 LPCOMSTAT lpcst);
371
372BOOL HMCommSetCommState( HANDLE hCommDev,
373 LPDCB lpdcb);
374
375BOOL HMCommGetCommModemStatus( HANDLE hFile,
376 LPDWORD lpModemStat );
377
378BOOL HMCommGetCommTimeouts( HANDLE hCommDev,
379 LPCOMMTIMEOUTS lpctmo);
380
381BOOL HMCommSetCommTimeouts( HANDLE hCommDev,
382 LPCOMMTIMEOUTS lpctmo);
383
384BOOL HMCommTransmitCommChar( HANDLE hFile,
385 CHAR cChar );
386
387BOOL HMCommSetCommConfig( HANDLE hCommDev,
388 LPCOMMCONFIG lpCC,
389 DWORD dwSize );
390
391BOOL HMCommSetCommBreak( HANDLE hFile );
392
393BOOL HMCommGetCommConfig( HANDLE hCommDev,
394 LPCOMMCONFIG lpCC,
395 LPDWORD lpdwSize );
396
397BOOL HMCommEscapeCommFunction( HANDLE hFile,
398 UINT dwFunc );
399
400BOOL HMCommSetupComm( HANDLE hFile,
401 DWORD dwInQueue,
402 DWORD dwOutQueue);
403
404BOOL HMCommClearCommBreak(HANDLE hFile);
405
406BOOL HMCommSetDefaultCommConfig( HANDLE hCOM,
407 LPCOMMCONFIG lpCC,
408 DWORD dwSize);
409
410BOOL HMCommGetDefaultCommConfig( HANDLE hCOM,
411 LPCOMMCONFIG lpCC,
412 LPDWORD lpdwSize);
413
414HANDLE HMCreateThread(LPSECURITY_ATTRIBUTES lpsa,
415 DWORD cbStack,
416 LPTHREAD_START_ROUTINE lpStartAddr,
417 LPVOID lpvThreadParm,
418 DWORD fdwCreate,
419 LPDWORD lpIDThread,
420 BOOL fFirstThread = FALSE);
421INT HMGetThreadPriority(HANDLE hThread);
422DWORD HMSuspendThread(HANDLE hThread);
423BOOL HMSetThreadPriority(HANDLE hThread, int priority);
424BOOL HMGetThreadContext(HANDLE hThread, CONTEXT *lpContext);
425BOOL HMSetThreadContext(HANDLE hThread, const CONTEXT *lpContext);
426BOOL HMTerminateThread(HANDLE hThread, DWORD exitcode);
427DWORD HMResumeThread(HANDLE hThread);
428BOOL HMGetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
429BOOL HMSetThreadTerminated(HANDLE hThread);
430BOOL HMPeekNamedPipe(HANDLE pHMHandleData,
431 LPVOID lpvBuffer,
432 DWORD cbBuffer,
433 LPDWORD lpcbRead,
434 LPDWORD lpcbAvail,
435 LPDWORD lpcbMessage);
436
437DWORD HMCreateNamedPipe(LPCTSTR lpName,
438 DWORD dwOpenMode,
439 DWORD dwPipeMode,
440 DWORD nMaxInstances,
441 DWORD nOutBufferSize,
442 DWORD nInBufferSize,
443 DWORD nDefaultTimeOut,
444 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
445
446BOOL HMConnectNamedPipe(HANDLE hPipe, LPOVERLAPPED lpOverlapped);
447
448BOOL HMDisconnectNamedPipe(HANDLE hPipe);
449
450BOOL HMGetNamedPipeHandleState(HANDLE hPipe,
451 LPDWORD lpState,
452 LPDWORD lpCurInstances,
453 LPDWORD lpMaxCollectionCount,
454 LPDWORD lpCollectDataTimeout,
455 LPTSTR lpUserName,
456 DWORD nMaxUserNameSize);
457
458BOOL HMGetNamedPipeInfo(HANDLE hPipe,
459 LPDWORD lpFlags,
460 LPDWORD lpOutBufferSize,
461 LPDWORD lpInBufferSize,
462 LPDWORD lpMaxInstances);
463
464
465DWORD HMTransactNamedPipe(HANDLE hPipe,
466 LPVOID lpvWriteBuf,
467 DWORD cbWriteBuf,
468 LPVOID lpvReadBuf,
469 DWORD cbReadBuf,
470 LPDWORD lpcbRead,
471 LPOVERLAPPED lpo);
472
473
474BOOL HMPeekNamedPipe(HANDLE hPipe,
475 LPVOID lpvBuffer,
476 DWORD cbBuffer,
477 LPDWORD lpcbRead,
478 LPDWORD lpcbAvail,
479 LPDWORD lpcbMessage);
480
481DWORD HMCreateNamedPipe(LPCTSTR lpName,
482 DWORD dwOpenMode,
483 DWORD dwPipeMode,
484 DWORD nMaxInstances,
485 DWORD nOutBufferSize,
486 DWORD nInBufferSize,
487 DWORD nDefaultTimeOut,
488 void* lpSecurityAttributes);
489
490BOOL HMConnectNamedPipe(HANDLE hPipe, LPOVERLAPPED lpOverlapped);
491
492BOOL HMDisconnectNamedPipe(HANDLE hPipe);
493
494BOOL HMGetNamedPipeHandleState(HANDLE hPipe,
495 LPDWORD lpState,
496 LPDWORD lpCurInstances,
497 LPDWORD lpMaxCollectionCount,
498 LPDWORD lpCollectDataTimeout,
499 LPTSTR lpUserName,
500 DWORD nMaxUserNameSize);
501
502BOOL HMGetNamedPipeInfo(HANDLE hPipe,
503 LPDWORD lpFlags,
504 LPDWORD lpOutBufferSize,
505 LPDWORD lpInBufferSize,
506 LPDWORD lpMaxInstances);
507
508DWORD HMTransactNamedPipe(HANDLE hPipe,
509 LPVOID lpvWriteBuf,
510 DWORD cbWriteBuf,
511 LPVOID lpvReadBuf,
512 DWORD cbReadBuf,
513 LPDWORD lpcbRead,
514 LPOVERLAPPED lpo);
515
516BOOL HMSetNamedPipeHandleState(HANDLE hNamedPipe,
517 LPDWORD lpdwMode,
518 LPDWORD lpcbMaxCollect,
519 LPDWORD lpdwCollectDataTimeout);
520
521BOOL HMCreatePipe(PHANDLE phRead,
522 PHANDLE phWrite,
523 LPSECURITY_ATTRIBUTES lpsa,
524 DWORD cbPipe);
525
526
527//Mailslot API
528HANDLE HMCreateMailslotA(LPCSTR lpName, DWORD nMaxMessageSize,
529 DWORD lReadTimeout,
530 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
531BOOL HMGetMailslotInfo(HANDLE hMailslot,
532 LPDWORD lpMaxMessageSize,
533 LPDWORD lpNextSize,
534 LPDWORD lpMessageCount,
535 LPDWORD lpReadTimeout);
536BOOL HMSetMailslotInfo(HANDLE hMailslot,
537 DWORD dwReadTimeout);
538
539#ifdef __cplusplus__
540 }
541#endif
542
543#endif /* _HANDLEMANAGER_H_ */
Note: See TracBrowser for help on using the repository browser.