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

Last change on this file since 5587 was 5587, checked in by sandervl, 24 years ago

added mailslot implemenation, named pipe fixes + FreeLibraryAndExitThread

File size: 8.8 KB
Line 
1/* $Id: hmopen32.cpp,v 1.29 2001-04-26 13:22:47 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)\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 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 return O32_GetFileType(pHMHandleData->hHMHandle);
157}
158
159
160/*****************************************************************************
161 * Name : DWORD HMDeviceOpen32Class::GetFileInformationByHandle
162 * Purpose : determine the handle type
163 * Parameters: PHMHANDLEDATA pHMHandleData
164 * BY_HANDLE_FILE_INFORMATION* pHFI
165 * Variables :
166 * Result : API returncode
167 * Remark :
168 * Status :
169 *
170 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
171 *****************************************************************************/
172
173DWORD HMDeviceOpen32Class::GetFileInformationByHandle(PHMHANDLEDATA pHMHandleData,
174 BY_HANDLE_FILE_INFORMATION* pHFI)
175{
176 dprintfl(("KERNEL32: HandleManager::Open32::GetFileInformationByHandle %s(%08xh,%08xh)\n",
177 lpHMDeviceName,
178 pHMHandleData,
179 pHFI));
180
181 return O32_GetFileInformationByHandle(pHMHandleData->hHMHandle,
182 pHFI);
183}
184
185/*****************************************************************************
186 * Name : DWORD HMDeviceOpen32Class::WaitForSingleObject
187 * Purpose : object synchronization
188 * Parameters: PHMHANDLEDATA pHMHandleData
189 * DWORD dwTimeout
190 * Variables :
191 * Result : API returncode
192 * Remark :
193 * Status :
194 *
195 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
196 *****************************************************************************/
197
198DWORD HMDeviceOpen32Class::WaitForSingleObject(PHMHANDLEDATA pHMHandleData,
199 DWORD dwTimeout)
200{
201 DWORD rc;
202#ifdef DEBUG
203 DWORD starttime, endtime;
204#endif
205
206 dprintfl(("KERNEL32: HandleManager::Open32::WaitForSingleObject(%08xh %08xh)\n",
207 pHMHandleData->hHMHandle,
208 dwTimeout));
209
210#ifdef DEBUG
211 if(dwTimeout) {
212 starttime = O32_GetCurrentTime();
213 }
214#endif
215 rc = (O32_WaitForSingleObject(pHMHandleData->hHMHandle,
216 dwTimeout));
217#ifdef DEBUG
218 if(dwTimeout) {
219 endtime = O32_GetCurrentTime();
220 dprintf2(("KERNEL32: HandleManager::WaitForSingleObject %x %x delta = %x (rc=%x)", pHMHandleData->hHMHandle, dwTimeout, endtime - starttime, rc));
221 }
222 else dprintf2(("KERNEL32: HandleManager::WaitForSingleObject %x 0 rc=%x", pHMHandleData->hHMHandle, rc));
223#endif
224 return rc;
225}
226
227
228/*****************************************************************************
229 * Name : DWORD HMDeviceOpen32Class::WaitForSingleObjectEx
230 * Purpose : object synchronization
231 * Parameters: PHMHANDLEDATA pHMHandleData
232 * DWORD dwTimeout
233 * BOOL fAlertable
234 * Variables :
235 * Result : API returncode
236 * Remark :
237 * Status :
238 *
239 * Author : Patrick Haller [Wed, 1999/06/17 20:44]
240 *****************************************************************************/
241
242DWORD HMDeviceOpen32Class::WaitForSingleObjectEx(PHMHANDLEDATA pHMHandleData,
243 DWORD dwTimeout,
244 BOOL fAlertable)
245{
246 dprintfl(("KERNEL32: HandleManager::Open32::WaitForSingleObjectEx(%08xh,%08h,%08xh) not implemented correctly.\n",
247 pHMHandleData->hHMHandle,
248 dwTimeout,
249 fAlertable));
250
251 //@@@PH: WARNING mapped to WaitForSingleObject simply. fAlertable missing!
252 return (O32_WaitForSingleObject(pHMHandleData->hHMHandle,
253 dwTimeout));
254}
255
Note: See TracBrowser for help on using the repository browser.