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

Last change on this file since 22018 was 21302, checked in by ydario, 16 years ago

Kernel32 updates.

File size: 8.7 KB
Line 
1/* $Id: hmopen32.cpp,v 1.30 2003-02-04 11:28:59 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
85BOOL HMDeviceOpen32Class::CloseHandle(PHMHANDLEDATA pHMHandleData)
86{
87 BOOL bRC;
88
89 dprintfl(("KERNEL32: HandleManager::Open32::CloseHandle(%08x) %p\n",
90 pHMHandleData, pHMHandleData->hHMHandle));
91
92 bRC = O32_CloseHandle(pHMHandleData->hHMHandle);
93
94 dprintfl(("KERNEL32: HandleManager::Open32::CloseHandle returned %08xh\n",
95 bRC));
96
97 return 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(HANDLE srchandle, PHMHANDLEDATA pHMHandleData, HANDLE srcprocess,
114 PHMHANDLEDATA pHMSrcHandle,
115 HANDLE destprocess,
116 DWORD fdwAccess,
117 BOOL fInherit,
118 DWORD fdwOptions,
119 DWORD fdwOdinOptions)
120{
121 BOOL rc;
122
123 dprintf(("KERNEL32:HandleManager::Open32::DuplicateHandle %s(%08x,%08x,%08x,%08x,%08x)\n",
124 lpHMDeviceName, pHMHandleData, srcprocess, pHMSrcHandle->hHMHandle, destprocess));
125
126 pHMHandleData->hHMHandle = 0;
127 rc = O32_DuplicateHandle(srcprocess, pHMSrcHandle->hHMHandle, destprocess, &pHMHandleData->hHMHandle, fdwAccess, fInherit, fdwOptions);
128
129 return rc;
130}
131
132/*****************************************************************************
133 * Name : DWORD HMDeviceOpen32Class::GetFileType
134 * Purpose : determine the handle type
135 * Parameters: PHMHANDLEDATA pHMHandleData
136 * Variables :
137 * Result : API returncode
138 * Remark :
139 * Status :
140 *
141 * Author : Patrick Haller [Wed, 1998/02/11 20:44]
142 *****************************************************************************/
143
144DWORD HMDeviceOpen32Class::GetFileType(PHMHANDLEDATA pHMHandleData)
145{
146 dprintfl(("KERNEL32: HandleManager::Open32::GetFileType %s(%08x)\n",
147 lpHMDeviceName,
148 pHMHandleData));
149
150 return O32_GetFileType(pHMHandleData->hHMHandle);
151}
152
153
154/*****************************************************************************
155 * Name : DWORD HMDeviceOpen32Class::GetFileInformationByHandle
156 * Purpose : determine the handle type
157 * Parameters: PHMHANDLEDATA pHMHandleData
158 * BY_HANDLE_FILE_INFORMATION* pHFI
159 * Variables :
160 * Result : API returncode
161 * Remark :
162 * Status :
163 *
164 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
165 *****************************************************************************/
166
167DWORD HMDeviceOpen32Class::GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
168 BY_HANDLE_FILE_INFORMATION* pHFI)
169{
170 dprintfl(("KERNEL32: HandleManager::Open32::GetFileInformationByHandle %s(%08xh,%08xh)\n",
171 lpHMDeviceName,
172 pHMHandleData,
173 pHFI));
174
175 return O32_GetFileInformationByHandle(pHMHandleData->hHMHandle,
176 pHFI);
177}
178
179/*****************************************************************************
180 * Name : DWORD HMDeviceOpen32Class::WaitForSingleObject
181 * Purpose : object synchronization
182 * Parameters: PHMHANDLEDATA pHMHandleData
183 * DWORD dwTimeout
184 * Variables :
185 * Result : API returncode
186 * Remark :
187 * Status :
188 *
189 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
190 *****************************************************************************/
191
192DWORD HMDeviceOpen32Class::WaitForSingleObject(PHMHANDLEDATA pHMHandleData,
193 DWORD dwTimeout)
194{
195 DWORD rc;
196#ifdef DEBUG
197 DWORD starttime, endtime;
198#endif
199
200 dprintfl(("KERNEL32: HandleManager::Open32::WaitForSingleObject(%08xh %08xh)\n",
201 pHMHandleData->hHMHandle,
202 dwTimeout));
203
204#ifdef DEBUG
205 if(dwTimeout) {
206 starttime = O32_GetCurrentTime();
207 }
208#endif
209 rc = (O32_WaitForSingleObject(pHMHandleData->hHMHandle,
210 dwTimeout));
211#ifdef DEBUG
212 if(dwTimeout) {
213 endtime = O32_GetCurrentTime();
214 dprintf2(("KERNEL32: HandleManager::WaitForSingleObject %x %x delta = %x (rc=%x)", pHMHandleData->hHMHandle, dwTimeout, endtime - starttime, rc));
215 }
216 else dprintf2(("KERNEL32: HandleManager::WaitForSingleObject %x 0 rc=%x", pHMHandleData->hHMHandle, rc));
217#endif
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.