source: trunk/include/HandleManager.h@ 7456

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

header updates

File size: 23.6 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
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,
97 ULONG hHandle32);
98
99DWORD HMHandleFree (ULONG hHandle16);
100
101DWORD HMHandleGetUserData (ULONG hHandle16);
102DWORD HMHandleSetUserData (ULONG hHandle16, ULONG dwUserData);
103
104DWORD HMHandleValidate (ULONG hHandle16);
105
106DWORD HMHandleTranslateToWin (ULONG hHandle32,
107 PULONG phHandle16);
108
109DWORD HMHandleTranslateToOS2 (ULONG hHandle16,
110 PULONG hHandle32);
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
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 HMCloseHandle (HANDLE hObject);
154
155BOOL HMReadFile (HANDLE hFile,
156 LPVOID lpBuffer,
157 DWORD nNumberOfBytesToRead,
158 LPDWORD lpNumberOfBytesRead,
159 LPOVERLAPPED lpOverlapped);
160
161
162BOOL HMReadFileEx (HANDLE hFile,
163 LPVOID lpBuffer,
164 DWORD nNumberOfBytesToRead,
165 LPOVERLAPPED lpOverlapped,
166 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
167
168BOOL HMWriteFile (HANDLE hFile,
169 LPCVOID lpBuffer,
170 DWORD nNumberOfBytesToWrite,
171 LPDWORD lpNumberOfBytesWritten,
172 LPOVERLAPPED lpOverlapped);
173
174BOOL HMWriteFileEx (HANDLE hFile,
175 LPVOID lpBuffer,
176 DWORD nNumberOfBytesToWrite,
177 LPOVERLAPPED lpOverlapped,
178 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
179
180DWORD HMGetFileType (HANDLE hFile);
181
182DWORD HMDeviceRequest (HANDLE hFile,
183 ULONG ulRequestCode,
184 ULONG arg1,
185 ULONG arg2,
186 ULONG arg3,
187 ULONG arg4);
188
189BOOL HMGetFileInformationByHandle (HANDLE hFile,
190 BY_HANDLE_FILE_INFORMATION *pHFI);
191
192BOOL HMSetEndOfFile (HANDLE hFile);
193
194BOOL HMSetFileTime (HANDLE hFile,
195 const FILETIME *pFT1,
196 const FILETIME *pFT2,
197 const FILETIME *pFT3);
198
199BOOL HMGetFileTime (HANDLE hFile,
200 const FILETIME *pFT1,
201 const FILETIME *pFT2,
202 const FILETIME *pFT3);
203
204DWORD HMGetFileSize (HANDLE hFile,
205 PDWORD pSize);
206
207DWORD HMSetFilePointer (HANDLE hFile,
208 LONG lDistanceToMove,
209 PLONG lpDistanceToMoveHigh,
210 DWORD dwMoveMethod);
211
212BOOL HMLockFile (HFILE hFile,
213 DWORD dwFileOffsetLow,
214 DWORD dwFileOffsetHigh,
215 DWORD nNumberOfBytesToLockLow,
216 DWORD nNumberOfBytesToLockHigh);
217
218BOOL HMLockFileEx (HANDLE hFile,
219 DWORD dwFlags,
220 DWORD dwReserved,
221 DWORD nNumberOfBytesToLockLow,
222 DWORD nNumberOfBytesToLockHigh,
223 LPOVERLAPPED lpOverlapped);
224
225BOOL HMUnlockFile (HANDLE hFile,
226 DWORD dwFileOffsetLow,
227 DWORD dwFileOffsetHigh,
228 DWORD cbUnlockLow,
229 DWORD cbUnlockHigh);
230
231BOOL HMUnlockFileEx (HANDLE hFile,
232 DWORD dwReserved,
233 DWORD nNumberOfBytesToLockLow,
234 DWORD nNumberOfBytesToLockHigh,
235 LPOVERLAPPED lpOverlapped);
236
237DWORD HMWaitForSingleObject (HANDLE hObject,
238 DWORD dwTimeout);
239
240DWORD HMWaitForSingleObjectEx (HANDLE hObject,
241 DWORD dwTimeout,
242 BOOL fAlertable);
243
244DWORD HMWaitForMultipleObjects (DWORD cObjects,
245 HANDLE *lphObjects,
246 BOOL fWaitAll,
247 DWORD dwTimeout);
248
249DWORD HMWaitForMultipleObjectsEx (DWORD cObjects,
250 HANDLE *lphObjects,
251 BOOL fWaitAll,
252 DWORD dwTimeout,
253 BOOL fAlertable);
254
255DWORD HMMsgWaitForMultipleObjects (DWORD nCount,
256 HANDLE *pHandles,
257 BOOL fWaitAll,
258 DWORD dwMilliseconds,
259 DWORD dwWakeMask);
260
261BOOL HMDeviceIoControl (HANDLE hDevice,
262 DWORD dwIoControlCode,
263 LPVOID lpInBuffer,
264 DWORD nInBufferSize,
265 LPVOID lpOutBuffer,
266 DWORD nOutBufferSize,
267 LPDWORD lpBytesReturned,
268 LPOVERLAPPED lpOverlapped);
269
270BOOL HMCancelIo (HANDLE hDevice);
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.