source: trunk/include/HandleManager.h@ 3819

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

PD: added handlemanager support for named & unnamed pipes

File size: 21.2 KB
RevLine 
[3819]1/* $Id: HandleManager.h,v 1.21 2000-07-12 18:20:43 sandervl Exp $ */
[262]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
[781]34#ifdef _OS2WIN_H
35#include <winos2def.h>
36#endif
37
[776]38#ifndef __WINE_WINDEF_H
[1857]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
[262]71#endif
72
73
[776]74//LPSECURITY_ATTRIBUTES
75
76
[262]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,
[3124]134 ULONG hHandle32);
[262]135
136DWORD HMHandleFree (ULONG hHandle16);
137
[2129]138DWORD HMHandleGetUserData (ULONG hHandle16);
139
[262]140DWORD HMHandleValidate (ULONG hHandle16);
141
142DWORD HMHandleTranslateToWin (ULONG hHandle32,
[3124]143 PULONG phHandle16);
[262]144
145DWORD HMHandleTranslateToOS2 (ULONG hHandle16,
[3124]146 PULONG hHandle32);
[262]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
[278]160HANDLE HMCreateEvent (LPSECURITY_ATTRIBUTES lpsa,
161 BOOL bManualReset,
162 BOOL bInitialState,
163 LPCSTR lpName);
[262]164
[278]165HANDLE HMCreateMutex (LPSECURITY_ATTRIBUTES lpsa,
166 BOOL bInitialOwner,
167 LPCSTR lpName);
[262]168
[278]169HANDLE HMCreateFile (LPCSTR lpFileName,
170 DWORD dwDesiredAccess,
171 DWORD dwShareMode,
172 LPSECURITY_ATTRIBUTES lpSecurityAttributes,
173 DWORD dwCreationDisposition,
174 DWORD dwFlagsAndAttributes,
175 HANDLE hTemplateFile);
[262]176
[278]177HANDLE HMOpenFile (LPCSTR lpFileName,
178 OFSTRUCT* pOFStruct,
179 UINT fuMode);
[262]180
[278]181HANDLE HMOpenEvent (DWORD fdwAccess,
182 BOOL fInherit,
183 LPCSTR lpName);
[262]184
[278]185HANDLE HMOpenMutex (DWORD fdwAccess,
186 BOOL fInherit,
187 LPCSTR lpName);
[262]188
[278]189BOOL HMCloseHandle (HANDLE hObject);
[262]190
[278]191BOOL HMReadFile (HANDLE hFile,
192 LPVOID lpBuffer,
193 DWORD nNumberOfBytesToRead,
194 LPDWORD lpNumberOfBytesRead,
195 LPOVERLAPPED lpOverlapped);
[262]196
[3640]197
198BOOL HMReadFileEx (HANDLE hFile,
199 LPVOID lpBuffer,
200 DWORD nNumberOfBytesToRead,
201 LPOVERLAPPED lpOverlapped,
202 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
203
[278]204BOOL HMWriteFile (HANDLE hFile,
205 LPCVOID lpBuffer,
206 DWORD nNumberOfBytesToWrite,
207 LPDWORD lpNumberOfBytesWritten,
208 LPOVERLAPPED lpOverlapped);
[262]209
[3640]210BOOL HMWriteFileEx (HANDLE hFile,
211 LPVOID lpBuffer,
212 DWORD nNumberOfBytesToWrite,
213 LPOVERLAPPED lpOverlapped,
214 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
215
[278]216DWORD HMGetFileType (HANDLE hFile);
[262]217
[278]218DWORD HMDeviceRequest (HANDLE hFile,
219 ULONG ulRequestCode,
220 ULONG arg1,
221 ULONG arg2,
222 ULONG arg3,
223 ULONG arg4);
[262]224
[278]225BOOL HMGetFileInformationByHandle (HANDLE hFile,
226 BY_HANDLE_FILE_INFORMATION *pHFI);
[262]227
[278]228BOOL HMSetEndOfFile (HANDLE hFile);
[262]229
[278]230BOOL HMSetFileTime (HANDLE hFile,
231 const FILETIME *pFT1,
232 const FILETIME *pFT2,
233 const FILETIME *pFT3);
[262]234
[3590]235BOOL HMGetFileTime (HANDLE hFile,
236 const FILETIME *pFT1,
237 const FILETIME *pFT2,
238 const FILETIME *pFT3);
239
[278]240DWORD HMGetFileSize (HANDLE hFile,
241 PDWORD pSize);
[262]242
[278]243DWORD HMSetFilePointer (HANDLE hFile,
244 LONG lDistanceToMove,
245 PLONG lpDistanceToMoveHigh,
246 DWORD dwMoveMethod);
[262]247
[278]248BOOL HMLockFile (HFILE hFile,
249 DWORD dwFileOffsetLow,
250 DWORD dwFileOffsetHigh,
251 DWORD nNumberOfBytesToLockLow,
252 DWORD nNumberOfBytesToLockHigh);
[262]253
[278]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
[2129]291DWORD HMMsgWaitForMultipleObjects (DWORD nCount,
292 HANDLE *pHandles,
293 BOOL fWaitAll,
294 DWORD dwMilliseconds,
295 DWORD dwWakeMask);
296
[278]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
[664]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 */
[776]332 LPCSTR name); /* [in] Name of file-mapping object */
[659]333
[664]334HANDLE HMOpenFileMapping(
335 DWORD access, /* [in] Access mode */
336 BOOL inherit, /* [in] Inherit flag */
337 LPCSTR name ); /* [in] Name of file-mapping object */
[659]338
339LPVOID HMMapViewOfFileEx (HANDLE hFileMappingObject,
340 DWORD dwDesiredAccess,
341 DWORD dwFileOffsetHigh,
342 DWORD dwFileOffsetLow,
343 DWORD dwNumberOfBytesToMap,
[676]344 LPVOID lpBaseAddress);
[659]345
[689]346BOOL HMDuplicateHandle(HANDLE srcprocess,
347 HANDLE srchandle,
348 HANDLE destprocess,
349 PHANDLE desthandle,
350 DWORD fdwAccess,
351 BOOL fInherit,
352 DWORD fdwOptions);
353
[2129]354DWORD HMOpenThreadToken(HANDLE ThreadHandle,
355 DWORD DesiredAccess,
[2326]356 DWORD OpenAsSelf,
[2129]357 HANDLE *TokenHandle);
358
359DWORD HMOpenProcessToken(HANDLE ProcessHandle,
360 DWORD DesiredAccess,
361 DWORD dwUserData,
362 HANDLE *TokenHandle);
363
[1856]364BOOL HMSetupComm(HANDLE hFile, DWORD dwInQueue, DWORD dwOutQueue);
365
[1857]366BOOL HMGetCommState(INT hCommDev, LPDCB lpdcb);
367
[3124]368HANDLE HMCreateThread(LPSECURITY_ATTRIBUTES lpsa,
369 DWORD cbStack,
370 LPTHREAD_START_ROUTINE lpStartAddr,
371 LPVOID lpvThreadParm,
372 DWORD fdwCreate,
[3138]373 LPDWORD lpIDThread,
374 BOOL fFirstThread = FALSE);
[3124]375INT HMGetThreadPriority(HANDLE hThread);
376DWORD HMSuspendThread(HANDLE hThread);
377BOOL HMSetThreadPriority(HANDLE hThread, int priority);
378BOOL HMGetThreadContext(HANDLE hThread, CONTEXT *lpContext);
379BOOL HMSetThreadContext(HANDLE hThread, const CONTEXT *lpContext);
380BOOL HMTerminateThread(HANDLE hThread, DWORD exitcode);
381DWORD HMResumeThread(HANDLE hThread);
382BOOL HMGetExitCodeThread(HANDLE hThread, LPDWORD lpExitCode);
383BOOL HMSetThreadTerminated(HANDLE hThread);
[3819]384BOOL HMPeekNamedPipe(HANDLE pHMHandleData,
385 LPVOID lpvBuffer,
386 DWORD cbBuffer,
387 LPDWORD lpcbRead,
388 LPDWORD lpcbAvail,
389 LPDWORD lpcbMessage);
[3124]390
[3819]391DWORD HMCreateNamedPipe(LPCTSTR lpName,
392 DWORD dwOpenMode,
393 DWORD dwPipeMode,
394 DWORD nMaxInstances,
395 DWORD nOutBufferSize,
396 DWORD nInBufferSize,
397 DWORD nDefaultTimeOut,
398 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
399
400BOOL HMConnectNamedPipe(HANDLE hPipe, LPOVERLAPPED lpOverlapped);
401
402BOOL HMDisconnectNamedPipe(HANDLE hPipe);
403
404BOOL HMGetNamedPipeHandleState(HANDLE hPipe,
405 LPDWORD lpState,
406 LPDWORD lpCurInstances,
407 LPDWORD lpMaxCollectionCount,
408 LPDWORD lpCollectDataTimeout,
409 LPTSTR lpUserName,
410 DWORD nMaxUserNameSize);
411
412BOOL HMGetNamedPipeInfo(HANDLE hPipe,
413 LPDWORD lpFlags,
414 LPDWORD lpOutBufferSize,
415 LPDWORD lpInBufferSize,
416 LPDWORD lpMaxInstances);
417
418
419DWORD HMTransactNamedPipe(HANDLE hPipe,
420 LPVOID lpvWriteBuf,
421 DWORD cbWriteBuf,
422 LPVOID lpvReadBuf,
423 DWORD cbReadBuf,
424 LPDWORD lpcbRead,
425 LPOVERLAPPED lpo);
426
427
428BOOL HMPeekNamedPipe(HANDLE hPipe,
429 LPVOID lpvBuffer,
430 DWORD cbBuffer,
431 LPDWORD lpcbRead,
432 LPDWORD lpcbAvail,
433 LPDWORD lpcbMessage);
434
435DWORD HMCreateNamedPipe(LPCTSTR lpName,
436 DWORD dwOpenMode,
437 DWORD dwPipeMode,
438 DWORD nMaxInstances,
439 DWORD nOutBufferSize,
440 DWORD nInBufferSize,
441 DWORD nDefaultTimeOut,
442 void* lpSecurityAttributes);
443
444BOOL HMConnectNamedPipe(HANDLE hPipe, LPOVERLAPPED lpOverlapped);
445
446BOOL HMDisconnectNamedPipe(HANDLE hPipe);
447
448BOOL HMGetNamedPipeHandleState(HANDLE hPipe,
449 LPDWORD lpState,
450 LPDWORD lpCurInstances,
451 LPDWORD lpMaxCollectionCount,
452 LPDWORD lpCollectDataTimeout,
453 LPTSTR lpUserName,
454 DWORD nMaxUserNameSize);
455
456BOOL HMGetNamedPipeInfo(HANDLE hPipe,
457 LPDWORD lpFlags,
458 LPDWORD lpOutBufferSize,
459 LPDWORD lpInBufferSize,
460 LPDWORD lpMaxInstances);
461
462DWORD HMTransactNamedPipe(HANDLE hPipe,
463 LPVOID lpvWriteBuf,
464 DWORD cbWriteBuf,
465 LPVOID lpvReadBuf,
466 DWORD cbReadBuf,
467 LPDWORD lpcbRead,
468 LPOVERLAPPED lpo);
469
470BOOL HMSetNamedPipeHandleState(HANDLE hNamedPipe,
471 LPDWORD lpdwMode,
472 LPDWORD lpcbMaxCollect,
473 LPDWORD lpdwCollectDataTimeout);
474
475BOOL HMCreatePipe(PHANDLE phRead,
476 PHANDLE phWrite,
477 LPSECURITY_ATTRIBUTES lpsa,
478 DWORD cbPipe);
479
[262]480#ifdef __cplusplus__
481 }
482#endif
483
484#endif /* _HANDLEMANAGER_H_ */
Note: See TracBrowser for help on using the repository browser.