Solved

NetUserGetInfo and NetWkstaGetUserInfo access violations

Posted on 2000-03-19
6
467 Views
Last Modified: 2008-03-10
I have the following code:
      DWORD currentuserpriv;
      LPWKSTA_USER_INFO_0 currentuser = NULL;
      LPUSER_INFO_1 buffer = NULL;
      NetWkstaUserGetInfo(NULL, DWORD(0), (LPBYTE *)&currentuser);
      NetUserGetInfo(NULL, LPCWSTR(currentuser->wkui0_username),DWORD(1), (LPBYTE *)&buffer);
      currentuserpriv = buffer->usri1_priv;
      MessageBox(currentuser->wkui0_username, NULL, MB_OK);
      if (currentuserpriv != USER_PRIV_ADMIN) {
            MessageBox("You must have Administrative priviliges to run Setup.", "Setup", MB_OK|MB_ICONSTOP);
      }

Upon running it, however, it gives me an access violation on NetUserGetInfo's currentuser->wkui0_username.  How do I fix this.  The code is to check for administrative privileges for a setup program.
0
Comment
Question by:victech
  • 4
  • 2
6 Comments
 
LVL 32

Expert Comment

by:jhance
ID: 2633638
I see several problem here:

Where are you checking the return status of NetWkstaUserGetInfo()?

How do you know that currentuser->wkui0_username has a valid username?

How do you know that currentuser is not NULL?

0
 

Author Comment

by:victech
ID: 2633808
I'm sorry, that doesn't quite answer what I was originally looking for.  I just wanted to know why the access violation was being issued.
0
 
LVL 32

Accepted Solution

by:
jhance earned 100 total points
ID: 2633830
Then I'll post it again since you obviously don't understand what I'm talking about:

How do you know that currentuser->wkui0_username has a valid username?

How do you know that currentuser is not NULL?

You say NetUserGetInfo is crashing.  But you are NOT validating ANY of the input parameters.  Some of these are resultant from the NetWkstaUserGetInfo function.  If it failed then currentuser might still be NULL.  Also currentuser->wkui0_username might also be NULL.

How can anyone offer any further advice until you check these paramters input to the function, which ABSOLUTELY can cause it to crash and verify that they are correct?????
0
Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

 
LVL 32

Expert Comment

by:jhance
ID: 2633894
Here is this code and it works fine for me.  

Don't forget that you should compile this as UNICODE (define both UNICODE and _UNICODE in the project settings) or take special precautions to convert to wchar_t for those functions that are UNICODE only.

The definitions for WKSTA_USER_INFO_X and USER_INFO_X are sometimes confusing because NetWkstaUserGetInfo and NetUserGetInfo are BOTH UNICODE ONLY even though the definitions for their data structures imply that they take LPTSTR they really only take LPWSTR.

If you're mixing and matching UNICODE and ASCII, be very careful with these functions and their parameters.


#include "windows.h"
#include "lm.h"

int main(int argc, char* argv[])
{
      DWORD currentuserpriv;
      LPWKSTA_USER_INFO_0 currentuser = NULL;
      LPUSER_INFO_1 buffer = NULL;

      if(NetWkstaUserGetInfo(NULL, DWORD(0), (LPBYTE *)&currentuser) != NERR_Success){
            wprintf(L"Error in NetWkstaUserGetInfo\n");
            return -1;
      }
      else{
            wprintf(L"NetWkstaUserGetInfo OK\n");
      }

      if(NetUserGetInfo(NULL, LPCWSTR(currentuser->wkui0_username),DWORD(1), (LPBYTE *)&buffer) != NERR_Success){
            NetApiBufferFree(currentuser);

            wprintf(L"Error in NetUserGetInfo\n");

            return -1;
      }

      currentuserpriv = buffer->usri1_priv;

      wprintf(L"Current user is %s\n", currentuser->wkui0_username);

      if (currentuserpriv != USER_PRIV_ADMIN) {
            wprintf(L"You are not administrator\n");
      }
      else{
            wprintf(L"You are administrator\n");
      }

      NetApiBufferFree(currentuser);
      NetApiBufferFree(buffer);

      return 0;
}
0
 

Author Comment

by:victech
ID: 2634162
That last bit of source code you posted was perfect!  Thank you very much, I'm sorry I originally rejected your answer.  I'm just a beginner and didn't quite take the time to understand your answer as well as I should have.  Thanks again.
0
 
LVL 32

Expert Comment

by:jhance
ID: 2634224
Well don't feel bad.  The entire set of NetXXX functions in NT are poorly documented and many don't work exactly as "advertised".  The biggest issue is the UNICODE vs. non-UNICODE builds of an application that uses them.  All of the header files for these use standard string definitions which are fine if you are using UNICODE in your build options.  

0

Featured Post

Courses: Start Training Online With Pros, Today

Brush up on the basics or master the advanced techniques required to earn essential industry certifications, with Courses. Enroll in a course and start learning today. Training topics range from Android App Dev to the Xen Virtualization Platform.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Errors will happen. It is a fact of life for the programmer. How and when errors are detected have a great impact on quality and cost of a product. It is better to detect errors at compile time, when possible and practical. Errors that make their wa…
This article shows you how to optimize memory allocations in C++ using placement new. Applicable especially to usecases dealing with creation of large number of objects. A brief on problem: Lets take example problem for simplicity: - I have a G…
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

786 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question