sl@24: using System; sl@24: using System.Runtime.InteropServices; sl@24: using Microsoft.Win32.SafeHandles; sl@24: sl@24: namespace Win32 sl@24: { sl@24: sl@24: static partial class Function sl@24: { sl@24: [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] sl@24: public static extern SafeFileHandle CreateFile( sl@24: [MarshalAs(UnmanagedType.LPTStr)] string lpFileName, sl@24: [MarshalAs(UnmanagedType.U4)] FileAccess dwDesiredAccess, sl@24: [MarshalAs(UnmanagedType.U4)] FileShare dwShareMode, sl@24: IntPtr lpSecurityAttributes, // optional SECURITY_ATTRIBUTES struct or IntPtr.Zero sl@24: [MarshalAs(UnmanagedType.U4)] CreationDisposition dwCreationDisposition, sl@24: [MarshalAs(UnmanagedType.U4)] FileFlagsAttributes dwFlagsAndAttributes, sl@24: IntPtr hTemplateFile); sl@24: sl@24: [DllImport("kernel32.dll", CharSet = CharSet.Ansi, SetLastError = true)] sl@24: public static extern SafeFileHandle CreateFileA( sl@24: [MarshalAs(UnmanagedType.LPStr)] string lpFileName, sl@24: [MarshalAs(UnmanagedType.U4)] FileAccess dwDesiredAccess, sl@24: [MarshalAs(UnmanagedType.U4)] FileShare dwShareMode, sl@24: IntPtr lpSecurityAttributes, sl@24: [MarshalAs(UnmanagedType.U4)] CreationDisposition dwCreationDisposition, sl@24: [MarshalAs(UnmanagedType.U4)] FileFlagsAttributes dwFlagsAndAttributes, sl@24: IntPtr hTemplateFile); sl@24: sl@24: [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] sl@24: public static extern SafeFileHandle CreateFileW( sl@24: [MarshalAs(UnmanagedType.LPWStr)] string lpFileName, sl@24: [MarshalAs(UnmanagedType.U4)] FileAccess dwDesiredAccess, sl@24: [MarshalAs(UnmanagedType.U4)] FileShare dwShareMode, sl@24: IntPtr lpSecurityAttributes, sl@24: [MarshalAs(UnmanagedType.U4)] CreationDisposition dwCreationDisposition, sl@24: [MarshalAs(UnmanagedType.U4)] FileFlagsAttributes dwFlagsAndAttributes, sl@24: IntPtr hTemplateFile); sl@24: } sl@24: sl@24: sl@24: static partial class Macro sl@24: { sl@24: sl@24: } sl@24: sl@24: sl@24: sl@24: static partial class Const sl@24: { sl@24: sl@24: } sl@24: sl@24: [Flags] sl@24: enum FileAccess : uint sl@24: { sl@24: NONE = 0, sl@24: sl@24: GENERIC_ALL = 0x10000000, sl@24: GENERIC_EXECUTE = 0x20000000, sl@24: GENERIC_READ = 0x80000000, sl@24: GENERIC_WRITE = 0x40000000, sl@24: sl@24: FILE_READ_DATA = (0x0001), // file & pipe sl@24: FILE_LIST_DIRECTORY = (0x0001), // directory sl@24: sl@24: FILE_WRITE_DATA = (0x0002), // file & pipe sl@24: FILE_ADD_FILE = (0x0002), // directory sl@24: sl@24: FILE_APPEND_DATA = (0x0004), // file sl@24: FILE_ADD_SUBDIRECTORY = (0x0004), // directory sl@24: FILE_CREATE_PIPE_INSTANCE = (0x0004), // named pipe sl@24: sl@24: FILE_READ_EA = (0x0008), // file & directory sl@24: sl@24: FILE_WRITE_EA = (0x0010), // file & directory sl@24: sl@24: FILE_EXECUTE = (0x0020), // file sl@24: FILE_TRAVERSE = (0x0020), // directory sl@24: sl@24: FILE_DELETE_CHILD = (0x0040), // directory sl@24: sl@24: FILE_READ_ATTRIBUTES = (0x0080), // all sl@24: sl@24: FILE_WRITE_ATTRIBUTES = (0x0100), // all sl@24: sl@24: FILE_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF), sl@24: sl@24: FILE_GENERIC_READ = (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE), sl@24: FILE_GENERIC_WRITE = (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE), sl@24: FILE_GENERIC_EXECUTE = (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE), sl@24: sl@24: DELETE = (0x00010000), sl@24: READ_CONTROL = (0x00020000), sl@24: WRITE_DAC = (0x00040000), sl@24: WRITE_OWNER = (0x00080000), sl@24: SYNCHRONIZE = (0x00100000), sl@24: sl@24: STANDARD_RIGHTS_REQUIRED = (0x000F0000), sl@24: sl@24: STANDARD_RIGHTS_READ = (READ_CONTROL), sl@24: STANDARD_RIGHTS_WRITE = (READ_CONTROL), sl@24: STANDARD_RIGHTS_EXECUTE = (READ_CONTROL), sl@24: sl@24: STANDARD_RIGHTS_ALL = (0x001F0000), sl@24: sl@24: SPECIFIC_RIGHTS_ALL = (0x0000FFFF), sl@24: sl@24: ACCESS_SYSTEM_SECURITY = (0x01000000), sl@24: sl@24: MAXIMUM_ALLOWED = (0x02000000) sl@24: } sl@24: sl@24: sl@24: sl@24: [Flags] sl@24: public enum FileShare : uint sl@24: { sl@24: /// sl@24: /// Prevents other processes from opening a file or device if they request delete, read, or write access. sl@24: /// sl@24: FILE_SHARE_NONE = 0x00000000, sl@24: /// sl@24: /// Enables subsequent open operations on an object to request read access. sl@24: /// Otherwise, other processes cannot open the object if they request read access. sl@24: /// If this flag is not specified, but the object has been opened for read access, the function fails. sl@24: /// sl@24: FILE_SHARE_READ = 0x00000001, sl@24: /// sl@24: /// Enables subsequent open operations on an object to request write access. sl@24: /// Otherwise, other processes cannot open the object if they request write access. sl@24: /// If this flag is not specified, but the object has been opened for write access, the function fails. sl@24: /// sl@24: FILE_SHARE_WRITE = 0x00000002, sl@24: /// sl@24: /// Enables subsequent open operations on an object to request delete access. sl@24: /// Otherwise, other processes cannot open the object if they request delete access. sl@24: /// If this flag is not specified, but the object has been opened for delete access, the function fails. sl@24: /// sl@24: FILE_SHARE_DELETE = 0x00000004 sl@24: } sl@24: sl@24: public enum CreationDisposition : uint sl@24: { sl@24: /// sl@24: /// Creates a new file. The function fails if a specified file exists. sl@24: /// sl@24: CREATE_NEW = 1, sl@24: /// sl@24: /// Creates a new file, always. sl@24: /// If a file exists, the function overwrites the file, clears the existing attributes, combines the specified file attributes, sl@24: /// and flags with FILE_ATTRIBUTE_ARCHIVE, but does not set the security descriptor that the SECURITY_ATTRIBUTES structure specifies. sl@24: /// sl@24: CREATE_ALWAYS = 2, sl@24: /// sl@24: /// Opens a file. The function fails if the file does not exist. sl@24: /// sl@24: OPEN_EXISTING = 3, sl@24: /// sl@24: /// Opens a file, always. sl@24: /// If a file does not exist, the function creates a file as if dwCreationDisposition is CREATE_NEW. sl@24: /// sl@24: OPEN_ALWAYS = 4, sl@24: /// sl@24: /// Opens a file and truncates it so that its size is 0 (zero) bytes. The function fails if the file does not exist. sl@24: /// The calling process must open the file with the GENERIC_WRITE access right. sl@24: /// sl@24: TRUNCATE_EXISTING = 5 sl@24: } sl@24: sl@24: [Flags] sl@24: public enum FileFlagsAttributes : uint sl@24: { sl@24: FILE_ATTRIBUTE_READONLY = 0x00000001, sl@24: FILE_ATTRIBUTE_HIDDEN = 0x00000002, sl@24: FILE_ATTRIBUTE_SYSTEM = 0x00000004, sl@24: FILE_ATTRIBUTE_DIRECTORY = 0x00000010, sl@24: FILE_ATTRIBUTE_ARCHIVE = 0x00000020, sl@24: FILE_ATTRIBUTE_DEVICE = 0x00000040, sl@24: FILE_ATTRIBUTE_NORMAL = 0x00000080, sl@24: FILE_ATTRIBUTE_TEMPORARY = 0x00000100, sl@24: FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200, sl@24: FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400, sl@24: FILE_ATTRIBUTE_COMPRESSED = 0x00000800, sl@24: FILE_ATTRIBUTE_OFFLINE = 0x00001000, sl@24: FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000, sl@24: FILE_ATTRIBUTE_ENCRYPTED = 0x00004000, sl@24: FILE_ATTRIBUTE_INTEGRITY_STREAM = 0x00008000, sl@24: FILE_ATTRIBUTE_VIRTUAL = 0x00010000, sl@24: FILE_ATTRIBUTE_NO_SCRUB_DATA = 0x00020000, sl@24: // These are flags supported through CreateFile (W7) and CreateFile2 (W8 and beyond) sl@24: FILE_FLAG_WRITE_THROUGH = 0x80000000, sl@24: FILE_FLAG_OVERLAPPED = 0x40000000, sl@24: FILE_FLAG_NO_BUFFERING = 0x20000000, sl@24: FILE_FLAG_RANDOM_ACCESS = 0x10000000, sl@24: FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000, sl@24: FILE_FLAG_DELETE_ON_CLOSE = 0x04000000, sl@24: FILE_FLAG_BACKUP_SEMANTICS = 0x02000000, sl@24: FILE_FLAG_POSIX_SEMANTICS = 0x01000000, sl@24: FILE_FLAG_SESSION_AWARE = 0x00800000, sl@24: FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000, sl@24: FILE_FLAG_OPEN_NO_RECALL = 0x00100000, sl@24: FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000 sl@24: } sl@24: sl@24: sl@24: sl@24: sl@24: }