source: trunk/include/HandleManager.h@ 9747

Last change on this file since 9747 was 9747, checked in by sandervl, 23 years ago

Support DuplicateHandle for threads

File size: 23.5 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
[9652]153BOOL HMSetHandleInformation (HANDLE hObject,
154 DWORD dwMask,
155 DWORD dwFlags);
156
157BOOL HMGetHandleInformation (HANDLE hObject,
158 LPDWORD lpdwFlags);
159
[278]160BOOL HMCloseHandle (HANDLE hObject);
[262]161
[278]162BOOL HMReadFile (HANDLE hFile,
163 LPVOID lpBuffer,
164 DWORD nNumberOfBytesToRead,
165 LPDWORD lpNumberOfBytesRead,
[3640]166 LPOVERLAPPED lpOverlapped,
167 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
168
[278]169BOOL HMWriteFile (HANDLE hFile,
170 LPCVOID lpBuffer,
171 DWORD nNumberOfBytesToWrite,
172 LPDWORD lpNumberOfBytesWritten,
[7548]173 LPOVERLAPPED lpOverlapped,
174 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
[262]175
[278]176DWORD HMGetFileType (HANDLE hFile);
[262]177
[278]178DWORD HMDeviceRequest (HANDLE hFile,
179 ULONG ulRequestCode,
180 ULONG arg1,
181 ULONG arg2,
182 ULONG arg3,
183 ULONG arg4);
[262]184
[278]185BOOL HMGetFileInformationByHandle (HANDLE hFile,
186 BY_HANDLE_FILE_INFORMATION *pHFI);
[262]187
[278]188BOOL HMSetEndOfFile (HANDLE hFile);
[262]189
[278]190BOOL HMSetFileTime (HANDLE hFile,
191 const FILETIME *pFT1,
192 const FILETIME *pFT2,
193 const FILETIME *pFT3);
[262]194
[3590]195BOOL HMGetFileTime (HANDLE hFile,
196 const FILETIME *pFT1,
197 const FILETIME *pFT2,
198 const FILETIME *pFT3);
199
[278]200DWORD HMGetFileSize (HANDLE hFile,
201 PDWORD pSize);
[262]202
[278]203DWORD HMSetFilePointer (HANDLE hFile,
204 LONG lDistanceToMove,
205 PLONG lpDistanceToMoveHigh,
206 DWORD dwMoveMethod);
[262]207
[278]208BOOL HMLockFile (HFILE hFile,
209 DWORD dwFileOffsetLow,
210 DWORD dwFileOffsetHigh,
211 DWORD nNumberOfBytesToLockLow,
212 DWORD nNumberOfBytesToLockHigh);
[262]213
[278]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
[4285]251DWORD HMMsgWaitForMultipleObjects (DWORD nCount,
252 HANDLE *pHandles,
253 BOOL fWaitAll,
254 DWORD dwMilliseconds,
255 DWORD dwWakeMask);
[2129]256
[4183]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
[7456]266BOOL HMCancelIo (HANDLE hDevice);
267
[278]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
[664]297HANDLE HMCreateFileMapping(
298 HFILE 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 */
[776]303 LPCSTR name); /* [in] Name of file-mapping object */
[659]304
[664]305HANDLE HMOpenFileMapping(
306 DWORD access, /* [in] Access mode */
307 BOOL inherit, /* [in] Inherit flag */
308 LPCSTR name ); /* [in] Name of file-mapping object */
[659]309
310LPVOID HMMapViewOfFileEx (HANDLE hFileMappingObject,
311 DWORD dwDesiredAccess,
312 DWORD dwFileOffsetHigh,
313 DWORD dwFileOffsetLow,
314 DWORD dwNumberOfBytesToMap,
[4285]315 LPVOID lpBaseAddress);
[659]316
[689]317BOOL HMDuplicateHandle(HANDLE srcprocess,
318 HANDLE srchandle,
319 HANDLE destprocess,
320 PHANDLE desthandle,
321 DWORD fdwAccess,
322 BOOL fInherit,
[3951]323 DWORD fdwOptions,
324 DWORD fdwOdinOptions = 0);
[689]325
[4285]326#define DUPLICATE_SHARE_DENYNONE 1
327#define DUPLICATE_SHARE_READ 2
328#define DUPLICATE_ACCESS_READ 4
329#define DUPLICATE_ACCESS_WRITE 8
330#define DUPLICATE_ACCESS_READWRITE (DUPLICATE_ACCESS_WRITE|DUPLICATE_ACCESS_READ)
[3951]331
332//SvL: Used internally by memory mapped class
333#define HMDuplicateHandleOdin HMDuplicateHandle
334
[2129]335DWORD HMOpenThreadToken(HANDLE ThreadHandle,
336 DWORD DesiredAccess,
[2326]337 DWORD OpenAsSelf,
[2129]338 HANDLE *TokenHandle);
339
340DWORD HMOpenProcessToken(HANDLE ProcessHandle,
341 DWORD DesiredAccess,
342 DWORD dwUserData,
343 HANDLE *TokenHandle);
344
[4285]345BOOL HMCommSetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue);
[1856]346
[4285]347BOOL HMCommGetCommState(HANDLE hCommDev, LPDCB lpdcb);
348BOOL HMCommWaitCommEvent( HANDLE hCommDev,
349 LPDWORD lpfdwEvtMask,
350 LPOVERLAPPED lpo);
[1857]351
[4285]352BOOL HMCommGetCommProperties( HANDLE hCommDev,
353 LPCOMMPROP lpcmmp);
354
355BOOL HMCommGetCommMask( HANDLE hCommDev,
356 LPDWORD lpfdwEvtMask);
357
358BOOL HMCommSetCommMask( HANDLE hCommDev,
359 DWORD fdwEvtMask);
360
361BOOL HMCommPurgeComm( HANDLE hCommDev,
362 DWORD fdwAction);
363
364BOOL HMCommClearCommError( HANDLE hCommDev,
365 LPDWORD lpdwErrors,
366 LPCOMSTAT lpcst);
367
368BOOL HMCommSetCommState( HANDLE hCommDev,
369 LPDCB lpdcb);
370
371BOOL HMCommGetCommModemStatus( HANDLE hFile,
372 LPDWORD lpModemStat );
373
374BOOL HMCommGetCommTimeouts( HANDLE hCommDev,
375 LPCOMMTIMEOUTS lpctmo);
376
377BOOL HMCommSetCommTimeouts( HANDLE hCommDev,
378 LPCOMMTIMEOUTS lpctmo);
379
380BOOL HMCommTransmitCommChar( HANDLE hFile,
381 CHAR cChar );
382
383BOOL HMCommSetCommConfig( HANDLE hCommDev,
384 LPCOMMCONFIG lpCC,
385 DWORD dwSize );
386
387BOOL HMCommSetCommBreak( HANDLE hFile );
388
389BOOL HMCommGetCommConfig( HANDLE hCommDev,
390 LPCOMMCONFIG lpCC,
391 LPDWORD lpdwSize );
392
393BOOL HMCommEscapeCommFunction( HANDLE hFile,
394 UINT dwFunc );
395
396BOOL HMCommSetupComm( HANDLE hFile,
397 DWORD dwInQueue,
398 DWORD dwOutQueue);
399
400BOOL HMCommClearCommBreak(HANDLE hFile);
401
402BOOL HMCommSetDefaultCommConfig( HANDLE hCOM,
403 LPCOMMCONFIG lpCC,
404 DWORD dwSize);
405
406BOOL HMCommGetDefaultCommConfig( HANDLE hCOM,
407 LPCOMMCONFIG lpCC,
408 LPDWORD lpdwSize);
409
[3124]410HANDLE HMCreateThread(LPSECURITY_ATTRIBUTES lpsa,
411 DWORD cbStack,
412 LPTHREAD_START_ROUTINE lpStartAddr,
413 LPVOID lpvThreadParm,
414 DWORD fdwCreate,
[3138]415 LPDWORD lpIDThread,
416 BOOL fFirstThread = FALSE);
[3124]417INT HMGetThreadPriority(HANDLE hThread);
418DWORD HMSuspendThread(HANDLE hThread);
419BOOL HMSetThreadPriority(HANDLE hThread, int priority);
420BOOL HMGetThreadContext(HANDLE hThread, CONTEXT *lpContext);
421BOOL HMSetThreadContext(HANDLE hThread, const CONTEXT *lpContext);
[9747]422BOOL HMGetThreadTimes(HANDLE hThread, FILETIME *lpCreationTime,
423 FILETIME *lpExitTime, FILETIME *lpKernelTime,
424 FILETIME *lpUserTime);
[3124]425BOOL HMTerminateThread(HANDLE hThread, DWORD exitcode);
426DWORD HMResumeThread(HANDLE hThread);
427BOOL HMGetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
428BOOL HMSetThreadTerminated(HANDLE hThread);
[3819]429BOOL HMPeekNamedPipe(HANDLE pHMHandleData,
430 LPVOID lpvBuffer,
431 DWORD cbBuffer,
432 LPDWORD lpcbRead,
433 LPDWORD lpcbAvail,
434 LPDWORD lpcbMessage);
[3124]435
[4183]436DWORD HMCreateNamedPipe(LPCTSTR lpName,
437 DWORD dwOpenMode,
[3819]438 DWORD dwPipeMode,
[4183]439 DWORD nMaxInstances,
[3819]440 DWORD nOutBufferSize,
[4183]441 DWORD nInBufferSize,
[3819]442 DWORD nDefaultTimeOut,
443 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
444
445BOOL HMConnectNamedPipe(HANDLE hPipe, LPOVERLAPPED lpOverlapped);
446
447BOOL HMDisconnectNamedPipe(HANDLE hPipe);
448
449BOOL HMGetNamedPipeHandleState(HANDLE hPipe,
450 LPDWORD lpState,
451 LPDWORD lpCurInstances,
452 LPDWORD lpMaxCollectionCount,
453 LPDWORD lpCollectDataTimeout,
454 LPTSTR lpUserName,
455 DWORD nMaxUserNameSize);
456
457BOOL HMGetNamedPipeInfo(HANDLE hPipe,
458 LPDWORD lpFlags,
459 LPDWORD lpOutBufferSize,
460 LPDWORD lpInBufferSize,
461 LPDWORD lpMaxInstances);
462
463
464DWORD HMTransactNamedPipe(HANDLE hPipe,
465 LPVOID lpvWriteBuf,
466 DWORD cbWriteBuf,
467 LPVOID lpvReadBuf,
468 DWORD cbReadBuf,
469 LPDWORD lpcbRead,
470 LPOVERLAPPED lpo);
471
472
473BOOL HMPeekNamedPipe(HANDLE hPipe,
474 LPVOID lpvBuffer,
475 DWORD cbBuffer,
476 LPDWORD lpcbRead,
477 LPDWORD lpcbAvail,
478 LPDWORD lpcbMessage);
479
[4183]480DWORD HMCreateNamedPipe(LPCTSTR lpName,
481 DWORD dwOpenMode,
[3819]482 DWORD dwPipeMode,
[4183]483 DWORD nMaxInstances,
[3819]484 DWORD nOutBufferSize,
[4183]485 DWORD nInBufferSize,
[3819]486 DWORD nDefaultTimeOut,
487 void* lpSecurityAttributes);
488
489BOOL HMConnectNamedPipe(HANDLE hPipe, LPOVERLAPPED lpOverlapped);
490
491BOOL HMDisconnectNamedPipe(HANDLE hPipe);
492
493BOOL HMGetNamedPipeHandleState(HANDLE hPipe,
494 LPDWORD lpState,
495 LPDWORD lpCurInstances,
496 LPDWORD lpMaxCollectionCount,
497 LPDWORD lpCollectDataTimeout,
498 LPTSTR lpUserName,
499 DWORD nMaxUserNameSize);
500
501BOOL HMGetNamedPipeInfo(HANDLE hPipe,
502 LPDWORD lpFlags,
503 LPDWORD lpOutBufferSize,
504 LPDWORD lpInBufferSize,
505 LPDWORD lpMaxInstances);
506
507DWORD HMTransactNamedPipe(HANDLE hPipe,
508 LPVOID lpvWriteBuf,
509 DWORD cbWriteBuf,
510 LPVOID lpvReadBuf,
511 DWORD cbReadBuf,
512 LPDWORD lpcbRead,
513 LPOVERLAPPED lpo);
514
515BOOL HMSetNamedPipeHandleState(HANDLE hNamedPipe,
516 LPDWORD lpdwMode,
517 LPDWORD lpcbMaxCollect,
518 LPDWORD lpdwCollectDataTimeout);
519
520BOOL HMCreatePipe(PHANDLE phRead,
521 PHANDLE phWrite,
[4183]522 LPSECURITY_ATTRIBUTES lpsa,
[3819]523 DWORD cbPipe);
524
[5590]525
526//Mailslot API
527HANDLE HMCreateMailslotA(LPCSTR lpName, DWORD nMaxMessageSize,
528 DWORD lReadTimeout,
529 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
530BOOL HMGetMailslotInfo(HANDLE hMailslot,
531 LPDWORD lpMaxMessageSize,
532 LPDWORD lpNextSize,
533 LPDWORD lpMessageCount,
534 LPDWORD lpReadTimeout);
535BOOL HMSetMailslotInfo(HANDLE hMailslot,
536 DWORD dwReadTimeout);
537
[262]538#ifdef __cplusplus__
539 }
540#endif
541
542#endif /* _HANDLEMANAGER_H_ */
Note: See TracBrowser for help on using the repository browser.