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

Last change on this file since 10366 was 8052, checked in by sandervl, 23 years ago

PH: Netbios updates (currently disabled)

File size: 46.3 KB
Line 
1/* $Id: wnetap32.cpp,v 1.17 2002-03-08 11:37:10 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 * Name : WNETAP32.CPP
21 * Purpose : This module maps all Win32 functions contained in NETAPI32.DLL
22 * to their OS/2-specific counterparts as far as possible.
23 * Basis is 5.05.97 12.00 59152 MPR.DLL (NT4SP3)
24 *****************************************************************************/
25
26
27/****************************************************************************
28 * Includes *
29 ****************************************************************************/
30
31#include <odin.h>
32#include <odinwrap.h>
33#include <os2win.h>
34#include <misc.h>
35#include <unicode.h>
36#include <heapstring.h>
37#include <string.h>
38#include <winconst.h>
39
40#include "wnetap32.h"
41#include "lanman.h"
42#include "oslibnet.h"
43
44ODINDEBUGCHANNEL(WNETAP32-WNETAP32)
45
46
47extern DWORD WIN32API OSLibNetbiosHlpHandler(LPVOID lpParam);
48
49
50/****************************************************************************
51 * Module Global Variables *
52 ****************************************************************************/
53
54
55//******************************************************************************
56// Note:
57// The major difference between OS/2 and Win32 regarding NetBIOS is
58// all operations and resources are per-process for Win32 and
59// global for OS/2. So we might probably end up with stray netbios names etc.
60// long after a process has vanished.
61//******************************************************************************
62//#define NETBIOS_ENABLED
63ODINFUNCTION1(UCHAR, OS2Netbios,
64 PNCB_w, pncb)
65{
66#ifndef NETBIOS_ENABLED
67 pncb->ncb_retcode = NRC_OPENERR_w;
68 return pncb->ncb_retcode;
69
70#else
71 UCHAR rc;
72
73 // Note: OS/2 specific documentation is found in DSSPGR1+DSSPGR2
74
75 // fork for asynchronous operation:
76 if (pncb->ncb_command & ASYNCH_w)
77 {
78 // either event or post may be specified
79 if ( (pncb->ncb_event != 0) &&
80 (pncb->ncb_post != 0) )
81 {
82 pncb->ncb_retcode = NRC_ILLCMD_w;
83 return NRC_ILLCMD_w;
84 }
85
86
87 // @@@PH
88 // we might go for one or more statically allocated
89 // worker threads instead of creating and destroying
90 // a thread for each single request.
91
92 // we're to start an ODIN thread ourself and do
93 // the operation itself synchronously!
94
95 // say the netbios operation is still pending ...
96 pncb->ncb_cmd_cplt = NRC_PENDING_w;
97
98 UCHAR ucCommand = pncb->ncb_command;
99 DWORD tidNetbios;
100 HANDLE hNetbiosThread = CreateThread(NULL,
101 0x8000,
102 OSLibNetbiosHlpHandler,
103 (LPVOID)pncb,
104 0, // thread creation flags
105 &tidNetbios);
106 if (hNetbiosThread == NULL)
107 {
108 // in case the thread could not be launched,
109 // return with error
110 pncb->ncb_retcode = NRC_SYSTEM_w;
111 pncb->ncb_cmd_cplt = NRC_SYSTEM_w;
112 return pncb->ncb_retcode;
113 }
114 else
115 {
116 dprintf(("NETBIOS: Netbios helper thread %d started for command %02xh\n",
117 tidNetbios,
118 ucCommand));
119
120 // verify if the operation has completed already
121 if (pncb->ncb_cmd_cplt != NRC_PENDING_w)
122 {
123 // Docs say in this case return as if the request was synchronous
124 rc = pncb->ncb_retcode;
125 }
126 else
127 {
128 // this is the "operation pending" return code
129 rc = 0;
130 }
131 }
132 }
133 else
134 {
135 // verify request
136 if ( (pncb->ncb_event != 0) ||
137 (pncb->ncb_post != 0) )
138 {
139 pncb->ncb_retcode = NRC_ILLCMD_w;
140 return NRC_ILLCMD_w;
141 }
142
143 // call the Request Router
144 rc = OSLibNetBIOS( pncb );
145 }
146
147 return( rc );
148#endif /* NETBIOS_ENABLED */
149}
150
151
152/*****************************************************************************
153 * Name : NET_API_STATUS NetAlertRaise
154 * Purpose :
155 * Parameters: LPWSTR AlertEventName Pointer to a Unicode string that specifies
156 * the interrupting message to raise
157 * LPVOID Buffer Pointer to the data to be sent to the clients
158 * listening for this interrupting message
159 * DWORD BufferSize Specifies in bytes, the size of the buffer
160 * Variables :
161 * Result :
162 * Remark :
163 * Status : UNTESTED STUB
164 *
165 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
166 *
167 * Author : Markus Montkowski [09.07.98 19:40:30]
168 *****************************************************************************/
169
170ODINFUNCTION3(NET_API_STATUS, OS2NetAlertRaise,
171 LPWSTR, AlertEventName,
172 LPVOID, Buffer,
173 DWORD, BufferSize)
174{
175
176 dprintf(("NETAPI32: NetAlertRaise not implemented\n"));
177
178 return (NERR_BASE);
179}
180
181
182/*****************************************************************************
183 * Name : NET_API_STATUS NetAlertRaiseEx
184 * Purpose :
185 * Parameters: LPWSTR AlertEventName
186 * LPVOID VariableInfo
187 * DWORD VariableInfoSize
188 * LPWSTR ServiceName
189 * Variables :
190 * Result :
191 * Remark :
192 * Status : UNTESTED STUB
193 *
194 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
195 *
196 * Author : Markus Montkowski [09.07.98 19:44:43]
197 *****************************************************************************/
198
199ODINFUNCTION4(NET_API_STATUS, OS2NetAlertRaiseEx,
200 LPWSTR, AlertEventName,
201 LPVOID, VariableInfo,
202 DWORD, VariableInfoSize,
203 LPWSTR, ServiceName)
204
205{
206
207 dprintf(("NETAPI32: NetAlertRaiseEx not implemented\n"));
208
209 return (NERR_BASE);
210}
211
212
213/*****************************************************************************
214 * Name : NET_API_STATUS NetFileEnum
215 * Purpose :
216 * Parameters: LPWSTR servername
217 * LPWSTR basepath
218 * LPWSTR username
219 * DWORD level
220 * LPBYTE *bufptr
221 * DWORD prefmaxlen
222 * LPDWORD entriesread
223 * LPDWORD totalentries
224 * LPDWORD resume_handle
225 * Variables :
226 * Result :
227 * Remark :
228 * Status : UNTESTED STUB
229 *
230 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
231 *
232 * Author : Markus Montkowski [09.07.98 21:27:44]
233 *****************************************************************************/
234
235ODINFUNCTION9(NET_API_STATUS, OS2NetFileEnum,
236 LPWSTR, servername,
237 LPWSTR, basepath,
238 LPWSTR, username,
239 DWORD, level,
240 LPBYTE *, bufptr,
241 DWORD, prefmaxlen,
242 LPDWORD, entriesread,
243 LPDWORD, totalentries,
244 LPDWORD, resume_handle)
245{
246 dprintf(("NETAPI32: NetFileEnum not implemented\n"));
247
248 return (NERR_BASE);
249}
250
251
252/*****************************************************************************
253 * Name : NET_API_STATUS NetFileGetInfo
254 * Purpose :
255 * Parameters: LPWSTR servername
256 * DWORD fileid
257 * DWORD level
258 * LPBYTE *bufptr
259 * Variables :
260 * Result :
261 * Remark :
262 * Status : UNTESTED STUB
263 *
264 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
265 *
266 * Author : Markus Montkowski [09.07.98 21:28:38]
267 *****************************************************************************/
268
269ODINFUNCTION4(NET_API_STATUS,OS2NetFileGetInfo,LPWSTR, servername,
270 DWORD, fileid,
271 DWORD, level,
272 LPBYTE*, bufptr)
273{
274 dprintf(("NETAPI32: NetFileGetInfo not implemented\n"));
275
276 return (NERR_BASE);
277}
278
279
280/*****************************************************************************
281 * Name : NET_API_STATUS NetGetAnyDCName
282 * Purpose :
283 * Parameters: LPCWSTR ServerName
284 * LPCWSTR DomainName
285 * LPBYTE *Buffer
286 * Variables :
287 * Result :
288 * Remark :
289 * Status : UNTESTED STUB
290 *
291 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
292 *
293 * Author : Markus Montkowski [09.07.98 21:29:52]
294 *****************************************************************************/
295
296ODINFUNCTION3(NET_API_STATUS, OS2NetGetAnyDCName,
297 LPCWSTR, ServerName,
298 LPCWSTR, DomainName,
299 LPBYTE *, Buffer)
300{
301 dprintf(("NETAPI32: NetGetAnyDCName not implemented\n"));
302
303 return (NERR_BASE);
304}
305
306
307/*****************************************************************************
308 * Name : NET_API_STATUS NetGetDCName
309 * Purpose :
310 * Parameters: LPWSTR servername
311 * LPWSTR domainname
312 * LPBYTE *bufptr
313 * Variables :
314 * Result :
315 * Remark :
316 * Status : UNTESTED STUB
317 *
318 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
319 *
320 * Author : Markus Montkowski [09.07.98 21:30:29]
321 *****************************************************************************/
322
323ODINFUNCTION3(NET_API_STATUS, OS2NetGetDCName,
324 LPWSTR, servername,
325 LPWSTR, domainname,
326 LPBYTE *, bufptr)
327{
328
329 dprintf(("NETAPI32: NetGetDCName not implemented\n"));
330
331 return (NERR_BASE);
332}
333
334
335/*****************************************************************************
336 * Name : NET_API_STATUS NetGetDisplayInformationIndex
337 * Purpose :
338 * Parameters: LPWSTR ServerName pointer to server to get information from
339 * DWORD Level level of information to retrieve
340 * LPWSTR Prefix pointer to prefix string
341 * LPDWORD Index receives index of entry
342 * Variables :
343 * Result :
344 * Remark :
345 * Status : UNTESTED STUB
346 *
347 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
348 *
349 * Author : Markus Montkowski [09.07.98 21:30:53]
350 *****************************************************************************/
351
352ODINFUNCTION4(NET_API_STATUS, OS2NetGetDisplayInformationIndex,
353 LPWSTR, ServerName,
354 DWORD, Level,
355 LPWSTR, Prefix,
356 LPDWORD, Index)
357{
358 dprintf(("NETAPI32: NetGetDisplayInformationIndex not implemented\n"));
359
360 return (NERR_BASE);
361}
362
363
364/*****************************************************************************
365 * Name : NET_API_STATUS NetHandleGetInfo
366 * Purpose :
367 * Parameters: UNSIGNED SHORT hHandle
368 * SHORT sLevel
369 * CHAR FAR *pbBuffer
370 * UNSIGNED SHORT cbBuffer
371 * UNSIGNED SHORT FAR *pcbTotalAvail
372 * Variables :
373 * Result :
374 * Remark :
375 * Status : UNTESTED STUB
376 *
377 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
378 *
379 * Author : Markus Montkowski [09.07.98 21:35:03]
380 *****************************************************************************/
381/* NOT in DLL but in SDK Documentation
382ODINFUNCTION5(NET_API_STATUS, OS2NetHandleGetInfo,
383 UNSIGNED, SHORT,
384 hHandle,, SHORT,
385 sLevel,, CHAR,
386 FAR *, pbBuffer,
387 UNSIGNED, SHORTcbBuffer,
388 UNSIGNED SHORT FAR *pcbTotalAvail
389 )
390
391{
392
393 dprintf(("NETAPI32: NetHandleGetInfo(%d, %d, %08x, %d, %08x) not implemented\n"
394 ,hHandle, sLevel, *pbBuffer, cbBuffer, *pcbTotalAvail
395 ));
396
397 return (NERR_BASE);
398}
399*/
400
401/*****************************************************************************
402 * Name : NET_API_STATUS NetHandleSetInfo
403 * Purpose :
404 * Parameters: UNSIGNED SHORT hHandle
405 * SHORT sLevel
406 * CHAR FAR *pbBuffer
407 * UNSIGNED SHORT cbBuffer
408 * UNSIGNED SHORT FAR *sParmNum
409 * Variables :
410 * Result :
411 * Remark :
412 * Status : UNTESTED STUB
413 *
414 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
415 *
416 * Author : Markus Montkowski [09.07.98 21:39:08]
417 *****************************************************************************/
418/* Not in DLL but in SDK Documentation
419ODINFUNCTION5(NET_API_STATUS, OS2NetHandleSetInfo,
420 UNSIGNED, SHORT,
421 hHandle,, SHORT,
422 sLevel,, CHAR,
423 FAR *, pbBuffer,
424 UNSIGNED, SHORTcbBuffer,
425 UNSIGNED SHORT FAR *sParmNum
426 )
427
428{
429
430 dprintf(("NETAPI32: NetHandleSetInfo(%d, %d, %08x, %d, %08x) not implemented\n"
431 ,hHandle, sLevel, *pbBuffer, cbBuffer, *sParmNum
432 ));
433
434 return (NERR_BASE);
435}
436
437*/
438
439
440/*****************************************************************************
441 * Name : NET_API_STATUS NetMessageBufferSend
442 * Purpose :
443 * Parameters: LPWSTR servername
444 * LPWSTR msgname
445 * LPWSTR fromname
446 * LPBYTE buf
447 * DWORD buflen
448 * Variables :
449 * Result :
450 * Remark :
451 * Status : UNTESTED STUB
452 *
453 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
454 *
455 * Author : Markus Montkowski [09.07.98 21:43:01]
456 *****************************************************************************/
457ODINFUNCTION5(NET_API_STATUS, OS2NetMessageBufferSend,
458 LPWSTR, servername,
459 LPWSTR, msgname,
460 LPWSTR, fromname,
461 LPBYTE, buf,
462 DWORD, buflen)
463
464{
465
466 dprintf(("NETAPI32: NetMessageBufferSend(%s, %s, %s, %08x, %d) not implemented\n"
467 ,servername, msgname, fromname, buf, buflen
468 ));
469
470 return (NERR_BASE);
471}
472
473
474
475/*****************************************************************************
476 * Name : NET_API_STATUS NetMessageNameAdd
477 * Purpose :
478 * Parameters: LPWSTR servername
479 * LPWSTR msgname
480 * Variables :
481 * Result :
482 * Remark :
483 * Status : UNTESTED STUB
484 *
485 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
486 *
487 * Author : Markus Montkowski [09.07.98 21:43:41]
488 *****************************************************************************/
489ODINFUNCTION2(NET_API_STATUS, OS2NetMessageNameAdd,
490 LPWSTR, servername,
491 LPWSTR, msgname)
492
493{
494
495 dprintf(("NETAPI32: NetMessageNameAdd(%s, %s) not implemented\n"
496 ,servername, msgname
497 ));
498
499 return (NERR_BASE);
500}
501
502/*****************************************************************************
503 * Name : NET_API_STATUS NetMessageNameDel
504 * Purpose :
505 * Parameters: LPWSTR servername
506 * LPWSTR msgname
507 * Variables :
508 * Result :
509 * Remark :
510 * Status : UNTESTED STUB
511 *
512 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
513 *
514 * Author : Markus Montkowski [09.07.98 21:44:12]
515 *****************************************************************************/
516ODINFUNCTION2(NET_API_STATUS, OS2NetMessageNameDel,
517 LPWSTR, servername,
518 LPWSTR, msgname)
519
520{
521
522 dprintf(("NETAPI32: NetMessageNameDel(%s, %s) not implemented\n"
523 ,servername, msgname
524 ));
525
526 return (NERR_BASE);
527}
528
529/*****************************************************************************
530 * Name : NET_API_STATUS NetMessageNameEnum
531 * Purpose :
532 * Parameters: LPWSTR servername
533 * DWORD level
534 * LPBYTE *bufptr
535 * DWORD prefmaxlen
536 * LPDWORD entriesread
537 * LPDWORD totalentries
538 * LPDWORD resume_handle
539 * Variables :
540 * Result :
541 * Remark :
542 * Status : UNTESTED STUB
543 *
544 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
545 *
546 * Author : Markus Montkowski [09.07.98 21:45:05]
547 *****************************************************************************/
548ODINFUNCTION7(NET_API_STATUS, OS2NetMessageNameEnum,
549 LPWSTR, servername,
550 DWORD, level,
551 LPBYTE *, bufptr,
552 DWORD, prefmaxlen,
553 LPDWORD, entriesread,
554 LPDWORD, totalentries,
555 LPDWORD, resume_handle)
556
557{
558
559 dprintf(("NETAPI32: NetMessageNameEnum(%s, %d, %08x, %d, %08x, %08x, %08x) not implemented\n"
560 ,servername, level, *bufptr, prefmaxlen, entriesread, totalentries, resume_handle
561 ));
562
563 return (NERR_BASE);
564}
565
566
567/*****************************************************************************
568 * Name : NET_API_STATUS NetMessageNameGetInfo
569 * Purpose :
570 * Parameters: LPWSTR servername
571 * LPWSTR msgname
572 * DWORD level
573 * LPBYTE *bufptr
574 * Variables :
575 * Result :
576 * Remark :
577 * Status : UNTESTED STUB
578 *
579 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
580 *
581 * Author : Markus Montkowski [09.07.98 21:45:40]
582 *****************************************************************************/
583ODINFUNCTION4(NET_API_STATUS, OS2NetMessageNameGetInfo,
584 LPWSTR, servername,
585 LPWSTR, msgname,
586 DWORD, level,
587 LPBYTE *, bufptr)
588
589{
590
591 dprintf(("NETAPI32: NetMessageNameGetInfo(%s, %s, %d, %08x) not implemented\n"
592 ,servername, msgname, level, *bufptr
593 ));
594
595 return (NERR_BASE);
596}
597/*****************************************************************************
598 * Name : NET_API_STATUS NetQueryDisplayInformation
599 * Purpose :
600 * Parameters: LPWSTR ServerName
601 * DWORD Level
602 * DWORD Index
603 * DWORD EntriesRequested
604 * DWORD PreferredMaximumLength
605 * LPDWORD ReturnedEntryCount
606 * PVOID *SortedBuffer
607 * Variables :
608 * Result :
609 * Remark :
610 * Status : UNTESTED STUB
611 *
612 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
613 *
614 * Author : Markus Montkowski [09.07.98 21:46:40]
615 *****************************************************************************/
616ODINFUNCTION7(NET_API_STATUS, OS2NetQueryDisplayInformation,
617 LPWSTR, ServerName,
618 DWORD, Level,
619 DWORD, Index,
620 DWORD, EntriesRequested,
621 DWORD, PreferredMaximumLength,
622 LPDWORD, ReturnedEntryCount,
623 PVOID *, SortedBuffer)
624
625{
626
627 dprintf(("NETAPI32: NetQueryDisplayInformation(%08x, %d, %d, %d, %d, %08x, %08x) not implemented\n"
628 ,ServerName, Level, Index, EntriesRequested, PreferredMaximumLength, ReturnedEntryCount, *SortedBuffer
629 ));
630
631 return (NERR_BASE);
632}
633
634/*****************************************************************************
635 * Name : NET_API_STATUS NetRemoteTOD
636 * Purpose :
637 * Parameters: LPWSTR UncServerName
638 * LPBYTE *BufferPtr
639 * Variables :
640 * Result :
641 * Remark :
642 * Status : UNTESTED STUB
643 *
644 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
645 *
646 * Author : Markus Montkowski [09.07.98 21:47:20]
647 *****************************************************************************/
648ODINFUNCTION2(NET_API_STATUS, OS2NetRemoteTOD,
649 LPWSTR, UncServerName,
650 LPBYTE *, BufferPtr)
651
652{
653
654 dprintf(("NETAPI32: NetRemoteTOD(%s, %08x) not implemented\n"
655 ,UncServerName, *BufferPtr
656 ));
657
658 return (NERR_BASE);
659}
660
661
662/*****************************************************************************
663 * Name : NET_API_STATUS NetSessionDel
664 * Purpose :
665 * Parameters: LPWSTR servername
666 * LPWSTR UncClientName
667 * LPWSTR username
668 * Variables :
669 * Result :
670 * Remark :
671 * Status : UNTESTED STUB
672 *
673 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
674 *
675 * Author : Markus Montkowski [09.07.98 22:00:15]
676 *****************************************************************************/
677ODINFUNCTION3(NET_API_STATUS, OS2NetSessionDel,
678 LPWSTR, servername,
679 LPWSTR, UncClientName,
680 LPWSTR, username)
681
682{
683
684 dprintf(("NETAPI32: NetSessionDel(%s, %s, %s) not implemented\n"
685 ,servername, UncClientName, username
686 ));
687
688 return (NERR_BASE);
689}
690
691
692/*****************************************************************************
693 * Name : NET_API_STATUS NetSessionEnum
694 * Purpose :
695 * Parameters: LPWSTR servername
696 * LPWSTR UncClientName
697 * LPWSTR username
698 * DWORD level
699 * LPBYTE *bufptr
700 * DWORD prefmaxlen
701 * LPDWORD entriesread
702 * LPDWORD totalentries
703 * LPDWORD resume_handle
704 * Variables :
705 * Result :
706 * Remark :
707 * Status : UNTESTED STUB
708 *
709 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
710 *
711 * Author : Markus Montkowski [09.07.98 22:00:46]
712 *****************************************************************************/
713ODINFUNCTION9(NET_API_STATUS, OS2NetSessionEnum,
714 LPWSTR, servername,
715 LPWSTR, UncClientName,
716 LPWSTR, username,
717 DWORD, level,
718 LPBYTE *, bufptr,
719 DWORD, prefmaxlen,
720 LPDWORD, entriesread,
721 LPDWORD, totalentries,
722 LPDWORD, resume_handle)
723
724{
725
726 dprintf(("NETAPI32: NetSessionEnum(%s, %s, %s, %d, %08x, %d, %08x, %08x, %08x) not implemented\n"
727 ,servername, UncClientName, username, level, *bufptr, prefmaxlen, entriesread, totalentries, resume_handle
728 ));
729
730 return (NERR_BASE);
731}
732
733/*****************************************************************************
734 * Name : NET_API_STATUS NetSessionGetInfo
735 * Purpose :
736 * Parameters: LPWSTR servername
737 * LPWSTR UncClientName
738 * LPWSTR username
739 * DWORD level
740 * LPBYTE *bufptr
741 * Variables :
742 * Result :
743 * Remark :
744 * Status : UNTESTED STUB
745 *
746 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
747 *
748 * Author : Markus Montkowski [09.07.98 22:01:17]
749 *****************************************************************************/
750ODINFUNCTION5(NET_API_STATUS, OS2NetSessionGetInfo,
751 LPWSTR, servername,
752 LPWSTR, UncClientName,
753 LPWSTR, username,
754 DWORD, level,
755 LPBYTE *, bufptr)
756
757{
758
759 dprintf(("NETAPI32: NetSessionGetInfo(%s, %s, %s, %d, %08x) not implemented\n"
760 ,servername, UncClientName, username, level, *bufptr
761 ));
762
763 return (NERR_BASE);
764}
765
766
767/*****************************************************************************
768 * Name : NET_API_STATUS NetStatisticsGet2
769 * Purpose :
770 * Parameters: LPWSTR server
771 * LPWSTR service
772 * DWORD level
773 * DWORD options
774 * LPBYTE *bufptr
775 * Variables :
776 * Result :
777 * Remark :
778 * Status : UNTESTED STUB
779 *
780 * Stub Generated through PE2LX Stubwizard 0.02 from Markus Montkowski
781 *
782 * Author : Markus Montkowski [09.07.98 22:04:44]
783 *****************************************************************************/
784/* Not in DLL but in SDK doc
785ODINFUNCTION5(NET_API_STATUS, OS2NetStatisticsGet2,
786 LPWSTR, server,
787 LPWSTR, service,
788 DWORD, level,
789 DWORD, options,
790 LPBYTE *, bufptr)
791
792{
793
794 dprintf(("NETAPI32: NetStatisticsGet2(%s, %s, %d, %d, %08x) not implemented\n"
795 ,server, service, level, options, *bufptr
796 ));
797
798 return (NERR_BASE);
799}
800*/
801
802
803/*****************************************************************************
804 * Name : NET_API_STATUS NetConfigSet
805 * Purpose : configure a network component
806 * Parameters: LPWSTR lpServer
807 * LPWSTR lpReserved1
808 * LPWSTR lpComponent
809 * DWORD dwLevel
810 * DWORD dwReserved2
811 * LPBYTE lpBuf
812 * DWORD dwReserved3
813 * Variables :
814 * Result :
815 * Remark :
816 * Status : UNTESTED STUB
817 *
818 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
819 *****************************************************************************/
820
821ODINFUNCTION7(NET_API_STATUS,OS2NetConfigSet,LPWSTR, lpServer,
822 LPWSTR, lpReserved1,
823 LPWSTR, lpComponent,
824 DWORD, dwLevel,
825 DWORD, dwReserved2,
826 LPBYTE, lpBuf,
827 DWORD, dwReserved3)
828{
829 dprintf(("NETAPI32: NetConfigSet not implemented\n"));
830
831 return (NERR_BASE);
832}
833
834
835/*****************************************************************************
836 * Name : NET_API_STATUS NetConfigGet
837 * Purpose : get configuration from a network component
838 * Parameters: LPWSTR lpServer
839 * LPWSTR lpComponent
840 * LPWSTR lpParameter
841 * LPBYTE lpBuf
842 * Variables :
843 * Result :
844 * Remark :
845 * Status : UNTESTED STUB
846 *
847 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
848 *****************************************************************************/
849
850ODINFUNCTION4(NET_API_STATUS,OS2NetConfigGet,LPWSTR, lpServer,
851 LPWSTR, lpComponent,
852 LPWSTR, lpParameter,
853 LPBYTE, lpBuf)
854{
855 dprintf(("NETAPI32: NetConfigGet not implemented\n"));
856
857 return (NERR_BASE);
858}
859
860
861/*****************************************************************************
862 * Name : NET_API_STATUS RxNetAccessSetInfo
863 * Purpose :
864 * Parameters: wrong
865 * Variables :
866 * Result :
867 * Remark :
868 * Status : UNTESTED STUB
869 *
870 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
871 *****************************************************************************/
872
873ODINFUNCTION6(NET_API_STATUS, OS2RxNetAccessSetInfo,
874 DWORD, x1,
875 DWORD, x2,
876 DWORD, x3,
877 DWORD, x4,
878 DWORD, x5,
879 DWORD, x6)
880{
881 dprintf(("NETAPI32: RxNetAccessSetInfo(%08x, %08xh, %08xh, %08xh, %08xh, %08xh) not implemented\n",
882 x1,
883 x2,
884 x3,
885 x4,
886 x5,
887 x6));
888
889 return (NERR_BASE);
890}
891
892
893/*****************************************************************************
894 * Name : NET_API_STATUS RxNetAccessGetInfo
895 * Purpose :
896 * Parameters: wrong
897 * Variables :
898 * Result :
899 * Remark :
900 * Status : UNTESTED STUB
901 *
902 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
903 *****************************************************************************/
904
905ODINFUNCTION6(NET_API_STATUS, OS2RxNetAccessGetInfo,
906 DWORD, x1,
907 DWORD, x2,
908 DWORD, x3,
909 DWORD, x4,
910 DWORD, x5,
911 DWORD, x6)
912{
913 dprintf(("NETAPI32: RxNetAccessGetInfo(%08x, %08xh, %08xh, %08xh, %08xh, %08xh) not implemented\n",
914 x1,
915 x2,
916 x3,
917 x4,
918 x5,
919 x6));
920
921 return (NERR_BASE);
922}
923
924
925
926/*****************************************************************************
927 * Name : NET_API_STATUS I_NetGetDCList
928 * Purpose :
929 * Parameters: wrong
930 * Variables :
931 * Result :
932 * Remark :
933 * Status : UNTESTED STUB
934 *
935 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
936 *****************************************************************************/
937
938ODINFUNCTION6(NET_API_STATUS, OS2I_NetGetDCList,
939 DWORD, x1,
940 DWORD, x2,
941 DWORD, x3,
942 DWORD, x4,
943 DWORD, x5,
944 DWORD, x6)
945{
946 dprintf(("NETAPI32: I_NetGetDCList(%08x, %08xh, %08xh, %08xh, %08xh, %08xh) not implemented\n",
947 x1,
948 x2,
949 x3,
950 x4,
951 x5,
952 x6));
953
954 return (NERR_BASE);
955}
956
957
958/*****************************************************************************
959 * Name : NET_API_STATUS I_NetNameCanonicalize
960 * Purpose :
961 * Parameters: wrong
962 * Variables :
963 * Result :
964 * Remark :
965 * Status : UNTESTED STUB
966 *
967 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
968 *****************************************************************************/
969
970ODINFUNCTION4(NET_API_STATUS, OS2I_NetNameCanonicalize,
971 DWORD, x1,
972 DWORD, x2,
973 DWORD, x3,
974 DWORD, x4)
975{
976 dprintf(("NETAPI32: I_NetNameCanonicalize(%08x, %08xh, %08xh, %08xh) not implemented\n",
977 x1,
978 x2,
979 x3,
980 x4));
981
982 return (NERR_BASE);
983}
984
985
986
987/*****************************************************************************
988 * Name : NET_API_STATUS I_NetNameCompare
989 * Purpose :
990 * Parameters: wrong
991 * Variables :
992 * Result :
993 * Remark :
994 * Status : UNTESTED STUB
995 *
996 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
997 *****************************************************************************/
998
999ODINFUNCTION4(NET_API_STATUS, OS2I_NetNameCompare,
1000 DWORD, x1,
1001 DWORD, x2,
1002 DWORD, x3,
1003 DWORD, x4)
1004{
1005 dprintf(("NETAPI32: I_NetNameCompare(%08x, %08xh, %08xh, %08xh) not implemented\n",
1006 x1,
1007 x2,
1008 x3,
1009 x4));
1010
1011 return (NERR_BASE);
1012}
1013
1014
1015/*****************************************************************************
1016 * Name : NET_API_STATUS I_NetNameValidate
1017 * Purpose :
1018 * Parameters: wrong
1019 * Variables :
1020 * Result :
1021 * Remark :
1022 * Status : UNTESTED STUB
1023 *
1024 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1025 *****************************************************************************/
1026
1027ODINFUNCTION3(NET_API_STATUS, OS2I_NetNameValidate,
1028 DWORD, x1,
1029 DWORD, x2,
1030 DWORD, x3)
1031{
1032 dprintf(("NETAPI32: I_NetNameValidate(%08x, %08xh, %08xh) not implemented\n",
1033 x1,
1034 x2,
1035 x3));
1036
1037 return (NERR_BASE);
1038}
1039
1040
1041/*****************************************************************************
1042 * Name : NET_API_STATUS I_NetPathCanonicalize
1043 * Purpose :
1044 * Parameters: wrong
1045 * Variables :
1046 * Result :
1047 * Remark :
1048 * Status : UNTESTED STUB
1049 *
1050 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1051 *****************************************************************************/
1052
1053ODINFUNCTION4(NET_API_STATUS, OS2I_NetPathCanonicalize,
1054 DWORD, x1,
1055 DWORD, x2,
1056 DWORD, x3,
1057 DWORD, x4)
1058{
1059 dprintf(("NETAPI32: I_NetPathCanonicalize(%08x, %08xh, %08xh, %08xh) not implemented\n",
1060 x1,
1061 x2,
1062 x3,
1063 x4));
1064
1065 return (NERR_BASE);
1066}
1067
1068
1069
1070/*****************************************************************************
1071 * Name : NET_API_STATUS I_NetPathCompare
1072 * Purpose :
1073 * Parameters: wrong
1074 * Variables :
1075 * Result :
1076 * Remark :
1077 * Status : UNTESTED STUB
1078 *
1079 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1080 *****************************************************************************/
1081
1082ODINFUNCTION4(NET_API_STATUS, OS2I_NetPathCompare,
1083 DWORD, x1,
1084 DWORD, x2,
1085 DWORD, x3,
1086 DWORD, x4)
1087{
1088 dprintf(("NETAPI32: I_NetPathCompare(%08x, %08xh, %08xh, %08xh) not implemented\n",
1089 x1,
1090 x2,
1091 x3,
1092 x4));
1093
1094 return (NERR_BASE);
1095}
1096
1097
1098/*****************************************************************************
1099 * Name : NET_API_STATUS I_NetPathType
1100 * Purpose :
1101
1102 * Parameters: wrong
1103 * Variables :
1104 * Result :
1105 * Remark :
1106 * Status : UNTESTED STUB
1107 *
1108 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1109 *****************************************************************************/
1110
1111ODINFUNCTION2(NET_API_STATUS, OS2I_NetPathType,
1112 DWORD, x1,
1113 DWORD, x2)
1114{
1115 dprintf(("NETAPI32: I_NetPathType(%08x, %08xh) not implemented\n",
1116 x1,
1117 x2));
1118
1119 return (NERR_BASE);
1120}
1121
1122
1123/*****************************************************************************
1124 * Name : NET_API_STATUS NetapipBufferAllocate
1125
1126 * Purpose :
1127 * Parameters: wrong
1128 * Variables :
1129 * Result :
1130 * Remark :
1131 * Status : UNTESTED STUB
1132 *
1133 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1134 *****************************************************************************/
1135
1136ODINFUNCTION3(NET_API_STATUS, OS2NetapipBufferAllocate,
1137 DWORD, x1,
1138 DWORD, x2,
1139 DWORD, x3)
1140{
1141 dprintf(("NETAPI32: NetapipBufferAllocate(%08x, %08xh, %08xh) not implemented\n",
1142 x1,
1143 x2,
1144 x3));
1145
1146 return (NERR_BASE);
1147}
1148
1149
1150/*****************************************************************************
1151 * Name : NET_API_STATUS I_NetLogonControl
1152 * Purpose :
1153 * Parameters: wrong
1154 * Variables :
1155 * Result :
1156 * Remark :
1157 * Status : UNTESTED STUB
1158 *
1159 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1160 *****************************************************************************/
1161
1162ODINFUNCTION6(NET_API_STATUS, OS2I_NetLogonControl,
1163 DWORD, x1,
1164 DWORD, x2,
1165 DWORD, x3,
1166 DWORD, x4,
1167 DWORD, x5,
1168 DWORD, x6)
1169{
1170 dprintf(("NETAPI32: I_NetLogonControl(%08x, %08xh, %08xh, %08xh, %08xh, %08xh) not implemented\n",
1171 x1,
1172 x2,
1173 x3,
1174 x4,
1175 x5,
1176 x6));
1177
1178 return (NERR_BASE);
1179}
1180
1181
1182/*****************************************************************************
1183 * Name : NET_API_STATUS RxNetAccessAdd
1184 * Purpose :
1185 * Parameters: wrong
1186 * Variables :
1187 * Result :
1188 * Remark :
1189 * Status : UNTESTED STUB
1190 *
1191 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1192 *****************************************************************************/
1193
1194ODINFUNCTION6(NET_API_STATUS, OS2RxNetAccessAdd,
1195 DWORD, x1,
1196 DWORD, x2,
1197 DWORD, x3,
1198 DWORD, x4,
1199 DWORD, x5,
1200 DWORD, x6)
1201{
1202 dprintf(("NETAPI32: RxNetAccessAdd(%08x, %08xh, %08xh, %08xh, %08xh, %08xh) not implemented\n",
1203 x1,
1204 x2,
1205 x3,
1206 x4,
1207 x5,
1208 x6));
1209
1210 return (NERR_BASE);
1211}
1212
1213
1214/*****************************************************************************
1215 * Name : NET_API_STATUS RxNetAccessDel
1216 * Purpose :
1217 * Parameters: wrong
1218 * Variables :
1219 * Result :
1220 * Remark :
1221 * Status : UNTESTED STUB
1222 *
1223 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1224 *****************************************************************************/
1225
1226ODINFUNCTION6(NET_API_STATUS, OS2RxNetAccessDel,
1227 DWORD, x1,
1228 DWORD, x2,
1229 DWORD, x3,
1230 DWORD, x4,
1231 DWORD, x5,
1232 DWORD, x6)
1233{
1234 dprintf(("NETAPI32: RxNetAccessDel(%08x, %08xh, %08xh, %08xh, %08xh, %08xh) not implemented\n",
1235 x1,
1236 x2,
1237 x3,
1238 x4,
1239 x5,
1240 x6));
1241
1242 return (NERR_BASE);
1243}
1244
1245
1246
1247/*****************************************************************************
1248 * Name : NET_API_STATUS RxNetAccessEnum
1249 * Purpose :
1250 * Parameters: wrong
1251 * Variables :
1252 * Result :
1253 * Remark :
1254 * Status : UNTESTED STUB
1255 *
1256 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1257 *****************************************************************************/
1258
1259ODINFUNCTION6(NET_API_STATUS, OS2RxNetAccessEnum,
1260 DWORD, x1,
1261 DWORD, x2,
1262 DWORD, x3,
1263 DWORD, x4,
1264 DWORD, x5,
1265 DWORD, x6)
1266{
1267 dprintf(("NETAPI32: RxNetAccessEnum(%08x, %08xh, %08xh, %08xh, %08xh, %08xh) not implemented\n",
1268 x1,
1269 x2,
1270 x3,
1271 x4,
1272 x5,
1273 x6));
1274
1275 return (NERR_BASE);
1276}
1277
1278
1279
1280/*****************************************************************************
1281 * Name : NET_API_STATUS RxNetAccessGetUserPerms
1282 * Purpose :
1283 * Parameters: wrong
1284 * Variables :
1285 * Result :
1286 * Remark :
1287 * Status : UNTESTED STUB
1288 *
1289 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1290 *****************************************************************************/
1291
1292ODINFUNCTION6(NET_API_STATUS, OS2RxNetAccessGetUserPerms,
1293 DWORD, x1,
1294 DWORD, x2,
1295 DWORD, x3,
1296 DWORD, x4,
1297 DWORD, x5,
1298 DWORD, x6)
1299{
1300 dprintf(("NETAPI32: RxNetAccessGetUserPerms(%08x, %08xh, %08xh, %08xh, %08xh, %08xh) not implemented\n",
1301 x1,
1302 x2,
1303 x3,
1304 x4,
1305 x5,
1306 x6));
1307
1308 return (NERR_BASE);
1309}
1310
1311
1312/*****************************************************************************
1313 * Name : NET_API_STATUS NetConfigGetAll
1314 * Purpose : retrieves all the configuration information for a given component
1315 * on a local or remote computer
1316 * Parameters: LPWSTR lpServerName
1317 * LPWSTR lpComponent
1318 * LPBYTE* bufptr
1319 * Variables :
1320 * Result :
1321 * Remark :
1322 * Status : UNTESTED STUB
1323 *
1324 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1325 *****************************************************************************/
1326
1327ODINFUNCTION3(NET_API_STATUS,OS2NetConfigGetAll,LPWSTR, lpServerName,
1328 LPWSTR, lpComponent,
1329 LPBYTE*, bufptr)
1330{
1331 dprintf(("NETAPI32: NetConfigGetAll not implemented\n"));
1332
1333 return (NERR_BASE);
1334}
1335
1336
1337
1338/*****************************************************************************
1339 * Name : NET_API_STATUS NetConnectionEnum
1340 * Purpose : lists all connections made to a shared resource
1341 * Parameters: LPWSTR lpServerName
1342 * LPWSTR lpQualifier
1343 * DWORD dwLevel
1344 * LPBYTE* bufptr
1345 * DWORD dwPrefMaxLen
1346 * LPDWORD dwEntriesRead
1347 * LPDWORD dwTotalEntries
1348 * LPDWORD dwResumeHandle
1349 * Variables :
1350 * Result :
1351 * Remark :
1352 * Status : UNTESTED STUB
1353 *
1354 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1355 *****************************************************************************/
1356
1357ODINFUNCTION8(NET_API_STATUS,OS2NetConnectionEnum,LPWSTR, lpServerName,
1358 LPWSTR, lpQualifier,
1359 DWORD, dwLevel,
1360 LPBYTE*, bufptr ,
1361 DWORD, dwPrefMaxLen,
1362 LPDWORD, dwEntriesRead,
1363 LPDWORD, dwTotalEntries,
1364 LPDWORD, dwResumeHandle)
1365{
1366 dprintf(("NETAPI32: NetConnectionEnum not implemented\n"));
1367
1368 return (NERR_BASE);
1369}
1370
1371
1372/*****************************************************************************
1373 * Name : NET_API_STATUS NetFileClose
1374 * Purpose : forces a resource to close
1375 * Parameters: LPWSTR lpServerName
1376 * DWORD fileid
1377 * Variables :
1378 * Result :
1379 * Remark :
1380 * Status : UNTESTED STUB
1381 *
1382 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1383 *****************************************************************************/
1384
1385ODINFUNCTION2(NET_API_STATUS,OS2NetFileClose,LPWSTR, lpServerName,
1386 DWORD, fileid)
1387{
1388 dprintf(("NETAPI32: NetFileClose not implemented\n"));
1389
1390 return (NERR_BASE);
1391}
1392
1393
1394/*****************************************************************************
1395 * Name : NET_API_STATUS NetStatisticsGet
1396 * Purpose : retrieves operating statistics for a service
1397 * Parameters: LPWSTR lpServerName
1398 * LPWSTR lpService
1399 * DWORD dwLevel
1400 * DWORD dwOptions
1401 * LPBYTE* bufptr
1402 * Variables :
1403 * Result :
1404 * Remark :
1405 * Status : UNTESTED STUB
1406 *
1407 * Author : Patrick Haller [Thu, 1999/08/18 00:15]
1408 *****************************************************************************/
1409
1410void UL2LI(PLARGE_INTEGER pli, ULONG ul)
1411{
1412 pli->LowPart = ul;
1413 pli->HighPart = 0;
1414}
1415
1416void LOHI2LI(PLARGE_INTEGER pli, ULONG lo, ULONG hi)
1417{
1418 pli->LowPart = lo;
1419 pli->HighPart = hi;
1420}
1421
1422
1423ODINFUNCTION5(NET_API_STATUS,OS2NetStatisticsGet,LPWSTR, lpServerName,
1424 LPWSTR, lpService,
1425 DWORD, dwLevel,
1426 DWORD, dwOptions,
1427 LPBYTE*, bufptr)
1428{
1429 // Note: as we use the static addresses of the strings
1430 // for a faster comparsion, the compiler may NOT
1431 // merge duplicate static const strings.
1432 static LPSTR SERVICE_SERVER = "SERVER";
1433 static LPSTR SERVICE_REQUESTER_NT = "REQUESTER";
1434 static LPSTR SERVICE_REQUESTER_LM = "REQUESTER";
1435 static LPSTR SERVICE_UNKNOWN = "UNKNOWN";
1436
1437 // Convert servername to ASCII
1438 // Convert service name to ASCII AND OS/2-Pendant
1439 // OS/2 only allowes "SERVER" and "REQUESTER"
1440 char *asciiServername = NULL;
1441 if (lpServerName) asciiServername = UnicodeToAsciiString(lpServerName);
1442
1443 // server remains
1444 LPSTR lpstrOS2Service = NULL;
1445 if (lpService != NULL)
1446 if (lstrcmpiW((LPCWSTR)L"WORKSTATION", (LPCWSTR)lpService) == 0) lpstrOS2Service = (LPSTR)SERVICE_REQUESTER_NT;
1447 else
1448 if (lstrcmpW((LPCWSTR)L"LanmanWorkstation", (LPCWSTR)lpService) == 0) lpstrOS2Service = (LPSTR)SERVICE_REQUESTER_LM;
1449 else
1450 if (lstrcmpiW((LPCWSTR)L"SERVER", (LPCWSTR)lpService) == 0) lpstrOS2Service = (LPSTR)SERVICE_SERVER;
1451 else
1452 if (lstrcmpW((LPCWSTR)L"LanmanServer", (LPCWSTR)lpService) == 0) lpstrOS2Service = (LPSTR)SERVICE_SERVER;
1453 else
1454 lpstrOS2Service = (LPSTR)SERVICE_UNKNOWN; // to prevent crashes in NETAPI
1455
1456 // Note: The Win32 docs say nothing about "LanmanWorkstation"
1457 // Probably this is a request for the LANMAN-Workstation specific data?
1458#ifdef DEBUG
1459 {
1460 char *asciiService = UnicodeToAsciiString(lpService);
1461 dprintf(("WINMM: NetStatisticsGet server=[%s], service=[%s]\n",
1462 asciiServername,
1463 asciiService));
1464 FreeAsciiString(asciiService);
1465 }
1466#endif
1467
1468
1469 // @@@PH convert information modes!
1470 int iOS2Level = dwLevel; // both must be 0
1471 int iOS2Options = dwOptions; // seems to be identical
1472
1473 ULONG ulBytesAvailable;
1474 DWORD rc;
1475
1476 // determine required size of buffer
1477 char pOS2Buffer[4096];
1478 rc = OSLibNetStatisticsGet((const unsigned char*)asciiServername,
1479 (const unsigned char*)lpstrOS2Service,
1480 0,
1481 iOS2Level,
1482 iOS2Options,
1483 (unsigned char*)pOS2Buffer,
1484 sizeof(pOS2Buffer),
1485 &ulBytesAvailable);
1486
1487 if (asciiServername) FreeAsciiString(asciiServername);
1488
1489 // convert the structures
1490 switch (dwLevel)
1491 {
1492 case 0:
1493 // Note: address comparsion is valid :)
1494 if (lpstrOS2Service == SERVICE_REQUESTER_NT)
1495 {
1496 PSTAT_WORKSTATION_NT_0 pstw0;
1497 struct stat_workstation_0 *pOS2stw0 = (struct stat_workstation_0 *)pOS2Buffer;
1498
1499 // calculate new size for target buffer
1500 rc = OS2NetApiBufferAllocate(sizeof(STAT_WORKSTATION_NT_0), (LPVOID*)&pstw0);
1501 if (!rc)
1502 {
1503 // buffer is zeroed?
1504 //memset(pstw0, 0, sizeof(STAT_WORKSTATION_0));
1505
1506 UL2LI (&pstw0->StatisticsStartTime, pOS2stw0->stw0_start);
1507 LOHI2LI(&pstw0->BytesReceived, pOS2stw0->stw0_bytesrcvd_r_lo, pOS2stw0->stw0_bytesrcvd_r_hi);
1508 pstw0->SmbsReceived;
1509 pstw0->PagingReadBytesRequested;
1510 pstw0->NonPagingReadBytesRequested;
1511 pstw0->CacheReadBytesRequested;
1512 pstw0->NetworkReadBytesRequested;
1513 LOHI2LI(&pstw0->BytesTransmitted, pOS2stw0->stw0_bytessent_r_lo, pOS2stw0->stw0_bytessent_r_hi);
1514 pstw0->SmbsTransmitted;
1515 pstw0->PagingWriteBytesRequested;
1516 pstw0->NonPagingWriteBytesRequested;
1517 pstw0->CacheWriteBytesRequested;
1518 pstw0->NetworkWriteBytesRequested;
1519
1520 pstw0->InitiallyFailedOperations;
1521 pstw0->FailedCompletionOperations;
1522 pstw0->ReadOperations;
1523 pstw0->RandomReadOperations;
1524 pstw0->ReadSmbs;
1525 pstw0->LargeReadSmbs;
1526 pstw0->SmallReadSmbs;
1527 pstw0->WriteOperations;
1528 pstw0->RandomWriteOperations;
1529 pstw0->WriteSmbs;
1530 pstw0->LargeWriteSmbs;
1531 pstw0->SmallWriteSmbs;
1532 pstw0->RawReadsDenied;
1533 pstw0->RawWritesDenied;
1534
1535 pstw0->NetworkErrors;
1536 pstw0->Sessions = pOS2stw0->stw0_sesstart;
1537 pstw0->FailedSessions = pOS2stw0->stw0_sessfailcon;
1538 pstw0->Reconnects = pOS2stw0->stw0_autorec;
1539 pstw0->CoreConnects;
1540 pstw0->Lanman20Connects;
1541 pstw0->Lanman21Connects;
1542 pstw0->LanmanNtConnects;
1543 pstw0->ServerDisconnects;
1544 pstw0->HungSessions = pOS2stw0->stw0_sessbroke;
1545 pstw0->UseCount = pOS2stw0->stw0_uses;
1546 pstw0->FailedUseCount = pOS2stw0->stw0_usefail;
1547 pstw0->CurrentCommands;
1548 }
1549 // the caller is responsible for freeing the memory!
1550 *bufptr = (LPBYTE)pstw0;
1551 }
1552 else
1553 if (lpstrOS2Service == SERVICE_REQUESTER_LM)
1554 {
1555 // LanmanWorkstation !
1556 PSTAT_WORKSTATION_LM_0 pstw0;
1557 struct stat_workstation_0 *pOS2stw0 = (struct stat_workstation_0 *)pOS2Buffer;
1558
1559 // calculate new size for target buffer
1560 rc = OS2NetApiBufferAllocate(sizeof(STAT_WORKSTATION_LM_0), (LPVOID*)&pstw0);
1561 if (!rc)
1562 {
1563 // Note: the really nice thing is, the lanman structures are
1564 // exactly identical between OS/2 and NT ... :)
1565 memcpy(pstw0,
1566 pOS2stw0,
1567 sizeof(STAT_WORKSTATION_LM_0));
1568 }
1569
1570 // the caller is responsible for freeing the memory!
1571 *bufptr = (LPBYTE)pstw0;
1572 }
1573 else
1574 if (lpstrOS2Service == SERVICE_SERVER)
1575 {
1576 // SERVER !
1577 PSTAT_SERVER_0 psts0;
1578 struct stat_server_0 *pOS2sts0 = (struct stat_server_0 *)pOS2Buffer;
1579
1580 // calculate new size for target buffer
1581 rc = OS2NetApiBufferAllocate(sizeof(STAT_SERVER_0), (LPVOID*)&psts0);
1582 if (!rc)
1583 {
1584 // Note: the really nice thing is, the server structures are
1585 // exactly identical between OS/2 and NT ... :)
1586 memcpy(psts0,
1587 pOS2sts0,
1588 sizeof(STAT_SERVER_0));
1589 }
1590
1591 // the caller is responsible for freeing the memory!
1592 *bufptr = (LPBYTE)psts0;
1593 }
1594
1595 break;
1596 }
1597
1598 return (rc);
1599}
1600
1601
Note: See TracBrowser for help on using the repository browser.