using System; using System.Runtime.InteropServices; namespace Vanara.PInvoke { /// /// The SECURITY_ATTRIBUTES structure contains the security descriptor for an object and specifies whether the handle retrieved by /// specifying this structure is inheritable. This structure provides security settings for objects created by various functions, such as /// CreateFile, CreatePipe, CreateProcess, RegCreateKeyEx, or RegSaveKeyEx. /// [PInvokeData("winbase.h")] [StructLayout(LayoutKind.Sequential)] public class SECURITY_ATTRIBUTES { /// The size, in bytes, of this structure. Set this value to the size of the SECURITY_ATTRIBUTES structure. public int nLength = Marshal.SizeOf(typeof(SECURITY_ATTRIBUTES)); /// /// A pointer to a SECURITY_DESCRIPTOR structure that controls access to the object. If the value of this member is NULL, the object /// is assigned the default security descriptor associated with the access token of the calling process. This is not the same as /// granting access to everyone by assigning a NULL discretionary access control list (DACL). By default, the default DACL in the /// access token of a process allows access only to the user represented by the access token. /// public PSECURITY_DESCRIPTOR lpSecurityDescriptor; /// /// A Boolean value that specifies whether the returned handle is inherited when a new process is created. If this member is TRUE, /// the new process inherits the handle. /// [MarshalAs(UnmanagedType.Bool)] public bool bInheritHandle; } /// /// The SECURITY_ATTRIBUTES structure contains the security descriptor for an object and specifies whether the handle retrieved by /// specifying this structure is inheritable. This structure provides security settings for objects created by various functions, such as /// CreateFile, CreatePipe, CreateProcess, RegCreateKeyEx, or RegSaveKeyEx. /// [PInvokeData("winbase.h")] [StructLayout(LayoutKind.Sequential)] public struct tagSECURITY_ATTRIBUTES { /// The size, in bytes, of this structure. Set this value to the size of the SECURITY_ATTRIBUTES structure. public int nLength; /// /// A pointer to a SECURITY_DESCRIPTOR structure that controls access to the object. If the value of this member is NULL, the object /// is assigned the default security descriptor associated with the access token of the calling process. This is not the same as /// granting access to everyone by assigning a NULL discretionary access control list (DACL). By default, the default DACL in the /// access token of a process allows access only to the user represented by the access token. /// public PSECURITY_DESCRIPTOR lpSecurityDescriptor; /// /// A Boolean value that specifies whether the returned handle is inherited when a new process is created. If this member is TRUE, /// the new process inherits the handle. /// [MarshalAs(UnmanagedType.Bool)] public bool bInheritHandle; /// A default instance of this structure with the size set. public static readonly tagSECURITY_ATTRIBUTES Default = new tagSECURITY_ATTRIBUTES { nLength = Marshal.SizeOf(typeof(SECURITY_ATTRIBUTES)) }; } }