/*++ Copyright (c) Microsoft Corporation. All rights reserved. Module Name: SepSddl.h Abstract: This header contains private information for processing SDDL strings in kernel mode. This file is meant to be included only by sesddl.c. Author: Adrian J. Oney - April 21, 2002 Revision History: --*/ // // Define the location of our various SIDs // #ifndef _KERNELIMPLEMENTATION_ #define DEFINE_SDDL_ENTRY(Sid, Ver, Sddl, SddlLen) \ { FIELD_OFFSET(SE_EXPORTS, Sid), Ver, Sddl, SddlLen } #else extern PSID SeServiceSid; extern PSID SeLocalServiceSid; extern PSID SeNetworkServiceSid; #define DEFINE_SDDL_ENTRY(Sid, Ver, Sddl, SddlLen) \ { &##Sid, Sddl, SddlLen } #endif // // Local macros // #define SDDL_LEN_TAG( tagdef ) ( sizeof( tagdef ) / sizeof( WCHAR ) - 1 ) // 64K-1 #define SDDL_MAX_ACL_SIZE 0xFFFF // // This structure is used to do some lookups for mapping ACES // typedef enum { WIN2K_OR_LATER, WINXP_OR_LATER } OS_SID_VER; typedef struct _STRSD_KEY_LOOKUP { PWSTR Key; ULONG KeyLen; ULONG Value; } STRSD_KEY_LOOKUP, *PSTRSD_KEY_LOOKUP; // // This structure is used to map account monikers to sids // typedef struct _STRSD_SID_LOOKUP { #ifndef _KERNELIMPLEMENTATION_ ULONG_PTR ExportSidFieldOffset; OS_SID_VER OsVer; #else PSID *Sid; #endif WCHAR Key[SDDL_ALIAS_SIZE+2]; ULONG KeyLen; } STRSD_SID_LOOKUP, *PSTRSD_SID_LOOKUP; // // Functions private to sddl.c // NTSTATUS SepSddlSecurityDescriptorFromSDDLString( IN LPCWSTR SecurityDescriptorString, IN LOGICAL SuppliedByDefaultMechanism, OUT PSECURITY_DESCRIPTOR *SecurityDescriptor ); NTSTATUS SepSddlDaclFromSDDLString( IN LPCWSTR StringSecurityDescriptor, IN LOGICAL SuppliedByDefaultMechanism, OUT ULONG *SecurityDescriptorControlFlags, OUT PACL *DiscretionaryAcl ); NTSTATUS SepSddlGetSidForString( IN PWSTR String, OUT PSID *SID, OUT PWSTR *End ); LOGICAL SepSddlLookupAccessMaskInTable( IN PWSTR String, OUT ULONG *AccessMask, OUT PWSTR *End ); NTSTATUS SepSddlGetAclForString( IN PWSTR AclString, OUT PACL *Acl, OUT PWSTR *End ); NTSTATUS SepSddlAddAceToAcl( IN OUT PACL *Acl, IN OUT ULONG *TrueAclSize, IN ULONG AceType, IN ULONG AceFlags, IN ULONG AccessMask, IN ULONG RemainingAces, IN PSID SidPtr ); #ifndef _KERNELIMPLEMENTATION_ LOGICAL SepSddlParseWideStringUlong( IN LPCWSTR Buffer, OUT LPCWSTR *FinalPosition, OUT ULONG *Value ); #endif // _KERNELIMPLEMENTATION_