source: trunk/include/HandleManager.h@ 7548

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

header update

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