On 6/21/22 13:39, Steven Manross wrote:

I was intrigued by this and I would like to get it to work, but I cannot...  I 
know I'm doing something wrong, but don't know what.  I will leave this for the 
archives, and maybe it will help someone else some day.
...
def get_wts_info(session_id):
     '''
         Get WTS Info
     '''
     # This only tries to work on the local server currently but I get an 
access violation running the WinStationQueryInformationW line

     Buf = ctypes.POINTER(WinStationInformation)()
     BufLen = 260

     hWinSta = ctypes.windll.LoadLibrary("WINSTA.DLL")
     if hWinSta:
         winsta_handle = hWinSta._handle
         print(f'winsta_handle = {winsta_handle}')
         QueryInfoHandle = 
ctypes.windll.kernel32.GetProcAddress(ctypes.c_ulonglong(winsta_handle), 
b"WinStationQueryInformationW")

         # This handle is 0...  possibly because of the numeric conversion from 
the winsta_handle to a ctypes.c_ulonglong  ???  unsure

No, 0 is the error return that means the name was not found.

You shouldn't need to use LoadLibrary and GetProcAddress.  ctypes does that for you automatically.

    winsta = ctypes.WinDLL('winsta.dll')

    winsta.WinStationQueryInformationW( 0, session_id, 8, ctypes.byref(Buf), BufLen, ctypes.byref(RtnLen))

If you have Visual Studio, you can try doing "link /dump /exports \windows\system32\winsta.dll" to make sure it has that entry point.

--
Tim Roberts, t...@probo.com
Providenza & Boekelheide, Inc.

_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32

Reply via email to