EDIT: followup at NetUserModalsGet() returns strings incorrectly for C#.NET

I'm struggling with the DLL declarations for this function:

NET_API_STATUS NetUserModalsGet( __in LPCWSTR servername, __in DWORD level, __out LPBYTE *bufptr ); 

(Reference: )

I tried this:

private string BArrayToString(byte[] myArray) { string retVal = ""; if (myArray == null) retVal = "Null"; else { foreach (byte myByte in myArray) { retVal += myByte.ToString("X2"); } } return retVal; } ... [DllImport("netapi32.dll")] public static extern int NetUserModalsGet( string servername, int level, out byte[] bufptr ); [DllImport("netapi32.dll")] public static extern int NetApiBufferFree( byte[] bufptr ); ... int retVal; byte[] myBuf; retVal = NetUserModalsGet("\\\\" + tbHost.Text, 0, out myBuf); myResults.Text += String.Format("retVal={0}\nBuffer={1}\n", retVal, BArrayToString(myBuf)); retVal = NetApiBufferFree(myBuf); 

I get a return value of 1231 (Network Location cannot be reached) no matter if I use an IP address or a NetBIOS name of a machine that's undoubtedly online, or even my own. On edit: this happens even if I don't put a "\\" in front of the hostname.

I'm doing things wrong, I know, and let's not even get started on how to declare that blasted return buffer (which can have a number of different lengths, ewww).

2 Answers

From pinvoke.net (they also have some sample code on how to use it):

 [DllImport("netapi32.dll", CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, SetLastError = true)] static extern uint NetUserModalsGet( string server, int level, out IntPtr BufPtr); 
5

It would be better to use System.Text.Encoding.ASCII.GetBytes(somestring_param) and System.Text.Encoding.ASCII.GetString(byte_array) instead of your own routine BArrayToString.

Hope this helps.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.