source: trunk/src/kernel32/hmdevice.h

Last change on this file was 22024, checked in by dmik, 13 years ago

kernel32: Fix inverted return values in dummy HMDeviceHandler implementations.

This in particular affected GetFileInformationByHandle and other APIs. Some applications
(like Flash 10.1+) could be completely confused by the fact that the unimplemented API
returns success.

File size: 22.5 KB
RevLine 
[10132]1/* $Id: hmdevice.h,v 1.36 2003-06-02 16:25:17 sandervl Exp $ */
[111]2
3/*
4 * Project Odin Software License can be found in LICENSE.TXT
5 * Win32 Unified Handle Manager for OS/2
6 * 1999/06/17 PH Patrick Haller (phaller@gmx.net)
7 */
8
9#ifndef _HM_DEVICE_H_
10#define _HM_DEVICE_H_
11
12
13/*****************************************************************************
14 * Structures *
15 *****************************************************************************/
16
[271]17typedef struct _HMHANDLEDATA
18{
19 HANDLE hHMHandle; /* a copy of the OS/2 system handle */
[7549]20 HANDLE hWin32Handle; // win32 handle
[271]21
22 DWORD dwAccess; /* access mode of the handle */
23 DWORD dwShare; /* share mode of the handle */
24 DWORD dwCreation; /* dwCreationDisposition */
25 DWORD dwFlags; /* flags and attributes */
26
[664]27 DWORD dwUserData;
28 DWORD dwInternalType;
[9653]29 DWORD dwHandleInformation; /* Set by SetHandleInformation */
[664]30
[271]31 LPVOID lpHandlerData; /* for private use of the device handler */
[4285]32 LPVOID lpDeviceData;
[271]33} HMHANDLEDATA, *PHMHANDLEDATA;
34
[21302]35/*****************************************************************************
36 * Remark *
37 *****************************************************************************
38 */
[271]39
40
[21302]41/*****************************************************************************
42 * Includes *
43 *****************************************************************************/
44
45
46
[111]47class HMDeviceHandler
48{
49 /***************************************************************************
50 * The following methods are called by the handle manager request router. *
51 * They are exact replacements for the corresponding Win32 calls. *
52 ***************************************************************************/
53
54public:
55 LPCSTR lpHMDeviceName; /* a reference to the device name */
56
57 HMDeviceHandler(LPCSTR lpDeviceName); /* constructor with device name */
58
[4588]59 //checks if device name belongs to this class
60 virtual BOOL FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength);
61
[111]62 /***********************************
63 * handle generic standard methods *
64 ***********************************/
65
66 /* this is a special internal method to handle non-standard requests */
67 /* such as GetConsoleMode() for console devices */
68 virtual DWORD _DeviceRequest (PHMHANDLEDATA pHMHandleData,
69 ULONG ulRequestCode,
70 ULONG arg1,
71 ULONG arg2,
72 ULONG arg3,
73 ULONG arg4);
74
[9748]75 virtual BOOL DuplicateHandle(HANDLE srchandle, PHMHANDLEDATA pHMHandleData, HANDLE srcprocess,
[690]76 PHMHANDLEDATA pHMSrcHandle,
77 HANDLE destprocess,
78 DWORD fdwAccess,
79 BOOL fInherit,
[3948]80 DWORD fdwOptions,
81 DWORD fdwOdinOptions);
[690]82
[7549]83 /* this is a handler method for calls to CreateFile() */
84 virtual DWORD CreateFile (LPCSTR lpFileName,
[111]85 PHMHANDLEDATA pHMHandleData,
86 PVOID lpSecurityAttributes,
87 PHMHANDLEDATA pHMHandleDataTemplate);
88
[7549]89 /* this is a handler method for calls to OpenFile() */
90 virtual DWORD OpenFile (LPCSTR lpFileName,
[111]91 PHMHANDLEDATA pHMHandleData,
92 OFSTRUCT* pOFStruct,
93 UINT fuMode);
94
[7549]95 /* this is a handler method for calls to CloseHandle() */
[5587]96 virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData);
[111]97
[9653]98 virtual BOOL SetHandleInformation(PHMHANDLEDATA pHMHandleData,
99 DWORD dwMask,
100 DWORD dwFlags);
101
[7549]102 /* this is a handler method for calls to ReadFile/Ex */
[2050]103 virtual BOOL ReadFile (PHMHANDLEDATA pHMHandleData,
[111]104 LPCVOID lpBuffer,
105 DWORD nNumberOfBytesToRead,
106 LPDWORD lpNumberOfBytesRead,
[7549]107 LPOVERLAPPED lpOverlapped,
108 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
[111]109
[7549]110 /* this is a handler method for calls to WriteFile/Ex */
[2050]111 virtual BOOL WriteFile (PHMHANDLEDATA pHMHandleData,
[111]112 LPCVOID lpBuffer,
113 DWORD nNumberOfBytesToWrite,
114 LPDWORD lpNumberOfBytesWritten,
[7549]115 LPOVERLAPPED lpOverlapped,
116 LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine);
[111]117
[7549]118 /* this is a handler method for calls to GetFileType() */
[111]119 virtual DWORD GetFileType (PHMHANDLEDATA pHMHandleData);
120
121
122 /* this is a handler method for calls to GetFileInformationByHandle() */
[22024]123 virtual BOOL GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
124 BY_HANDLE_FILE_INFORMATION *pHFI);
[111]125
126 /* this is a handler method for calls to SetEndOfFile() */
127 virtual BOOL SetEndOfFile(PHMHANDLEDATA pHMHandleData);
128
129 /* this is a handler method for calls to SetFileTime() */
130 virtual BOOL SetFileTime (PHMHANDLEDATA pHMHandleData,
131 LPFILETIME pFT1,
132 LPFILETIME pFT2,
133 LPFILETIME pFT3);
134
[3588]135 /* this is a handler method for calls to GetFileTime() */
136 virtual BOOL GetFileTime (PHMHANDLEDATA pHMHandleData,
137 LPFILETIME pFT1,
138 LPFILETIME pFT2,
139 LPFILETIME pFT3);
140
[111]141 /* this is a handler method for calls to GetFileSize() */
142 virtual DWORD GetFileSize(PHMHANDLEDATA pHMHandleData,
143 PDWORD pSizeHigh);
144
145 /* this is a handler method for calls to SetFilePointer() */
146 virtual DWORD SetFilePointer(PHMHANDLEDATA pHMHandleData,
147 LONG lDistanceToMove,
148 PLONG lpDistanceToMoveHigh,
149 DWORD dwMoveMethod);
150
[278]151 /* this is a handler method for calls to FlushFileBuffers() */
152 virtual BOOL FlushFileBuffers(PHMHANDLEDATA pHMHandleData);
153
154 /* this is a handler method for calls to GetOverlappedResult() */
155 virtual BOOL GetOverlappedResult (PHMHANDLEDATA pHMHandleData,
156 LPOVERLAPPED lpOverlapped,
157 LPDWORD arg3,
158 BOOL arg4);
159
[111]160 /* this is a handler method for calls to LockFile() */
[3765]161 virtual BOOL LockFile(PHMHANDLEDATA pHMHandleData,
[111]162 DWORD arg2,
163 DWORD arg3,
164 DWORD arg4,
165 DWORD arg5);
166
167 /* this is a handler method for calls to LockFileEx() */
[3765]168 virtual BOOL LockFileEx(PHMHANDLEDATA pHMHandleData,
[111]169 DWORD dwFlags,
170 DWORD dwReserved,
171 DWORD nNumberOfBytesToLockLow,
172 DWORD nNumberOfBytesToLockHigh,
173 LPOVERLAPPED lpOverlapped);
174
175 /* this is a handler method for calls to UnlockFile() */
[3765]176 virtual BOOL UnlockFile(PHMHANDLEDATA pHMHandleData,
[111]177 DWORD arg2,
178 DWORD arg3,
179 DWORD arg4,
180 DWORD arg5);
181
182 /* this is a handler method for calls to UnlockFileEx() */
[3765]183 virtual BOOL UnlockFileEx(PHMHANDLEDATA pHMHandleData,
[111]184 DWORD dwReserved,
185 DWORD nNumberOfBytesToLockLow,
186 DWORD nNumberOfBytesToLockHigh,
187 LPOVERLAPPED lpOverlapped);
[278]188
[6060]189 /* this is a handler method for calls to WaitForSingleObject */
[278]190 virtual DWORD WaitForSingleObject (PHMHANDLEDATA pHMHandleData,
191 DWORD dwTimeout);
192
[6060]193 /* this is a handler method for calls to WaitForSingleObjectEx */
[278]194 virtual DWORD WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
195 DWORD dwTimeout,
196 BOOL fAlertable);
197
[6060]198 virtual DWORD MsgWaitForMultipleObjects(PHMHANDLEDATA pHMHandleData,
199 DWORD nCount,
200 PHANDLE pHandles,
201 BOOL fWaitAll,
202 DWORD dwMilliseconds,
203 DWORD dwWakeMask);
[278]204
[6060]205 virtual DWORD WaitForMultipleObjects (PHMHANDLEDATA pHMHandleData,
206 DWORD cObjects,
207 PHANDLE lphObjects,
208 BOOL fWaitAll,
209 DWORD dwTimeout);
210
[278]211 /***************************************************************************
212 * Events *
213 ***************************************************************************/
214
[7549]215 /* this is a handler method for calls to CreateEvent() */
[278]216 virtual DWORD CreateEvent (PHMHANDLEDATA pHMHandleData,
217 LPSECURITY_ATTRIBUTES lpsa,
218 BOOL fManualReset,
219 BOOL fInitialState,
220 LPCSTR lpszEventName);
221
[7549]222 /* this is a handler method for calls to OpenEvent() */
[278]223 virtual DWORD OpenEvent (PHMHANDLEDATA pHMHandleData,
224 BOOL fInheritHandle,
225 LPCSTR lpszEventName);
226
[7549]227 /* this is a handle method for calls to ResetEvent() */
[278]228 virtual BOOL ResetEvent (PHMHANDLEDATA pHMHandleData);
229
[7549]230 /* this is a handle method for calls to SetEvent() */
[278]231 virtual BOOL SetEvent (PHMHANDLEDATA pHMHandleData);
232
[7549]233 /* this is a handle method for calls to PulseEvent() */
[278]234 virtual BOOL PulseEvent (PHMHANDLEDATA pHMHandleData);
235
236
237 /***************************************************************************
238 * Mutex *
239 ***************************************************************************/
240
[7549]241 /* this is a handler method for calls to CreateMutex() */
[278]242 virtual DWORD CreateMutex (PHMHANDLEDATA pHMHandleData,
243 LPSECURITY_ATTRIBUTES lpsa,
244 BOOL fInitialOwner,
245 LPCSTR lpszMutexName);
246
[7549]247 /* this is a handler method for calls to OpenMutex() */
[278]248 virtual DWORD OpenMutex (PHMHANDLEDATA pHMHandleData,
249 BOOL fInheritHandle,
250 LPCSTR lpszMutexName);
251
[7549]252 /* this is a handle method for calls to ReleaseMutex() */
[278]253 virtual BOOL ReleaseMutex(PHMHANDLEDATA pHMHandleData);
254
255
256 /***************************************************************************
257 * Semaphores *
258 ***************************************************************************/
259
[7549]260 /* this is a handler method for calls to CreateSemaphore() */
[278]261 virtual DWORD CreateSemaphore (PHMHANDLEDATA pHMHandleData,
262 LPSECURITY_ATTRIBUTES lpsa,
263 LONG lInitialCount,
264 LONG lMaximumCount,
265 LPCSTR lpszSemaphoreName);
266
[7549]267 /* this is a handler method for calls to OpenSemaphore() */
[278]268 virtual DWORD OpenSemaphore (PHMHANDLEDATA pHMHandleData,
269 BOOL fInheritHandle,
270 LPCSTR lpszSemaphoreName);
271
[7549]272 /* this is a handle method for calls to ReleaseSemaphore() */
[278]273 virtual BOOL ReleaseSemaphore(PHMHANDLEDATA pHMHandleData,
274 LONG cReleaseCount,
275 LPLONG lpPreviousCount);
[659]276
[7549]277 /* this is a handler method for calls to CreateFileMapping() */
[659]278 virtual DWORD CreateFileMapping (PHMHANDLEDATA pHMHandleData,
279 HANDLE hFile,
280 LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
281 DWORD flProtect,
282 DWORD dwMaximumSizeHigh,
283 DWORD dwMaximumSizeLow,
[5011]284 LPCSTR lpName);
[659]285
[7549]286 /* this is a handler method for calls to OpenFileMapping() */
[659]287 virtual DWORD OpenFileMapping (PHMHANDLEDATA pHMHandleData,
[4285]288 DWORD access, /* [in] Access mode */
[659]289 BOOL fInherit,
[664]290 LPCSTR lpName);
[659]291
[7549]292 /* this is a handler method for calls to MapViewOfFileEx() */
[659]293 virtual LPVOID MapViewOfFileEx (PHMHANDLEDATA pHMHandleData,
294 DWORD dwDesiredAccess,
295 DWORD dwFileOffsetHigh,
296 DWORD dwFileOffsetLow,
297 DWORD dwNumberOfBytesToMap,
[7549]298 LPVOID lpBaseAddress);
[659]299
[7549]300 /* this is a handler method for calls to DeviceIoControl() */
[1713]301 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode,
302 LPVOID lpInBuffer, DWORD nInBufferSize,
303 LPVOID lpOutBuffer, DWORD nOutBufferSize,
304 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);
305
[7457]306 virtual BOOL CancelIo (PHMHANDLEDATA pHMHandleData);
307
[1858]308 /* COM ports */
[4285]309 virtual BOOL SetupComm( PHMHANDLEDATA pHMHandleData,
310 DWORD dwInQueue,
311 DWORD dwOutQueue);
[1858]312
[4285]313 virtual BOOL GetCommState( PHMHANDLEDATA pHMHandleData,
314 LPDCB lpdcb);
315 virtual BOOL WaitCommEvent( PHMHANDLEDATA pHMHandleData,
316 LPDWORD lpfdwEvtMask,
317 LPOVERLAPPED lpo);
[1858]318
[4285]319 virtual BOOL GetCommProperties( PHMHANDLEDATA pHMHandleData,
320 LPCOMMPROP lpcmmp);
321 virtual BOOL GetCommMask( PHMHANDLEDATA pHMHandleData,
322 LPDWORD lpfdwEvtMask);
323 virtual BOOL SetCommMask( PHMHANDLEDATA pHMHandleData,
324 DWORD fdwEvtMask);
325 virtual BOOL PurgeComm( PHMHANDLEDATA pHMHandleData,
326 DWORD fdwAction);
327 virtual BOOL ClearCommError( PHMHANDLEDATA pHMHandleData,
328 LPDWORD lpdwErrors,
329 LPCOMSTAT lpcst);
330 virtual BOOL SetCommState( PHMHANDLEDATA pHMHandleData,
331 LPDCB lpdcb) ;
332 virtual BOOL GetCommModemStatus( PHMHANDLEDATA pHMHandleData,
333 LPDWORD lpModemStat );
334 virtual BOOL GetCommTimeouts( PHMHANDLEDATA pHMHandleData,
335 LPCOMMTIMEOUTS lpctmo);
336 virtual BOOL SetCommTimeouts( PHMHANDLEDATA pHMHandleData,
337 LPCOMMTIMEOUTS lpctmo);
338 virtual BOOL TransmitCommChar( PHMHANDLEDATA pHMHandleData,
339 CHAR cChar );
340 virtual BOOL SetCommConfig( PHMHANDLEDATA pHMHandleData,
341 LPCOMMCONFIG lpCC,
342 DWORD dwSize );
343 virtual BOOL SetCommBreak( PHMHANDLEDATA pHMHandleData );
344 virtual BOOL GetCommConfig( PHMHANDLEDATA pHMHandleData,
345 LPCOMMCONFIG lpCC,
346 LPDWORD lpdwSize );
347 virtual BOOL EscapeCommFunction( PHMHANDLEDATA pHMHandleData,
348 UINT dwFunc );
349 virtual BOOL ClearCommBreak( PHMHANDLEDATA pHMHandleData);
350 virtual BOOL SetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
351 LPCOMMCONFIG lpCC,
352 DWORD dwSize);
353 virtual BOOL GetDefaultCommConfig( PHMHANDLEDATA pHMHandleData,
354 LPCOMMCONFIG lpCC,
355 LPDWORD lpdwSize);
356
357 virtual DWORD OpenThreadToken(PHMHANDLEDATA pHMHandleData,
[2129]358 HANDLE ThreadHandle,
359 BOOL OpenAsSelf);
360
361 virtual DWORD OpenProcessToken(PHMHANDLEDATA pHMHandleData, DWORD dwUserData,
362 HANDLE ProcessHandle);
363
[3128]364 virtual HANDLE CreateThread(PHMHANDLEDATA pHMHandleData,
365 LPSECURITY_ATTRIBUTES lpsa,
366 DWORD cbStack,
367 LPTHREAD_START_ROUTINE lpStartAddr,
368 LPVOID lpvThreadParm,
369 DWORD fdwCreate,
[4285]370 LPDWORD lpIDThread,
[21302]371 BOOL fRegisterThread);
[3128]372
[7532]373 virtual INT GetThreadPriority(HANDLE hThread, PHMHANDLEDATA pHMHandleData);
374 virtual DWORD SuspendThread(HANDLE hThread, PHMHANDLEDATA pHMHandleData);
375 virtual BOOL SetThreadPriority(HANDLE hThread, PHMHANDLEDATA pHMHandleData, int priority);
[3128]376
[7532]377 virtual BOOL GetThreadContext(HANDLE hThread, PHMHANDLEDATA pHMHandleData, PCONTEXT lpContext);
378 virtual BOOL SetThreadContext(HANDLE hThread, PHMHANDLEDATA pHMHandleData, const CONTEXT *lpContext);
[9748]379 virtual BOOL GetThreadTimes(HANDLE hThread, PHMHANDLEDATA pHMHandleData,
380 FILETIME *lpCreationTime, FILETIME *lpExitTime,
381 FILETIME *lpKernelTime, FILETIME *lpUserTime);
[3128]382
[7532]383 virtual BOOL TerminateThread(HANDLE hThread, PHMHANDLEDATA pHMHandleData, DWORD exitcode);
384 virtual DWORD ResumeThread(HANDLE hThread, PHMHANDLEDATA pHMHandleData);
385 virtual BOOL SetThreadTerminated(HANDLE hThread, PHMHANDLEDATA pHMHandleData);
[3128]386
[7532]387 virtual BOOL GetExitCodeThread(HANDLE hThread, PHMHANDLEDATA pHMHandleData, LPDWORD lpExitCode);
[3819]388
389 /* Named pipes */
390 virtual BOOL PeekNamedPipe(PHMHANDLEDATA pHMHandleData,
391 LPVOID lpvBuffer,
392 DWORD cbBuffer,
393 LPDWORD lpcbRead,
394 LPDWORD lpcbAvail,
395 LPDWORD lpcbMessage);
396
397 virtual DWORD CreateNamedPipe(PHMHANDLEDATA pHMHandleData, LPCTSTR lpName, DWORD dwOpenMode, DWORD dwPipeMode,
398 DWORD nMaxInstances, DWORD nOutBufferSize,
399 DWORD nInBufferSize, DWORD nDefaultTimeOut,
400 LPSECURITY_ATTRIBUTES lpSecurityAttributes);
401
402 virtual BOOL ConnectNamedPipe(PHMHANDLEDATA pHMHandleData, LPOVERLAPPED lpOverlapped);
403
404 virtual BOOL DisconnectNamedPipe(PHMHANDLEDATA pHMHandleData);
405
406 virtual BOOL GetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
407 LPDWORD lpState,
408 LPDWORD lpCurInstances,
409 LPDWORD lpMaxCollectionCount,
410 LPDWORD lpCollectDataTimeout,
411 LPTSTR lpUserName,
412 DWORD nMaxUserNameSize);
413
414 virtual BOOL GetNamedPipeInfo(PHMHANDLEDATA pHMHandleData,
415 LPDWORD lpFlags,
416 LPDWORD lpOutBufferSize,
417 LPDWORD lpInBufferSize,
418 LPDWORD lpMaxInstances);
419
420
[22024]421 virtual BOOL TransactNamedPipe(PHMHANDLEDATA pHMHandleData,
[3819]422 LPVOID lpvWriteBuf,
423 DWORD cbWriteBuf,
424 LPVOID lpvReadBuf,
425 DWORD cbReadBuf,
426 LPDWORD lpcbRead,
427 LPOVERLAPPED lpo);
428
429 virtual BOOL SetNamedPipeHandleState(PHMHANDLEDATA pHMHandleData,
430 LPDWORD lpdwMode,
431 LPDWORD lpcbMaxCollect,
432 LPDWORD lpdwCollectDataTimeout);
433
[5587]434 virtual BOOL GetMailslotInfo(PHMHANDLEDATA pHMHandleData,
435 LPDWORD lpMaxMessageSize,
436 LPDWORD lpNextSize,
437 LPDWORD lpMessageCount,
438 LPDWORD lpReadTimeout);
439
440 virtual BOOL SetMailslotInfo(PHMHANDLEDATA pHMHandleData,
441 DWORD dwReadTimeout);
[10073]442
443 virtual BOOL GetFileNameFromHandle(PHMHANDLEDATA pHMHandleData, LPSTR lpszFileName, DWORD cbFileName);
444
[111]445};
446
447
[21916]448#ifdef __cplusplus
449extern "C" {
450#endif
451
[111]452/*****************************************************************************
453 * Prototypes *
454 *****************************************************************************/
455
456 /* register a new device with the handle manager */
[21916]457DWORD HMDeviceRegister(LPCSTR pszDeviceName,
[111]458 HMDeviceHandler *pDeviceHandler);
459
[21916]460DWORD HMDeviceRegisterEx(LPCSTR pszDeviceName,
[4285]461 HMDeviceHandler *pDeviceHandler,
462 VOID *pDevData);
[111]463
[21916]464#ifdef __cplusplus
465} // extern "C"
466#endif
[21302]467
468#include "hmhandle.h"
469
[111]470#endif /* _HM_DEVICE_H_ */
471
Note: See TracBrowser for help on using the repository browser.