public static IntPtr Run(string fileName, DesiredAccessFlags desiredAccess, ShareModeFlags shareMode, CreationDispositionEnum creationDisposition, FlagsAndAttributes flagsAndAttributes, IntPtr templateFile) { //var buffer = IntPtr.Zero; var handle = IntPtr.Zero; var securityAttributes = new SecurityAttributes { lpSecurityDescriptor = IntPtr.Zero, //TODO: create other methods to use this bInheritHandle = true }; securityAttributes.nLength = Marshal.SizeOf(securityAttributes); try { //buffer = Marshal.AllocHGlobal(securityAttributes.nLength); //Marshal.StructureToPtr(securityAttributes, buffer, true); handle = CreateFileMethod(fileName, (uint)desiredAccess, (uint)shareMode, ref securityAttributes, (uint)creationDisposition, (uint)flagsAndAttributes, templateFile); } finally { //Marshal.FreeHGlobal(buffer); } return handle; }
public static extern bool OpenProcessToken(IntPtr ProcessHandle, DesiredAccessFlags desiredAccess, out IntPtr TokenHandle);