source: trunk/src/wnetap32/wksta.cpp

Last change on this file was 21916, checked in by dmik, 14 years ago

Merge branch gcc-kmk to trunk.

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