Ejemplo n.º 1
0
        public static IntPtr NtOpenProcess(UInt32 ProcessId, SpDi.Win32.Kernel32.ProcessAccessFlags DesiredAccess)
        {
            IntPtr ProcessHandle = IntPtr.Zero;

            SpDi.Native.OBJECT_ATTRIBUTES oa = new SpDi.Native.OBJECT_ATTRIBUTES();
            SpDi.Native.CLIENT_ID         ci = new SpDi.Native.CLIENT_ID();
            ci.UniqueProcess = (IntPtr)ProcessId;

            object[] funcargs =
            {
                ProcessHandle, DesiredAccess, oa, ci
            };

            SpDi.Native.NTSTATUS retValue = (SpDi.Native.NTSTATUS)Generic.DynamicAPIInvoke(@"ntdll.dll", @"NtOpenProcess", typeof(DELEGATES.NtOpenProcess), ref funcargs);
            if (retValue != SpDi.Native.NTSTATUS.Success && retValue == SpDi.Native.NTSTATUS.InvalidCid)
            {
                throw new InvalidOperationException("An invalid client ID was specified.");
            }
            if (retValue != SpDi.Native.NTSTATUS.Success)
            {
                throw new UnauthorizedAccessException("Access is denied.");
            }

            ProcessHandle = (IntPtr)funcargs[0];

            return(ProcessHandle);
        }
Ejemplo n.º 2
0
        public static IntPtr OpenProcess(SpDi.Win32.Kernel32.ProcessAccessFlags dwDesiredAccess, bool bInheritHandle, UInt32 dwProcessId)
        {
            object[] funcargs =
            {
                dwDesiredAccess, bInheritHandle, dwProcessId
            };

            return((IntPtr)Generic.DynamicAPIInvoke(@"k" + "e" + "r" + "n" + "e" + "l" + "3" + "2" + "." + "d" + "l" + "l", @"Op" + "en" + "Pr" + "oc" + "ess", typeof(Delegates.OpenProcess), ref funcargs));
        }