Link to home
Start Free TrialLog in
Avatar of GregD
GregD

asked on

Accessing WTSQueryUserConfig in the wtsapi32.dll library

I'm currently trying to access the WTSQueryUserConfig function in wtsapi32.dll using the following code (see below)

The function TSEQueryConfig seems to work as I get a True value for 'Rtn' and 'Data' returns the correct length of the buffer, however nothing is returned in the buffer.

This is VERY urgent, hence the 500 points. It doesn't matter if it's a stupid mistake, you still get all the points.

Cheers.
Greg.

----------------------------------------------------
Public Declare Function TSEQueryConfig Lib "wtsapi32" Alias _
    "WTSQueryUserConfigA" (ByVal pServername As String, _
    ByVal pUserName As String, ByVal WTSConfigClass As WTS_CONFIG_CLASS, _
   ByVal pBuffer As String, ByRef DataLength As Long) As Boolean
   
Enum WTS_CONFIG_CLASS
   WTSUserConfigInitialProgram
   WTSUserConfigWorkingDirectory
   WTSUserConfigfInheritInitialProgram
   WTSUserConfigfAllowLogonTerminalServer
   WTSUserConfigTimeoutSettingsConnections
   WTSUserConfigTimeoutSettingsDisconnections
   WTSUserConfigTimeoutSettingsIdle
   WTSUserConfigfDeviceClientDrives
   WTSUserConfigfDeviceClientPrinters
   WTSUserConfigfDeviceClientDefaultPrinter
   WTSUserConfigBrokenTimeoutSettings
   WTSUserConfigReconnectSettings
   WTSUserConfigModemCallbackSettings
   WTSUserConfigModemCallbackPhoneNumber
   WTSUserConfigShadowingSettings
   WTSUserConfigTerminalServerProfilePath
   WTSUserConfigTerminalServerHomeDir
   WTSUserConfigTerminalServerHomeDirDrive
   WTSUserConfigfTerminalServerRemoteHomeDir
End Enum

Private Sub Command1_Click()
Dim buffptr As Long

svr = "SERVER" & vbNullChar
usr = "TESTUSER" & vbNullChar

Rtn = TSEQueryConfig(svr, usr, WTSUserConfigTerminalServerProfilePath, buffptr, Data)
End Sub
------------------------------------------------------
Avatar of TimCottee
TimCottee
Flag of United Kingdom of Great Britain and Northern Ireland image

You have declared the function to use pBuffer as a string but are using a long in buffptr to retrieve the result. I would imagine that if it is really a string that is returned then it should be passed as a string, if not then you would need to use CopyMemory api function to convert the returned pointer to a string.
Avatar of rpai
rpai

Did you try changing the WTSConfigClass parameter to check if that works?
WTSUserConfigTerminalServerProfilePath :-
The directory the path identifies must be created manually, and must exist prior to the logon. WTSSetUserConfig will not create the directory if it does not already exist.
Avatar of GregD

ASKER

TimCottee

I've tried almost all combinations for pbuffer & buffer, this one is the only one to return a True value for Rtn.
Buffer actually returns 0, not even a pointer, which is strange because the Data variable returns the correct length for the data that should be in the buffer.

rpai

Yup, tried most of the paramaters available, the one's that have data in them return the correct length in the data var, but nothing in the buffer. i.e. WTSUserConfigTerminalServerProfilePath returns 46 in the data var, which is the correct profile path & a nullchar.

WTSUserConfigTerminalServerHomeDirDrive returns 3 in the data var, which is the correct drive (H:) and a null char.

Any more ideas Guys???
Avatar of GregD

ASKER

TimCottee

I've tried almost all combinations for pbuffer & buffer, this one is the only one to return a True value for Rtn.
Buffer actually returns 0, not even a pointer, which is strange because the Data variable returns the correct length for the data that should be in the buffer.

rpai

Yup, tried most of the paramaters available, the one's that have data in them return the correct length in the data var, but nothing in the buffer. i.e. WTSUserConfigTerminalServerProfilePath returns 46 in the data var, which is the correct profile path & a nullchar.

WTSUserConfigTerminalServerHomeDirDrive returns 3 in the data var, which is the correct drive (H:) and a null char.

Any more ideas Guys???
Ah. Do you need AddressOF Buffptr where BuffPtr is Dim'ed as a String (not Long)?

Long shot and a guess really.
As in:

Dim BuffPtr as String

Rtn = TSEQueryConfig(svr, usr, WTSUserConfigTerminalServerProfilePath, AddressOf buffptr, Data)
Avatar of GregD

ASKER

Thanks for the tip PNJ , but I keep getting compile errors when I try that.

However if I fill the buffer first I do get some output, but it's rubbish i.e.

Dim ppBuffer As String
svr = "SERVER" & vbNullChar
usr = "TESTUSER" & vbNullChar

ppBuffer = Space$(80)
tmp = TSEQueryConfig(svr, usr, WTSUserConfigTerminalServerProfilePath, ppBuffer, Data)

I have the feeling I'm nearly there, but i'm just missing the finale piece of the puzzle. This is getting really urgent now, so I'm upping the points.

Hope someone can shed some light on this

Thanks guys
Greg.
Avatar of GregD

ASKER

Unfortunatly I can't add more than 500 points for a single question, so I will post up another 500 points (1000 points in total) to anyone who solves my little problem.

Greg.
Thinking about the last two parameters and the way other API calls seem to work, I wonder if you need to set "Data" to (eg) 80 and "ppBuffer"  to 80 spaces (as you have). I'm just wondering that not setting "Data" to anything means it gets set left at 0 and the API call is saying, "fair enough, your buffer is zero long, so you won't get anything back".

I cant' find out anything about TSEQueryConfig so I couldn't try this. (sorry about AddressOf - it needs a Function to point to)
ASKER CERTIFIED SOLUTION
Avatar of PNJ
PNJ

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of GregD

ASKER

I had searched & searched msdn & technet but couldn't find anything like this,

In the end it was something stupid I'd forgotton to include the '\\' before the server name :))

Thanks for all the tips guys, but after testing the msdn code provided by PNJ my mistake became obvious.

I'll post you another 500 points as promised PNJ.

Thanks
Greg.