Visual Basic Network Services
Obtaining Workstation Configuration Information
Posted:   Monday June 25, 2001
Updated:   Monday December 26, 2011
Applies to:   VB4-32, VB5, VB6
Developed with:   VB6, Windows 2000
OS restrictions:   Windows NT3.1, Windows NT4, Windows 2000, Windows XP
Author:   VBnet - Randy Birch


NetWkstaGetInfo: Workstation Configuration Information 
NetWkstaUserEnum: Workstation Logon Information
NetWkstaGetInfo: Workstation Configuration and Current User
NetWkstaGetInfo: Workstation Configuration and Logon Information

For this demo, one of the operating systems listed under OS Restrictions above.

NetWkstaGetInfo returns information about the configuration of a workstation. The WKSTA_INFO_102 structure user returns information about a workstation environment, including platform-specific information, the name of the domain (or workgroup) and the local computer, as well as information concerning the operating system on the machines.

NetWkstaGetInfo acts singly, that is, returns information only for the individual machine passed as servername. The illustration shows NetWkstaGetInfo called twice, passing \\workstation and \\laptop98 as the servername parameters. Note that although this API is to be called only on Windows NT or better, it will return information about Win9x machines registered with the domain or workgroup.

A WKSTA_INFO_100, WKSTA_INFO_101 or WKSTA_INFO_102 structure can be used to obtain configuration information. Each differs in the information returned, with WKSTA_INFO_102 returning the most data.

The username of the logged-on user is not retrieved in the passed WKSTA_INFO_102 structure, but as NetWkstaGetInfo: Workstation Configuration and Current User shows, by combining NetWkstaGetInfo and NetWkstaUserEnum, the logged-on user for a Windows NT or better machine can be obtained. 

The security requirements are the same as those outlined in
NetWkstaUserEnum: Workstation Logon Information.

 BAS Module Code

 Form Code
To a form add a command button (Command1), list box (List1), and two labels (Label1, Label2). A third set of labels in a control array can be used for the list item captions. Add the following to the form:

Option Explicit
' Copyright 1996-2011 VBnet/Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce 
'               or publish this code on any web site,
'               online service, or distribute as source 
'               on any media without express permission.
Private Const NERR_SUCCESS As Long = 0&
Private Const MAX_PREFERRED_LENGTH As Long = -1
Private Const ERROR_MORE_DATA As Long = 234&
Private Const LB_SETTABSTOPS As Long = &H192

'for use on Win NT/2000 only
Private Type WKSTA_INFO_102
  wki102_platform_id As Long
  wki102_computername As Long
  wki102_langroup As Long
  wki102_ver_major As Long
  wki102_ver_minor As Long
  wki102_lanroot As Long
  wki102_logged_on_users As Long
End Type

Private Declare Function NetWkstaGetInfo Lib "netapi32" _
  (ByVal servername As Long, _
   ByVal level As Long, _
   bufptr As Long) As Long
Private Declare Function NetApiBufferFree Lib "netapi32" _
   (ByVal Buffer As Long) As Long
'common routines
Private Declare Sub CopyMemory Lib "kernel32" _
   Alias "RtlMoveMemory" _
  (pTo As Any, _
   uFrom As Any, _
   ByVal lSize As Long)
Private Declare Function lstrlenW Lib "kernel32" _
  (ByVal lpString As Long) As Long

Private Declare Function SendMessage Lib "user32" _
   Alias "SendMessageA" _
  (ByVal hwnd As Long, _
   ByVal wMsg As Long, _
   ByVal wParam As Long, _
   lParam As Any) As Long

Private Sub Form_Load()

   ReDim TabArray(0 To 6) As Long
   TabArray(0) = 78
   TabArray(1) = 129
   TabArray(2) = 159
   TabArray(3) = 198
   TabArray(4) = 227
   TabArray(5) = 253
   TabArray(6) = 302

  'Clear any existing tabs
  'and set the list tabstops
   Call SendMessage(List1.hwnd, LB_SETTABSTOPS, 0&, ByVal 0&)
   Call SendMessage(List1.hwnd, LB_SETTABSTOPS, 7&, TabArray(0))

   Command1.Caption = "NetWkstaGetInfo"
   Label1.Caption = "call success (0) or error :"
   Label2.Caption = ""
End Sub

Private Sub Command1_Click()

   Dim bufptr          As Long
   Dim dwServer        As Long
   Dim success         As Long
   Dim nStructSize     As Long
   Dim bServer         As String
   Dim ws102           As WKSTA_INFO_102
   bServer = "\\" & Environ$("COMPUTERNAME") & vbNullString
   dwServer = StrPtr(bServer)
   success = NetWkstaGetInfo(dwServer, 102, bufptr)

   Label2.Caption = success
   If success = NERR_SUCCESS And _
      success <> ERROR_MORE_DATA Then
      nStructSize = LenB(ws102)
        'cast data into a WKSTA_INFO_102 type
        'and add the data to a list
         CopyMemory ws102, ByVal bufptr, nStructSize

         List1.AddItem GetPointerToByteStringW(ws102.wki102_computername) & vbTab & _
                       GetPointerToByteStringW(ws102.wki102_langroup) & vbTab & _
                       ws102.wki102_logged_on_users & vbTab & _
                       ws102.wki102_platform_id & vbTab & _
                       ws102.wki102_ver_major & vbTab & _
                       ws102.wki102_ver_minor & vbTab & _

   End If
   Call NetApiBufferFree(bufptr)

End Sub

Private Function GetPointerToByteStringW(ByVal dwData As Long) As String
   Dim tmp() As Byte
   Dim tmplen As Long
   If dwData <> 0 Then
      tmplen = lstrlenW(dwData) * 2
      If tmplen <> 0 Then
         ReDim tmp(0 To (tmplen - 1)) As Byte
         CopyMemory tmp(0), ByVal dwData, tmplen
         GetPointerToByteStringW = tmp
     End If
   End If
End Function


PayPal Link
Make payments with PayPal - it's fast, free and secure!


Copyright 1996-2011 VBnet and Randy Birch. All Rights Reserved.
Terms of Use  |  Your Privacy


Hit Counter