[python-win32] how to use CreateProcessWithLogonW

Emin.shopper Martinian.shopper emin.shopper at gmail.com
Wed Jun 3 17:35:38 CEST 2009


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
<mvilas at 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 <timr at probo.com> wrote:
>> Emin.shopper Martinian.shopper wrote:
>>> On Mon, Jun 1, 2009 at 1:32 PM, Tim Roberts <timr at 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, timr at probo.com
>> Providenza & Boekelheide, Inc.
>>
>> _______________________________________________
>> python-win32 mailing list
>> python-win32 at 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 at python.org
> http://mail.python.org/mailman/listinfo/python-win32
>
>


More information about the python-win32 mailing list