1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5using Microsoft.Win32.SafeHandles; 6using System; 7using System.Collections.Generic; 8using System.Linq; 9using System.Runtime.InteropServices; 10using System.Text; 11using System.Threading.Tasks; 12 13namespace ChromeDebug.LowLevel { 14 public static class NativeMethods { 15 [DllImport("kernel32.dll", SetLastError = true)] 16 [return: MarshalAs(UnmanagedType.Bool)] 17 public static extern bool ReadProcessMemory(IntPtr hProcess, 18 IntPtr lpBaseAddress, 19 IntPtr lpBuffer, 20 int dwSize, 21 out int lpNumberOfBytesRead); 22 23 [DllImport("ntdll.dll", SetLastError = true)] 24 public static extern LowLevelTypes.NTSTATUS NtQueryInformationProcess( 25 IntPtr hProcess, 26 LowLevelTypes.PROCESSINFOCLASS pic, 27 ref LowLevelTypes.PROCESS_BASIC_INFORMATION pbi, 28 int cb, 29 out int pSize); 30 31 [DllImport("shell32.dll", SetLastError = true)] 32 public static extern IntPtr CommandLineToArgvW( 33 [MarshalAs(UnmanagedType.LPWStr)] string lpCmdLine, 34 out int pNumArgs); 35 36 [DllImport("kernel32.dll", SetLastError = true)] 37 public static extern IntPtr LocalFree(IntPtr hMem); 38 39 [DllImport("kernel32.dll", SetLastError = true)] 40 public static extern IntPtr OpenProcess( 41 LowLevelTypes.ProcessAccessFlags dwDesiredAccess, 42 [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, 43 int dwProcessId); 44 45 [DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.StdCall, 46 CharSet = CharSet.Unicode)] 47 public static extern uint QueryFullProcessImageName( 48 IntPtr hProcess, 49 [MarshalAs(UnmanagedType.U4)] LowLevelTypes.ProcessQueryImageNameMode flags, 50 [Out] StringBuilder lpImageName, ref int size); 51 52 [DllImport("kernel32.dll", SetLastError = true)] 53 [return: MarshalAs(UnmanagedType.Bool)] 54 public static extern bool CloseHandle(IntPtr hObject); 55 56 [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] 57 public static extern SafeFileHandle CreateFile(string lpFileName, 58 LowLevelTypes.FileAccessFlags dwDesiredAccess, 59 LowLevelTypes.FileShareFlags dwShareMode, 60 IntPtr lpSecurityAttributes, 61 LowLevelTypes.FileCreationDisposition dwDisp, 62 LowLevelTypes.FileFlagsAndAttributes dwFlags, 63 IntPtr hTemplateFile); 64 65 [DllImport("shell32.dll", CharSet = CharSet.Unicode)] 66 public static extern IntPtr SHGetFileInfo(string pszPath, 67 uint dwFileAttributes, 68 ref LowLevelTypes.SHFILEINFO psfi, 69 uint cbFileInfo, 70 uint uFlags); 71 } 72} 73