1
0
mirror of https://github.com/winscp/winscp.git synced 2026-10-24 02:28:55 +03:00
Files
winscp/dotnet/internal/UnsafeNativeMethods.cs
Martin Prikryl e376153750 Fixing internal type visibility
Source commit: 375d6ff91122bae579363d4e2064e680050e37ab
2019-07-03 01:16:35 +02:00

197 lines
6.4 KiB
C#

using Microsoft.Win32.SafeHandles;
using System;
using System.Runtime.InteropServices;
namespace WinSCP
{
internal enum JobObjectInfoType
{
AssociateCompletionPortInformation = 7,
BasicLimitInformation = 2,
BasicUIRestrictions = 4,
EndOfJobTimeInformation = 6,
ExtendedLimitInformation = 9,
SecurityLimitInformation = 5,
GroupInformation = 11
}
[StructLayout(LayoutKind.Sequential)]
internal struct SecurityAttributes
{
public UInt32 nLength;
public IntPtr lpSecurityDescriptor;
public Int32 bInheritHandle;
}
[StructLayout(LayoutKind.Sequential)]
internal struct JobObjectBasicLimitInformation
{
public Int64 PerProcessUserTimeLimit;
public Int64 PerJobUserTimeLimit;
public UInt32 LimitFlags;
public UIntPtr MinimumWorkingSetSize;
public UIntPtr MaximumWorkingSetSize;
public UInt32 ActiveProcessLimit;
public UIntPtr Affinity;
public UInt32 PriorityClass;
public UInt32 SchedulingClass;
}
[StructLayout(LayoutKind.Sequential)]
internal struct IOCounters
{
public UInt64 ReadOperationCount;
public UInt64 WriteOperationCount;
public UInt64 OtherOperationCount;
public UInt64 ReadTransferCount;
public UInt64 WriteTransferCount;
public UInt64 OtherTransferCount;
}
[StructLayout(LayoutKind.Sequential)]
internal struct JobObjectExtendedLimitInformation
{
public JobObjectBasicLimitInformation BasicLimitInformation;
public IOCounters IoInfo;
public UIntPtr ProcessMemoryLimit;
public UIntPtr JobMemoryLimit;
public UIntPtr PeakProcessMemoryUsed;
public UIntPtr PeakJobMemoryUsed;
}
[Flags]
internal enum FileMapProtection : uint
{
PageReadonly = 0x02,
PageReadWrite = 0x04,
PageWriteCopy = 0x08,
PageExecuteRead = 0x20,
PageExecuteReadWrite = 0x40,
SectionCommit = 0x8000000,
SectionImage = 0x1000000,
SectionNoCache = 0x10000000,
SectionReserve = 0x4000000,
}
[Flags]
internal enum FileMapAccess : int
{
FileMapCopy = 0x0001,
FileMapWrite = 0x0002,
FileMapRead = 0x0004,
FileMapAllAccess = 0x001f,
FileMapExecute = 0x0020,
}
[Flags]
internal enum StandardRights
{
Delete = 0x00010000,
ReadPermissions = 0x00020000,
WritePermissions = 0x00040000,
TakeOwnership = 0x00080000,
Synchronize = 0x00100000,
Required = Delete | ReadPermissions | WritePermissions | TakeOwnership,
}
// Isn't this the same as FileMapAccess?
[Flags]
internal enum FileMappingRights
{
FileMapCopy = 1,
FileMapWrite = 2,
FileMapRead = 4,
SectionMapExecute = 8,
SectionExtendSize = 16,
FileMapExecute = 32,
AllAccess = FileMapCopy | FileMapWrite | FileMapRead | SectionMapExecute | SectionExtendSize |
StandardRights.Required
}
[Flags]
internal enum DesktopRights
{
ReadObjects = 1,
CreateWindow = 2,
CreateMenu = 4,
HookControl = 8,
JournalRecord = 16,
JournalPlayback = 32,
Enumerate = 64,
WriteObjects = 128,
SwitchDesktop = 256,
AllAccess = ReadObjects | CreateWindow | CreateMenu | HookControl |
JournalRecord | JournalPlayback | Enumerate | WriteObjects | SwitchDesktop |
StandardRights.Required
}
[Flags]
internal enum WindowStationRights
{
EnumDesktops = 1,
ReadAttributes = 2,
AccessClipboard = 4,
CreateDesktop = 8,
WriteAttributes = 16,
AccessGlobalAtoms = 32,
ExitWindows = 64,
Enumerate = 256,
ReadScreen = 512,
AllAccess = EnumDesktops | ReadAttributes | AccessClipboard | CreateDesktop |
WriteAttributes | AccessGlobalAtoms | ExitWindows | Enumerate | ReadScreen |
StandardRights.Required
}
internal enum RegistryFlags
{
RegSz = 0x02,
SubKeyWow6432Key = 0x00020000,
}
internal enum RegistryType
{
RegNone = 0,
}
internal static class UnsafeNativeMethods
{
public const int ERROR_ALREADY_EXISTS = 183;
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern SafeFileHandle CreateFileMapping(SafeFileHandle hFile, IntPtr lpAttributes, FileMapProtection fProtect, int dwMaximumSizeHigh, int dwMaximumSizeLow, string lpName);
[DllImport("kernel32", SetLastError = true, ExactSpelling = true)]
public static extern IntPtr MapViewOfFile(SafeFileHandle handle, FileMapAccess dwDesiredAccess, uint dwFileOffsetHigh, uint dwFileOffsetLow, UIntPtr dwNumberOfBytesToMap);
[DllImport("kernel32", ExactSpelling = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool UnmapViewOfFile(IntPtr lpBaseAddress);
[DllImport("kernel32", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
public static extern int CloseHandle(IntPtr hObject);
[DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern IntPtr CreateJobObject(IntPtr a, string lpName);
[DllImport("kernel32", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetInformationJobObject(IntPtr hJob, JobObjectInfoType infoType, IntPtr lpJobObjectInfo, uint cbJobObjectInfoLength);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr GetProcessWindowStation();
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr GetThreadDesktop(int dwThreadId);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern int GetCurrentThreadId();
[DllImport("advapi32", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern int RegGetValue(UIntPtr hkey, string lpSubKey, string lpValue, RegistryFlags dwFlags, out RegistryType pdwType, IntPtr pvData, ref uint pcbData);
}
}