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