source: trunk/src/wnetap32/wksta.cpp@ 10366

Last change on this file since 10366 was 6672, checked in by phaller, 24 years ago

.

File size: 16.6 KB
Line 
1/* $Id: wksta.cpp,v 1.1 2001-09-06 22:23:41 phaller Exp $ */
2
3/*
4 *
5 * Project Odin Software License can be found in LICENSE.TXT
6 *
7 */
8/*
9 * NETAPI32 stubs
10 *
11 * Copyright 1998 Patrick Haller
12 *
13 * Note: functions that return structures/buffers seem to append strings
14 * at the end of the buffer. Currently, we just allocate the strings
15 * "normally". Therefore a caller that just does a NetApiBufferFree() on the
16 * returned buffer will leak all allocated strings.
17 *
18 */
19
20
21/****************************************************************************
22 * Includes *
23 ****************************************************************************/
24
25#include <odin.h>
26#include <odinwrap.h>
27#include <os2win.h>
28#include <misc.h>
29#include <unicode.h>
30#include <heapstring.h>
31#include <string.h>
32#include <winconst.h>
33
34#include "oslibnet.h"
35#include "lanman.h"
36
37ODINDEBUGCHANNEL(WNETAP32-WKSTA)
38
39
40/****************************************************************************
41 * Module Global Variables *
42 ****************************************************************************/
43
44
45/*****************************************************************************
46 * Name : NET_API_STATUS NetWkstaGetInfo
47 * Purpose :
48 * Parameters: LPWSTR servername
49 * DWORD level
50 * LPBYTE *bufptr
51 * Variables :
52 * Result :
53 * Remark : NT understands modes 100, 101, 102, 302, 402, and 502
54 * The APIs allocate the buffer dynamically.
55 * Status : UNTESTED STUB
56 *
57 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
58 *
59 * Author : Markus Montkowski [09.07.98 22:11:21]
60 *****************************************************************************/
61ODINFUNCTION3(NET_API_STATUS, OS2NetWkstaGetInfo,
62 LPWSTR, servername,
63 DWORD, level,
64 LPBYTE *, bufptr)
65
66{
67 dprintf(("NETAPI32: NetWkstaGetInfo(%s, %d, %08x)\n"
68 ,servername, level, *bufptr
69 ));
70
71 // Convert servername to ASCII
72 char *asciiServername = NULL;
73 if (servername) asciiServername = UnicodeToAsciiString(servername);
74
75 // @@@PH convert information modes!
76 int iOS2Level = 100;
77 switch (level)
78 {
79 case 100: iOS2Level = 10; break;
80 case 101: iOS2Level = 1; break;
81 case 102: iOS2Level = 1; break;
82 case 302: iOS2Level = 1; break;
83 case 402: iOS2Level = 1; break;
84 case 502: iOS2Level = 1; break;
85 }
86
87 ULONG ulBytesAvailable;
88 DWORD rc;
89
90 // determine required size of buffer
91 char pOS2Buffer[4096];
92 rc = OSLibNetWkstaGetInfo((const unsigned char*)asciiServername,
93 iOS2Level,
94 (unsigned char*)pOS2Buffer,
95 sizeof(pOS2Buffer),
96 &ulBytesAvailable);
97 if (asciiServername) FreeAsciiString(asciiServername);
98
99 if (rc == NERR_OK)
100 {
101 // @@@PH now convert the requested structure to UNICODE
102 switch (level)
103 {
104 case 100: // system information - guest access
105 {
106 PWKSTA_INFO_100 pwki100;
107 struct wksta_info_10 *pOS2wki10 = (struct wksta_info_10 *)pOS2Buffer;
108
109 // calculate new size for target buffer
110 int iSizeComputername = (lstrlenA((LPCSTR)pOS2wki10->wki10_computername) + 1) * 2;
111 int iSizeLangroup = (lstrlenA((LPCSTR)pOS2wki10->wki10_langroup) + 1) * 2;
112 int iSize = sizeof(WKSTA_INFO_100) + iSizeComputername + iSizeLangroup;
113
114 rc = OS2NetApiBufferAllocate(iSize, (LPVOID*)&pwki100);
115 if (!rc)
116 {
117 // pointer to the data area
118 PBYTE pData = (PBYTE)pwki100 + sizeof(WKSTA_INFO_100);
119
120 pwki100->wki100_platform_id = 0; //@@@PH dummy
121 pwki100->wki100_computername = lstrcpyAtoW( (LPWSTR)pData, (LPCSTR)pOS2wki10->wki10_computername);
122 pData += iSizeComputername;
123 pwki100->wki100_langroup = lstrcpyAtoW( (LPWSTR)pData, (LPCSTR)pOS2wki10->wki10_langroup);
124 pData += iSizeLangroup;
125 pwki100->wki100_ver_major = pOS2wki10->wki10_ver_major;
126 pwki100->wki100_ver_minor = pOS2wki10->wki10_ver_minor;
127 }
128
129 // the caller is responsible for freeing the memory!
130 *bufptr = (LPBYTE)pwki100;
131 break;
132 }
133
134
135 case 101: // system information - guest access
136 {
137 PWKSTA_INFO_101 pwki101;
138 struct wksta_info_1 *pOS2wki1 = (struct wksta_info_1 *)pOS2Buffer;
139
140 // calculate new size for target buffer
141 int iSizeComputername = (lstrlenA((LPCSTR)pOS2wki1->wki1_computername) + 1) * 2;
142 int iSizeLangroup = (lstrlenA((LPCSTR)pOS2wki1->wki1_langroup) + 1) * 2;
143 int iSizeLanroot = (lstrlenA((LPCSTR)pOS2wki1->wki1_root) + 1) * 2;
144 int iSize = sizeof(WKSTA_INFO_101) + iSizeComputername + iSizeLangroup + iSizeLanroot;
145
146 rc = OS2NetApiBufferAllocate(iSize, (LPVOID*)&pwki101);
147 if (!rc)
148 {
149 // pointer to the data area
150 PBYTE pData = (PBYTE)pwki101 + sizeof(WKSTA_INFO_101);
151
152 pwki101->wki101_platform_id = 0; //@@@PH dummy
153 pwki101->wki101_computername = lstrcpyAtoW( (LPWSTR)pData, (LPCSTR)pOS2wki1->wki1_computername);
154 pData += iSizeComputername;
155 pwki101->wki101_langroup = lstrcpyAtoW( (LPWSTR)pData, (LPCSTR)pOS2wki1->wki1_langroup);
156 pData += iSizeLangroup;
157 pwki101->wki101_ver_major = pOS2wki1->wki1_ver_major;
158 pwki101->wki101_ver_minor = pOS2wki1->wki1_ver_minor;
159 pwki101->wki101_lanroot = lstrcpyAtoW( (LPWSTR)pData, (LPCSTR)pOS2wki1->wki1_root);
160 pData += iSizeLanroot;
161 }
162
163 // the caller is responsible for freeing the memory!
164 *bufptr = (LPBYTE)pwki101;
165 break;
166 }
167
168
169 case 102: // system information - guest access
170 {
171 PWKSTA_INFO_102 pwki102;
172 struct wksta_info_1 *pOS2wki1 = (struct wksta_info_1 *)pOS2Buffer;
173
174 // calculate new size for target buffer
175 int iSizeComputername = (lstrlenA((LPCSTR)pOS2wki1->wki1_computername) + 1) * 2;
176 int iSizeLangroup = (lstrlenA((LPCSTR)pOS2wki1->wki1_langroup) + 1) * 2;
177 int iSizeLanroot = (lstrlenA((LPCSTR)pOS2wki1->wki1_root) + 1) * 2;
178 int iSize = sizeof(WKSTA_INFO_102) + iSizeComputername + iSizeLangroup + iSizeLanroot;
179
180 rc = OS2NetApiBufferAllocate(iSize, (LPVOID*)&pwki102);
181 if (!rc)
182 {
183 // pointer to the data area
184 PBYTE pData = (PBYTE)pwki102 + sizeof(WKSTA_INFO_102);
185
186 pwki102->wki102_platform_id = 0; //@@@PH dummy
187 pwki102->wki102_computername = lstrcpyAtoW( (LPWSTR)pData, (LPCSTR)pOS2wki1->wki1_computername);
188 pData += iSizeComputername;
189 pwki102->wki102_langroup = lstrcpyAtoW( (LPWSTR)pData, (LPCSTR)pOS2wki1->wki1_langroup);
190 pData += iSizeLangroup;
191 pwki102->wki102_ver_major = pOS2wki1->wki1_ver_major;
192 pwki102->wki102_ver_minor = pOS2wki1->wki1_ver_minor;
193 pwki102->wki102_lanroot = lstrcpyAtoW( (LPWSTR)pData, (LPCSTR)pOS2wki1->wki1_root);
194 pData += iSizeLanroot;
195 pwki102->wki102_logged_on_users = 0; // @@@PH dummy
196 }
197
198 // the caller is responsible for freeing the memory!
199 *bufptr = (LPBYTE)pwki102;
200 break;
201 }
202
203
204 case 502: // system information - guest access
205 {
206 PWKSTA_INFO_502 pwki502;
207 struct wksta_info_1 *pOS2wki1 = (struct wksta_info_1 *)pOS2Buffer;
208
209 rc = OS2NetApiBufferAllocate(sizeof(WKSTA_INFO_502), (LPVOID*)&pwki502);;
210 if (!rc)
211 {
212 char *hs = (char *)pOS2wki1->wki1_wrkheuristics;
213
214 pwki502->wki502_char_wait = pOS2wki1->wki1_charwait;
215 pwki502->wki502_collection_time = pOS2wki1->wki1_chartime;
216 pwki502->wki502_maximum_collection_count = pOS2wki1->wki1_charcount;
217 pwki502->wki502_keep_conn = pOS2wki1->wki1_keepconn;
218 pwki502->wki502_max_cmds = pOS2wki1->wki1_maxcmds;
219 pwki502->wki502_sess_timeout = pOS2wki1->wki1_sesstimeout;
220 pwki502->wki502_siz_char_buf = pOS2wki1->wki1_sizcharbuf;
221 pwki502->wki502_max_threads = pOS2wki1->wki1_maxthreads;
222
223 pwki502->wki502_lock_quota = 0;
224 pwki502->wki502_lock_increment = 0;
225 pwki502->wki502_lock_maximum = 0;
226 pwki502->wki502_pipe_increment = 0;
227 pwki502->wki502_pipe_maximum = 0;
228 pwki502->wki502_cache_file_timeout = 0;
229 pwki502->wki502_dormant_file_limit = 0;
230 pwki502->wki502_read_ahead_throughput = 0;
231
232 pwki502->wki502_num_mailslot_buffers = pOS2wki1->wki1_mailslots;
233 pwki502->wki502_num_srv_announce_buffers = pOS2wki1->wki1_numdgrambuf;
234 pwki502->wki502_max_illegal_datagram_events = 0;
235 pwki502->wki502_illegal_datagram_event_reset_frequency = 0;
236 pwki502->wki502_log_election_packets = FALSE;
237
238 pwki502->wki502_use_opportunistic_locking = (hs[0] != '0') ? TRUE : FALSE;
239 pwki502->wki502_use_unlock_behind = (hs[1] != '0') ? TRUE : FALSE;
240 pwki502->wki502_use_close_behind = (hs[2] != '0') ? TRUE : FALSE;
241 pwki502->wki502_buf_named_pipes = (hs[3] != '0') ? TRUE : FALSE;
242 pwki502->wki502_use_lock_read_unlock = (hs[4] != '0') ? TRUE : FALSE;
243 pwki502->wki502_utilize_nt_caching = TRUE; // sure we do ;-)
244 pwki502->wki502_use_raw_read = (hs[12] != '0') ? TRUE : FALSE;
245 pwki502->wki502_use_raw_write = (hs[13] != '0') ? TRUE : FALSE;
246 pwki502->wki502_use_write_raw_data = (hs[29] != '0') ? TRUE : FALSE;
247 pwki502->wki502_use_encryption = (hs[21] != '0') ? TRUE : FALSE;
248 pwki502->wki502_buf_files_deny_write = (hs[23] != '0') ? TRUE : FALSE;
249 pwki502->wki502_buf_read_only_files = (hs[24] != '0') ? TRUE : FALSE;
250 pwki502->wki502_force_core_create_mode = (hs[27] != '0') ? TRUE : FALSE;
251 pwki502->wki502_use_512_byte_max_transfer = FALSE; // @@@PH
252 }
253
254 // the caller is responsible for freeing the memory!
255 *bufptr = (LPBYTE)pwki502;
256 break;
257 }
258 }
259 }
260
261 // @@@PH convert return code to NT code
262 return (rc);
263}
264
265
266/*****************************************************************************
267 * Name : NET_API_STATUS NetWkstaSetInfo
268 * Purpose :
269 * Parameters: LPWSTR servername
270 * DWORD level
271 * LPBYTE buffer
272 * LPDWORD parm_err
273 * Variables :
274 * Result :
275 * Remark :
276 * Status : UNTESTED STUB
277 *
278 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
279 *
280 * Author : Markus Montkowski [09.07.98 22:11:39]
281 *****************************************************************************/
282ODINFUNCTION4(NET_API_STATUS, OS2NetWkstaSetInfo,
283 LPWSTR, servername,
284 DWORD, level,
285 LPBYTE, buffer,
286 LPDWORD, parm_err)
287
288{
289
290 dprintf(("NETAPI32: NetWkstaSetInfo(%s, %d, %08x, %08x) not implemented\n"
291 ,servername, level, buffer, parm_err
292 ));
293
294 return (NERR_BASE);
295}
296
297/*****************************************************************************
298 * Name : NET_API_STATUS NetWkstaTransportAdd
299 * Purpose :
300 * Parameters: LPWSTR servername
301 * DWORD level
302 * LPBYTE buf
303 * Variables :
304 * Result :
305 * Remark :
306 * Status : UNTESTED STUB
307 *
308 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
309 *
310 * Author : Markus Montkowski [09.07.98 22:12:18]
311 *****************************************************************************/
312ODINFUNCTION3(NET_API_STATUS, OS2NetWkstaTransportAdd,
313 LPWSTR, servername,
314 DWORD, level,
315 LPBYTE, buf)
316
317{
318
319 dprintf(("NETAPI32: NetWkstaTransportAdd(%s, %d, %08x)not implemented\n"
320 ,servername, level, buf
321 ));
322
323 return (NERR_BASE);
324}
325
326/*****************************************************************************
327 * Name : NET_API_STATUS NetWkstaTransportDel
328 * Purpose :
329 * Parameters: LPWSTR servername
330 * LPWSTR transportname
331 * DWORD ucond
332 * Variables :
333 * Result :
334 * Remark :
335 * Status : UNTESTED STUB
336 *
337 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
338 *
339 * Author : Markus Montkowski [09.07.98 22:13:11]
340 *****************************************************************************/
341ODINFUNCTION3(NET_API_STATUS, OS2NetWkstaTransportDel,
342 LPWSTR, servername,
343 LPWSTR, transportname,
344 DWORD, ucond)
345
346{
347
348 dprintf(("NETAPI32: NetWkstaTransportDel(%08x, %08x, %d) not implemented\n"
349 ,servername, transportname, ucond
350 ));
351
352 return (NERR_BASE);
353}
354
355/*****************************************************************************
356 * Name : NET_API_STATUS NetWkstaTransportEnum
357 * Purpose :
358 * Parameters: LPWSTR servername
359 * DWORD level
360 * LPBYTE *bufptr
361 * DWORD prefmaxlen
362 * LPDWORD entriesread
363 * LPDWORD totalentries
364 * LPDWORD resumehandle
365 * Variables :
366 * Result :
367 * Remark :
368 * Status : UNTESTED STUB
369 *
370 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
371 *
372 * Author : Markus Montkowski [09.07.98 22:13:44]
373 *****************************************************************************/
374ODINFUNCTION7(NET_API_STATUS, OS2NetWkstaTransportEnum,
375 LPWSTR, servername,
376 DWORD, level,
377 LPBYTE *, bufptr,
378 DWORD, prefmaxlen,
379 LPDWORD, entriesread,
380 LPDWORD, totalentries,
381 LPDWORD, resumehandle)
382
383{
384
385 dprintf(("NETAPI32: NetWkstaTransportEnum(%08x, %d, %08x, %d, %08x, %08x, %08x) not implemented\n"
386 ,servername, level, *bufptr, prefmaxlen, entriesread, totalentries, resumehandle
387 ));
388
389 return (NERR_BASE);
390}
391
392/*****************************************************************************
393 * Name : NET_API_STATUS NetWkstaUserEnum
394 * Purpose :
395 * Parameters: LPWSTR servername
396 * DWORD level
397 * LPBYTE *bufptr
398 * DWORD prefmaxlen
399 * LPDWORD entriesread
400 * LPDWORD totalentries
401 * LPDWORD resumehandle
402 * Variables :
403 * Result :
404 * Remark :
405 * Status : UNTESTED STUB
406 *
407 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
408 *
409 * Author : Markus Montkowski [09.07.98 22:14:05]
410 *****************************************************************************/
411ODINFUNCTION7(NET_API_STATUS, OS2NetWkstaUserEnum,
412 LPWSTR, servername,
413 DWORD, level,
414 LPBYTE *, bufptr,
415 DWORD, prefmaxlen,
416 LPDWORD, entriesread,
417 LPDWORD, totalentries,
418 LPDWORD, resumehandle)
419
420{
421
422 dprintf(("NETAPI32: NetWkstaUserEnum(%08x, %d, %08x, %d, %08x, %08x, %08x) not implemented\n"
423 ,servername, level, *bufptr, prefmaxlen, entriesread, totalentries, resumehandle
424 ));
425
426 return (NERR_BASE);
427}
428
429/*****************************************************************************
430 * Name : NET_API_STATUS NetWkstaUserGetInfo
431 * Purpose :
432 * Parameters: LPWSTR reserved
433 * DWORD level
434 * LPBYTE *bufptr
435 * Variables :
436 * Result :
437 * Remark :
438 * Status : UNTESTED STUB
439 *
440 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
441 *
442 * Author : Markus Montkowski [09.07.98 22:14:17]
443 *****************************************************************************/
444ODINFUNCTION3(NET_API_STATUS, OS2NetWkstaUserGetInfo,
445 LPWSTR, reserved,
446 DWORD, level,
447 LPBYTE *, bufptr)
448
449{
450
451 dprintf(("NETAPI32: NetWkstaUserGetInfo(%08x, %d, %08x) not implemented\n"
452 ,reserved, level, *bufptr
453 ));
454
455 return (NERR_BASE);
456}
457
458/*****************************************************************************
459 * Name : NET_API_STATUS NetWkstaUserSetInfo
460 * Purpose :
461 * Parameters: LPWSTR reserved
462 * DWORD level
463 * LPBYTE buf
464 * LPDWORD parm_err
465 * Variables :
466 * Result :
467 * Remark :
468 * Status : UNTESTED STUB
469 *
470 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
471 *
472 * Author : Markus Montkowski [09.07.98 22:16:08]
473 *****************************************************************************/
474ODINFUNCTION4(NET_API_STATUS, OS2NetWkstaUserSetInfo,
475 LPWSTR, reserved,
476 DWORD, level,
477 LPBYTE, buf,
478 LPDWORD, parm_err)
479
480{
481
482 dprintf(("NETAPI32: NetWkstaUserSetInfo(%08x, %d, %08x, %08x) not implemented\n"
483 ,reserved, level, buf, parm_err
484 ));
485
486 return (NERR_BASE);
487}
Note: See TracBrowser for help on using the repository browser.