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 5 using Microsoft.Win32.SafeHandles; 6 using System; 7 using System.Collections.Generic; 8 using System.Linq; 9 using System.Runtime.InteropServices; 10 using System.Text; 11 using System.Threading.Tasks; 12 13 namespace ChromeDebug.LowLevel { 14 public static class NativeMethods { 15 [DllImport("kernel32.dll", SetLastError = true)] 16 [return: MarshalAs(UnmanagedType.Bool)] ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, out int lpNumberOfBytesRead)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)] NtQueryInformationProcess( IntPtr hProcess, LowLevelTypes.PROCESSINFOCLASS pic, ref LowLevelTypes.PROCESS_BASIC_INFORMATION pbi, int cb, out int pSize)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)] CommandLineToArgvW( [MarshalAs(UnmanagedType.LPWStr)] string lpCmdLine, out int pNumArgs)32 public static extern IntPtr CommandLineToArgvW( 33 [MarshalAs(UnmanagedType.LPWStr)] string lpCmdLine, 34 out int pNumArgs); 35 36 [DllImport("kernel32.dll", SetLastError = true)] LocalFree(IntPtr hMem)37 public static extern IntPtr LocalFree(IntPtr hMem); 38 39 [DllImport("kernel32.dll", SetLastError = true)] OpenProcess( LowLevelTypes.ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId)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)] QueryFullProcessImageName( IntPtr hProcess, [MarshalAs(UnmanagedType.U4)] LowLevelTypes.ProcessQueryImageNameMode flags, [Out] StringBuilder lpImageName, ref int size)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)] CloseHandle(IntPtr hObject)54 public static extern bool CloseHandle(IntPtr hObject); 55 56 [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] CreateFile(string lpFileName, LowLevelTypes.FileAccessFlags dwDesiredAccess, LowLevelTypes.FileShareFlags dwShareMode, IntPtr lpSecurityAttributes, LowLevelTypes.FileCreationDisposition dwDisp, LowLevelTypes.FileFlagsAndAttributes dwFlags, IntPtr hTemplateFile)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)] SHGetFileInfo(string pszPath, uint dwFileAttributes, ref LowLevelTypes.SHFILEINFO psfi, uint cbFileInfo, uint uFlags)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