Thanks! That is awesome! I just had to search and replace Structure with ctypes.Structure and sizeof with ctypes.sizeof, save as logonw.py and then was able to successfully test via
x = logonw.CreateProcessWithLogonW(user,domain,password,0,'C:\\Python25\python.exe','C:\\Python25\python.exe -i') Thanks again for the help. -Emin On Tue, Jun 2, 2009 at 5:38 PM, Mario Alejandro Vilas Jerez <mvi...@gmail.com> wrote: > How about this? > > import ctypes > > NULL = 0 > TRUE = 1 > FALSE = 0 > > INVALID_HANDLE_VALUE = -1 > > WORD = ctypes.c_ushort > DWORD = ctypes.c_uint > LPSTR = ctypes.c_char_p > LPBYTE = LPSTR > HANDLE = DWORD > > # typedef struct _PROCESS_INFORMATION { > # HANDLE hProcess; > # HANDLE hThread; > # DWORD dwProcessId; > # DWORD dwThreadId; > # } PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION; > class PROCESS_INFORMATION(Structure): > _pack_ = 1 > _fields_ = [ > ('hProcess', HANDLE), > ('hThread', HANDLE), > ('dwProcessId', DWORD), > ('dwThreadId', DWORD), > ] > > # typedef struct _STARTUPINFO { > # DWORD cb; > # LPSTR lpReserved; > # LPSTR lpDesktop; > # LPSTR lpTitle; > # DWORD dwX; > # DWORD dwY; > # DWORD dwXSize; > # DWORD dwYSize; > # DWORD dwXCountChars; > # DWORD dwYCountChars; > # DWORD dwFillAttribute; > # DWORD dwFlags; > # WORD wShowWindow; > # WORD cbReserved2; > # LPBYTE lpReserved2; > # HANDLE hStdInput; > # HANDLE hStdOutput; > # HANDLE hStdError; > # } STARTUPINFO, *LPSTARTUPINFO; > class STARTUPINFO(Structure): > _pack_ = 1 > _fields_ = [ > ('cb', DWORD), > ('lpReserved', DWORD), # LPSTR > ('lpDesktop', LPSTR), > ('lpTitle', LPSTR), > ('dwX', DWORD), > ('dwY', DWORD), > ('dwXSize', DWORD), > ('dwYSize', DWORD), > ('dwXCountChars', DWORD), > ('dwYCountChars', DWORD), > ('dwFillAttribute', DWORD), > ('dwFlags', DWORD), > ('wShowWindow', WORD), > ('cbReserved2', WORD), > ('lpReserved2', DWORD), # LPBYTE > ('hStdInput', DWORD), > ('hStdOutput', DWORD), > ('hStdError', DWORD), > ] > > # BOOL WINAPI CreateProcessWithLogonW( > # __in LPCWSTR lpUsername, > # __in_opt LPCWSTR lpDomain, > # __in LPCWSTR lpPassword, > # __in DWORD dwLogonFlags, > # __in_opt LPCWSTR lpApplicationName, > # __inout_opt LPWSTR lpCommandLine, > # __in DWORD dwCreationFlags, > # __in_opt LPVOID lpEnvironment, > # __in_opt LPCWSTR lpCurrentDirectory, > # __in LPSTARTUPINFOW lpStartupInfo, > # __out LPPROCESS_INFORMATION lpProcessInfo > # ); > def CreateProcessWithLogonW(lpUsername = None, lpDomain = None, lpPassword = > None, dwLogonFlags = 0, lpApplicationName = None, lpCommandLine = None, > dwCreationFlags = 0, lpEnvironment = None, lpCurrentDirectory = None, > lpStartupInfo = None): > if not lpUsername: > lpUsername = NULL > else: > lpUsername = ctypes.c_wchar_p(lpUsername) > if not lpDomain: > lpDomain = NULL > else: > lpDomain = ctypes.c_wchar_p(lpDomain) > if not lpPassword: > lpPassword = NULL > else: > lpPassword = ctypes.c_wchar_p(lpPassword) > if not lpApplicationName: > lpApplicationName = NULL > else: > lpApplicationName = ctypes.c_wchar_p(lpApplicationName) > if not lpCommandLine: > lpCommandLine = NULL > else: > lpCommandLine = ctypes.create_unicode_buffer(lpCommandLine) > if not lpEnvironment: > lpEnvironment = NULL > else: > lpEnvironment = ctypes.c_wchar_p(lpEnvironment) > if not lpCurrentDirectory: > lpCurrentDirectory = NULL > else: > lpCurrentDirectory = ctypes.c_wchar_p(lpCurrentDirectory) > if not lpStartupInfo: > lpStartupInfo = STARTUPINFO() > lpStartupInfo.cb = sizeof(STARTUPINFO) > lpStartupInfo.lpReserved = 0 > lpStartupInfo.lpDesktop = 0 > lpStartupInfo.lpTitle = 0 > lpStartupInfo.dwFlags = 0 > lpStartupInfo.cbReserved2 = 0 > lpStartupInfo.lpReserved2 = 0 > lpProcessInformation = PROCESS_INFORMATION() > lpProcessInformation.hProcess = INVALID_HANDLE_VALUE > lpProcessInformation.hThread = INVALID_HANDLE_VALUE > lpProcessInformation.dwProcessId = 0 > lpProcessInformation.dwThreadId = 0 > success = ctypes.windll.advapi32.CreateProcessWithLogonW(lpUsername, > lpDomain, lpPassword, dwLogonFlags, lpApplicationName, > ctypes.byref(lpCommandLine), dwCreationFlags, lpEnvironment, > lpCurrentDirectory, ctypes.byref(lpStartupInfo), > ctypes.byref(lpProcessInformation)) > if success == FALSE: > raise ctypes.WinError() > return lpProcessInformation > > On Tue, Jun 2, 2009 at 6:00 PM, Tim Roberts <t...@probo.com> wrote: >> Emin.shopper Martinian.shopper wrote: >>> On Mon, Jun 1, 2009 at 1:32 PM, Tim Roberts <t...@probo.com> wrote: >>> >>>> Emin.shopper Martinian.shopper wrote: >>>> >>>>> Dear Experts, >>>>> >>>>> Can someone provide an example of how to use CreateProcessWithLogonW? >>>>> >>>> It's really just a combination of LogonUser and CreateProcess. >>>> >>> >>> Right, the problem is that I don't see it in win32process. Where do I >>> get CreateProcessWithLogonW? >>> >> >> Well, there's always ctypes... >> >> -- >> Tim Roberts, t...@probo.com >> Providenza & Boekelheide, Inc. >> >> _______________________________________________ >> python-win32 mailing list >> python-win32@python.org >> http://mail.python.org/mailman/listinfo/python-win32 >> > > > > -- > HONEY: I want to… put some powder on my nose. > GEORGE: Martha, won’t you show her where we keep the euphemism? > > > _______________________________________________ > python-win32 mailing list > python-win32@python.org > http://mail.python.org/mailman/listinfo/python-win32 > > _______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32