From: Kerem Gümrükcü on 25 Feb 2010 08:25 Well, i found it by my self: All Parameters must be "struct" not "class". Except that, the signatures are perfectly ok and ready to use! Change PROCESS_INFORMATION and STARTUPINFO to "struct" and it will work! Regards Kerem -- ----------------------- Beste Gr�sse / Best regards / Votre bien devoue Kerem G�mr�kc� Latest Project: http://www.pro-it-education.de/software/deviceremover Latest Open-Source Projects: http://entwicklung.junetz.de ----------------------- "Kerem G�mr�kc�" <kareem114(a)hotmail.com> schrieb im Newsbeitrag news:e925XKgtKHA.5940(a)TK2MSFTNGP02.phx.gbl... > Hi, > > for whatever reason (and i am about to go nuts!) this > signatures dont work. Either i get a access violation > error or wrong parameter exception. Could someone > please help me and tell me what the hell is wrong here > and if possible show me a working example. These are > my signatures: > > [Flags] > internal enum CreateProcessCreationFlags : uint > { > ZERO_FLAG = 0x00000000, > CREATE_BREAKAWAY_FROM_JOB = 0x01000000, > CREATE_DEFAULT_ERROR_MODE = 0x04000000, > CREATE_NEW_CONSOLE = 0x00000010, > CREATE_NEW_PROCESS_GROUP = 0x00000200, > CREATE_NO_WINDOW = 0x08000000, > CREATE_PROTECTED_PROCESS = 0x00040000, > CREATE_PRESERVE_CODE_AUTHZ_LEVEL = 0x02000000, > CREATE_SEPARATE_WOW_VDM = 0x00001000, > CREATE_SHARED_WOW_VDM = 0x00001000, > CREATE_SUSPENDED = 0x00000004, > CREATE_UNICODE_ENVIRONMENT = 0x00000400, > DEBUG_ONLY_THIS_PROCESS = 0x00000002, > DEBUG_PROCESS = 0x00000001, > DETACHED_PROCESS = 0x00000008, > EXTENDED_STARTUPINFO_PRESENT = 0x00080000, > INHERIT_PARENT_AFFINITY = 0x00010000 > } > > [Flags] > internal enum StartupInfoStartupFlags : uint > { > ZERO_FLAG = 0x00000000, > STARTF_USESHOWWINDOW = 0x1, > STARTF_USESIZE = 0x2, > STARTF_USEPOSITION = 0x4, > STARTF_USECOUNTCHARS = 0x8, > STARTF_USEFILLATTRIBUTE = 0x10, > STARTF_RUNFULLSCREEN = 0x20, > STARTF_FORCEONFEEDBACK = 0x40, > STARTF_FORCEOFFFEEDBACK = 0x80, > STARTF_USESTDHANDLES = 0x100, > } > > [StructLayout(LayoutKind.Sequential)] > internal struct PROCESS_INFORMATION > { > public IntPtr hProcess; > public IntPtr hThread; > public uint dwProcessId; > public uint dwThreadId; > } > > [StructLayout(LayoutKind.Sequential, > CharSet = CharSet.Unicode)] > internal class STARTUPINFO > { > public uint cb; > [MarshalAs(UnmanagedType.LPWStr)] > public string lpReserved; > [MarshalAs(UnmanagedType.LPWStr)] > public string lpDesktop; > [MarshalAs(UnmanagedType.LPWStr)] > public string lpTitle; > public uint dwX; > public uint dwY; > public uint dwXSize; > public uint dwYSize; > public uint dwXCountChars; > public uint dwYCountChars; > public uint dwFillAttribute; > public StartupInfoStartupFlags dwFlags; > public ushort ShowWindow; > public ushort Reserved2; > public IntPtr Reserved3; > public IntPtr StdInputHandle; > public IntPtr StdOutputHandle; > public IntPtr StdErrorHandle; > } > > [DllImport("advapi32.dll", > CharSet = CharSet.Unicode, > SetLastError = true)] > [return: MarshalAs(UnmanagedType.Bool)] > internal static extern bool CreateProcessAsUser( > [In] IntPtr hToken, > [MarshalAs(UnmanagedType.LPWStr)] > [In] string lpApplicationName, > [MarshalAs(UnmanagedType.LPWStr)] > [In] string lpCommandLine, > [In] IntPtr lpProcessAttributes, > [In] IntPtr lpThreadAttributes, > [MarshalAs(UnmanagedType.Bool)] > [In] bool bInheritHandles, > [In] CreateProcessCreationFlags dwCreationFlags, > [In] IntPtr lpEnvironment, > [MarshalAs(UnmanagedType.LPWStr)] > [In] string lpCurrentDirectory, > [In] ref STARTUPINFO lpStartupInfo, > [Out] out PROCESS_INFORMATION lpProcessInfo); > > The "hToken" is valid (confirmed and checked!) and the STARTUPINFO > has been initialized like this: > > PROCESS_INFORMATION pi = new PROCESS_INFORMATION(); > STARTUPINFO si = new STARTUPINFO(); > si.cb = (uint) Marshal.SizeOf(typeof(STARTUPINFO)); > > The call looks like this: > > if (CreateProcessAsUser( > hRestrictedToken, //valid token > appPath, //full path to the executable > cmdLine, //either null or command line params > IntPtr.Zero, //NULL pointer, use defaults > IntPtr.Zero, //NULL pointer, use defaults > false, //no inherit handles > CreateProcessCreationFlags.ZERO_FLAG, //zero flag, > use defaults > IntPtr.Zero, //inherit environment > null, //null directory > ref si, //ref to STARTUPINFO > out pi) == false) //out to PROCESS_INFORMATION > { > throw new Win32Exception(); > } > > Whatever i tried, "w-h-a-t e-v-e-r" i could not make it work! > Either i got a access violation or a wrong parameter for > GetLastError(). > > Could someone please show me what i am doing wrong here, > or much better give me a working sample,... > > Thanks in advance,... > > > Kerem > > -- > ----------------------- > Beste Gr�sse / Best regards / Votre bien devoue > Kerem G�mr�kc� > Latest Project: http://www.pro-it-education.de/software/deviceremover > Latest Open-Source Projects: http://entwicklung.junetz.de > -----------------------
|
Pages: 1 Prev: CreateProcessAsUser horror,... Next: DateTimeFormat.MonthNames contains 13 items??? |