source: trunk/src/kernel32/hmopen32.cpp@ 3948

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

mmap + share hack

File size: 8.8 KB
Line 
1/* $Id: hmopen32.cpp,v 1.25 2000-08-04 21:12:08 sandervl Exp $ */
2
3/*
4 * Project Odin Software License can be found in LICENSE.TXT
5 * Win32 Unified Handle Manager for OS/2
6 */
7
8
9/*****************************************************************************
10 * Remark *
11 *****************************************************************************
12 */
13
14//#define DEBUG_LOCAL
15
16#ifdef DEBUG_LOCAL
17# define dprintfl(a) dprintf(a)
18#else
19inline void ignore_dprintf(...){}
20# define dprintfl(a) ignore_dprintf(a)
21#endif
22
23/*****************************************************************************
24 * Includes *
25 *****************************************************************************/
26
27#include <os2win.h>
28#include <string.h>
29#include "HandleManager.h"
30#include "HMOpen32.h"
31#include "mmap.h"
32
33#define DBG_LOCALLOG DBG_hmopen32
34#include "dbglocal.h"
35
36/*****************************************************************************
37 * Defines *
38 *****************************************************************************/
39
40
41/*****************************************************************************
42 * Structures *
43 *****************************************************************************/
44
45/*****************************************************************************
46 * Name : HMDeviceOpen32Class::_DeviceRequest
47 * Purpose : entry method for special request functions
48 * Parameters: ULONG ulRequestCode
49 * various parameters as required
50 * Variables :
51 * Result :
52 * Remark : the standard behaviour is to return an error code for non-
53 * existant request codes
54 * Status :
55 *
56 * Author : Patrick Haller [Wed, 1998/02/11 20:44]
57 *****************************************************************************/
58DWORD HMDeviceOpen32Class::_DeviceRequest (PHMHANDLEDATA pHMHandleData,
59 ULONG ulRequestCode,
60 ULONG arg1,
61 ULONG arg2,
62 ULONG arg3,
63 ULONG arg4)
64{
65 dprintfl(("KERNEL32: HandleManager::Open32::_DeviceRequest %s(%08x,%08x) - stub?\n",
66 lpHMDeviceName,
67 pHMHandleData,
68 ulRequestCode));
69
70 return(ERROR_INVALID_FUNCTION);
71}
72
73/*****************************************************************************
74 * Name : DWORD HMDeviceOpen32Class::CloseHandle
75 * Purpose : close the handle
76 * Parameters: PHMHANDLEDATA pHMHandleData
77 * Variables :
78 * Result : API returncode
79 * Remark :
80 * Status :
81 *
82 * Author : Patrick Haller [Wed, 1998/02/11 20:44]
83 *****************************************************************************/
84
85DWORD HMDeviceOpen32Class::CloseHandle(PHMHANDLEDATA pHMHandleData)
86{
87 BOOL bRC;
88
89 dprintfl(("KERNEL32: HandleManager::Open32::CloseHandle(%08x)\n",
90 pHMHandleData->hHMHandle));
91
92 bRC = O32_CloseHandle(pHMHandleData->hHMHandle);
93
94 dprintfl(("KERNEL32: HandleManager::Open32::CloseHandle returned %08xh\n",
95 bRC));
96
97 return (DWORD)bRC;
98}
99
100/*****************************************************************************
101 * Name : HMDeviceHandler::DuplicateHandle
102 * Purpose : dummy version
103 * Parameters:
104 * various parameters as required
105 * Variables :
106 * Result :
107 * Remark : the standard behaviour is to return an error code for non-
108 * existant request codes
109 * Status :
110 *
111 * Author : Patrick Haller [Wed, 1998/02/11 20:44]
112 *****************************************************************************/
113BOOL HMDeviceOpen32Class::DuplicateHandle(PHMHANDLEDATA pHMHandleData, HANDLE srcprocess,
114 PHMHANDLEDATA pHMSrcHandle,
115 HANDLE destprocess,
116 PHANDLE desthandle,
117 DWORD fdwAccess,
118 BOOL fInherit,
119 DWORD fdwOptions,
120 DWORD fdwOdinOptions)
121{
122 BOOL rc;
123
124 dprintf(("KERNEL32:HandleManager::Open32::DuplicateHandle %s(%08x,%08x,%08x,%08x,%08x)\n",
125 lpHMDeviceName,
126 pHMHandleData,
127 srcprocess, pHMSrcHandle->hHMHandle, destprocess, desthandle));
128
129 rc = O32_DuplicateHandle(srcprocess, pHMSrcHandle->hHMHandle, destprocess, desthandle, fdwAccess, fInherit, fdwOptions);
130
131 if(rc == TRUE) {
132 pHMHandleData->hHMHandle = *desthandle;
133 return TRUE;
134 }
135 else return FALSE;
136}
137
138/*****************************************************************************
139 * Name : DWORD HMDeviceOpen32Class::GetFileType
140 * Purpose : determine the handle type
141 * Parameters: PHMHANDLEDATA pHMHandleData
142 * Variables :
143 * Result : API returncode
144 * Remark :
145 * Status :
146 *
147 * Author : Patrick Haller [Wed, 1998/02/11 20:44]
148 *****************************************************************************/
149
150DWORD HMDeviceOpen32Class::GetFileType(PHMHANDLEDATA pHMHandleData)
151{
152 dprintfl(("KERNEL32: HandleManager::Open32::GetFileType %s(%08x)\n",
153 lpHMDeviceName,
154 pHMHandleData));
155
156 //TODO: return FILE_TYPE_UNKNOWN for standard in/out handles; correct??
157 return O32_GetFileType(pHMHandleData->hHMHandle);
158}
159
160
161/*****************************************************************************
162 * Name : DWORD HMDeviceOpen32Class::GetFileInformationByHandle
163 * Purpose : determine the handle type
164 * Parameters: PHMHANDLEDATA pHMHandleData
165 * BY_HANDLE_FILE_INFORMATION* pHFI
166 * Variables :
167 * Result : API returncode
168 * Remark :
169 * Status :
170 *
171 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
172 *****************************************************************************/
173
174DWORD HMDeviceOpen32Class::GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
175 BY_HANDLE_FILE_INFORMATION* pHFI)
176{
177 dprintfl(("KERNEL32: HandleManager::Open32::GetFileInformationByHandle %s(%08xh,%08xh)\n",
178 lpHMDeviceName,
179 pHMHandleData,
180 pHFI));
181
182 return O32_GetFileInformationByHandle(pHMHandleData->hHMHandle,
183 pHFI);
184}
185
186/*****************************************************************************
187 * Name : DWORD HMDeviceOpen32Class::WaitForSingleObject
188 * Purpose : object synchronization
189 * Parameters: PHMHANDLEDATA pHMHandleData
190 * DWORD dwTimeout
191 * Variables :
192 * Result : API returncode
193 * Remark :
194 * Status :
195 *
196 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
197 *****************************************************************************/
198
199DWORD HMDeviceOpen32Class::WaitForSingleObject(PHMHANDLEDATA pHMHandleData,
200 DWORD dwTimeout)
201{
202 DWORD rc, starttime, endtime;
203
204 dprintfl(("KERNEL32: HandleManager::Open32::WaitForSingleObject(%08xh,%08h)\n",
205 pHMHandleData->hHMHandle,
206 dwTimeout));
207
208 if(dwTimeout) {
209 starttime = O32_GetCurrentTime();
210 }
211 rc = (O32_WaitForSingleObject(pHMHandleData->hHMHandle,
212 dwTimeout));
213 if(dwTimeout) {
214 endtime = O32_GetCurrentTime();
215 dprintf(("KERNEL32: HandleManager::WaitForSingleObject %x delta = %x (rc=%x)", pHMHandleData->hHMHandle, endtime - starttime, rc));
216 }
217 else dprintf(("KERNEL32: HandleManager::WaitForSingleObject %x rc=%x", pHMHandleData->hHMHandle, rc));
218 return rc;
219}
220
221
222/*****************************************************************************
223 * Name : DWORD HMDeviceOpen32Class::WaitForSingleObjectEx
224 * Purpose : object synchronization
225 * Parameters: PHMHANDLEDATA pHMHandleData
226 * DWORD dwTimeout
227 * BOOL fAlertable
228 * Variables :
229 * Result : API returncode
230 * Remark :
231 * Status :
232 *
233 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
234 *****************************************************************************/
235
236DWORD HMDeviceOpen32Class::WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
237 DWORD dwTimeout,
238 BOOL fAlertable)
239{
240 dprintfl(("KERNEL32: HandleManager::Open32::WaitForSingleObjectEx(%08xh,%08h,%08xh) not implemented correctly.\n",
241 pHMHandleData->hHMHandle,
242 dwTimeout,
243 fAlertable));
244
245 //@@@PH: WARNING mapped to WaitForSingleObject simply. fAlertable missing!
246 return (O32_WaitForSingleObject(pHMHandleData->hHMHandle,
247 dwTimeout));
248}
249
Note: See TracBrowser for help on using the repository browser.