530 lines
9.2 KiB
C
530 lines
9.2 KiB
C
/*++
|
||
|
||
Copyright (c) 1989 Microsoft Corporation
|
||
|
||
Module Name:
|
||
|
||
ntrtl.h
|
||
|
||
Abstract:
|
||
|
||
Include file for NT runtime routines that are callable by both
|
||
kernel mode code in the executive and user mode code in various
|
||
NT subsystems.
|
||
|
||
Author:
|
||
|
||
Steve Wood (stevewo) 31-Mar-1989
|
||
|
||
Environment:
|
||
|
||
These routines are statically linked in the caller's executable and
|
||
are callable in either kernel mode or user mode.
|
||
|
||
Revision History:
|
||
|
||
--*/
|
||
|
||
#ifndef _NTRTL_
|
||
#define _NTRTL_
|
||
|
||
//#include <win16nt.h>
|
||
|
||
//*************************************************************************
|
||
//
|
||
// Types from ntseapi.h
|
||
|
||
#ifdef remove
|
||
#include <ntseapi.h>
|
||
#endif //remove
|
||
|
||
|
||
typedef PVOID PSECURITY_DESCRIPTOR; // winnt
|
||
|
||
typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
|
||
|
||
typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
|
||
|
||
typedef struct _SID_IDENTIFIER_AUTHORITY {
|
||
UCHAR Value[6];
|
||
} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
|
||
|
||
typedef struct _SID_AND_ATTRIBUTES {
|
||
PSID Sid;
|
||
ULONG Attributes;
|
||
} SID_AND_ATTRIBUTES, * PSID_AND_ATTRIBUTES;
|
||
|
||
typedef struct _LUID_AND_ATTRIBUTES {
|
||
LUID Luid;
|
||
ULONG Attributes;
|
||
} LUID_AND_ATTRIBUTES, * PLUID_AND_ATTRIBUTES;
|
||
|
||
|
||
typedef ULONG ACCESS_MASK; // winnt
|
||
typedef ACCESS_MASK *PACCESS_MASK;
|
||
|
||
typedef struct _GENERIC_MAPPING {
|
||
ACCESS_MASK GenericRead;
|
||
ACCESS_MASK GenericWrite;
|
||
ACCESS_MASK GenericExecute;
|
||
ACCESS_MASK GenericAll;
|
||
} GENERIC_MAPPING;
|
||
typedef GENERIC_MAPPING *PGENERIC_MAPPING;
|
||
|
||
typedef struct _ACL {
|
||
UCHAR AclRevision;
|
||
UCHAR Sbz1;
|
||
USHORT AclSize;
|
||
USHORT AceCount;
|
||
USHORT Sbz2;
|
||
} ACL;
|
||
typedef ACL *PACL;
|
||
|
||
typedef enum _ACL_INFORMATION_CLASS {
|
||
AclRevisionInformation = 1,
|
||
AclSizeInformation
|
||
} ACL_INFORMATION_CLASS;
|
||
|
||
|
||
typedef struct _PRIVILEGE_SET {
|
||
ULONG PrivilegeCount;
|
||
ULONG Control;
|
||
LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
|
||
} PRIVILEGE_SET, * PPRIVILEGE_SET;
|
||
|
||
|
||
//
|
||
//
|
||
//*************************************************************************
|
||
|
||
|
||
//
|
||
// Fast primitives to compare, move, and zero memory
|
||
//
|
||
#ifdef remove
|
||
|
||
ULONG
|
||
RtlCompareMemory (
|
||
IN PVOID Source1,
|
||
IN PVOID Source2,
|
||
IN ULONG Length
|
||
);
|
||
|
||
VOID
|
||
RtlMoveMemory (
|
||
IN PVOID Destination,
|
||
IN PVOID Source,
|
||
IN ULONG Length
|
||
);
|
||
|
||
VOID
|
||
RtlFillMemory (
|
||
IN PVOID Destination,
|
||
IN ULONG Length,
|
||
IN UCHAR Fill
|
||
);
|
||
|
||
VOID
|
||
RtlFillMemoryUlong (
|
||
IN PVOID Destination,
|
||
IN ULONG Length,
|
||
IN ULONG Pattern
|
||
);
|
||
|
||
VOID
|
||
RtlZeroMemory (
|
||
IN PVOID Destination,
|
||
IN ULONG Length
|
||
);
|
||
|
||
#endif //remove
|
||
|
||
|
||
//
|
||
// Security ID RTL routine definitions
|
||
//
|
||
|
||
|
||
BOOLEAN
|
||
RtlValidSid (
|
||
IN PSID Sid
|
||
);
|
||
|
||
|
||
BOOLEAN
|
||
RtlEqualSid (
|
||
IN PSID Sid1,
|
||
IN PSID Sid2
|
||
);
|
||
|
||
|
||
BOOLEAN
|
||
RtlEqualPrefixSid (
|
||
IN PSID Sid1,
|
||
IN PSID Sid2
|
||
);
|
||
|
||
|
||
ULONG
|
||
RtlLengthRequiredSid (
|
||
IN ULONG SubAuthorityCount
|
||
);
|
||
|
||
VOID
|
||
RtlInitializeSid (
|
||
IN PSID Sid,
|
||
IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,
|
||
IN ULONG SubAuthorityCount
|
||
);
|
||
|
||
PSID_IDENTIFIER_AUTHORITY
|
||
RtlIdentifierAuthoritySid (
|
||
IN PSID Sid
|
||
);
|
||
|
||
PULONG
|
||
RtlSubAuthoritySid (
|
||
IN PSID Sid,
|
||
IN ULONG SubAuthority
|
||
);
|
||
|
||
PUCHAR
|
||
RtlSubAuthorityCountSid (
|
||
IN PSID Sid
|
||
);
|
||
|
||
ULONG
|
||
RtlLengthSid (
|
||
IN PSID Sid
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlCopySid (
|
||
IN ULONG DestinationSidLength,
|
||
OUT PSID DestinationSid,
|
||
IN PSID SourceSid
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlCopySidAndAttributesArray (
|
||
IN ULONG ArrayLength,
|
||
IN PSID_AND_ATTRIBUTES Source,
|
||
IN ULONG TargetSidBufferSize,
|
||
OUT PSID_AND_ATTRIBUTES TargetArrayElement,
|
||
OUT PSID TargetSid,
|
||
OUT PSID *NextTargetSid,
|
||
OUT PULONG RemainingTargetSidSize
|
||
);
|
||
|
||
|
||
|
||
|
||
|
||
//
|
||
// LUID RTL routine definitions
|
||
//
|
||
|
||
|
||
VOID
|
||
RtlCopyLuidAndAttributesArray (
|
||
IN ULONG ArrayLength,
|
||
IN PLUID_AND_ATTRIBUTES Source,
|
||
OUT PLUID_AND_ATTRIBUTES Target
|
||
);
|
||
|
||
|
||
|
||
//
|
||
// ACCESS_MASK RTL routine definitions
|
||
//
|
||
|
||
|
||
BOOLEAN
|
||
RtlAreAllAccessesGranted(
|
||
IN ACCESS_MASK GrantedAccess,
|
||
IN ACCESS_MASK DesiredAccess
|
||
);
|
||
|
||
|
||
BOOLEAN
|
||
RtlAreAnyAccessesGranted(
|
||
IN ACCESS_MASK GrantedAccess,
|
||
IN ACCESS_MASK DesiredAccess
|
||
);
|
||
|
||
VOID
|
||
RtlMapGenericMask(
|
||
IN OUT PACCESS_MASK AccessMask,
|
||
IN PGENERIC_MAPPING GenericMapping
|
||
);
|
||
|
||
|
||
|
||
//
|
||
// ACL RTL routine definitions
|
||
//
|
||
|
||
BOOLEAN
|
||
RtlValidAcl (
|
||
IN PACL Acl
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlCreateAcl (
|
||
IN PACL Acl,
|
||
IN ULONG AclLength,
|
||
IN ULONG AclRevision
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlQueryInformationAcl (
|
||
IN PACL Acl,
|
||
OUT PVOID AclInformation,
|
||
IN ULONG AclInformationLength,
|
||
IN ACL_INFORMATION_CLASS AclInformationClass
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlSetInformationAcl (
|
||
IN PACL Acl,
|
||
IN PVOID AclInformation,
|
||
IN ULONG AclInformationLength,
|
||
IN ACL_INFORMATION_CLASS AclInformationClass
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlAddAce (
|
||
IN OUT PACL Acl,
|
||
IN ULONG AceRevision,
|
||
IN ULONG StartingAceIndex,
|
||
IN PVOID AceList,
|
||
IN ULONG AceListLength
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlDeleteAce (
|
||
IN OUT PACL Acl,
|
||
IN ULONG AceIndex
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlGetAce (
|
||
IN PACL Acl,
|
||
IN ULONG AceIndex,
|
||
OUT PVOID *Ace
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlAddAccessAllowedAce (
|
||
IN OUT PACL Acl,
|
||
IN ULONG AceRevision,
|
||
IN ACCESS_MASK AccessMask,
|
||
IN PSID Sid
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlAddAccessDeniedAce (
|
||
IN OUT PACL Acl,
|
||
IN ULONG AceRevision,
|
||
IN ACCESS_MASK AccessMask,
|
||
IN PSID Sid
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlAddAuditAccessAce (
|
||
IN OUT PACL Acl,
|
||
IN ULONG AceRevision,
|
||
IN ACCESS_MASK AccessMask,
|
||
IN PSID Sid,
|
||
IN BOOLEAN AuditSuccess,
|
||
IN BOOLEAN AuditFailure
|
||
);
|
||
|
||
BOOLEAN
|
||
RtlFirstFreeAce (
|
||
IN PACL Acl,
|
||
OUT PVOID *FirstFree
|
||
);
|
||
|
||
|
||
//
|
||
// SecurityDescriptor RTL routine definitions
|
||
//
|
||
|
||
NTSTATUS
|
||
RtlCreateSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||
IN ULONG Revision
|
||
);
|
||
|
||
|
||
BOOLEAN
|
||
RtlValidSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor
|
||
);
|
||
|
||
|
||
ULONG
|
||
RtlLengthSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlGetControlSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||
OUT PSECURITY_DESCRIPTOR_CONTROL Control,
|
||
OUT PULONG Revision
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlSetDaclSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||
IN BOOLEAN DaclPresent,
|
||
IN PACL Dacl OPTIONAL,
|
||
IN BOOLEAN DaclDefaulted OPTIONAL
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlGetDaclSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||
OUT PBOOLEAN DaclPresent,
|
||
OUT PACL *Dacl,
|
||
OUT PBOOLEAN DaclDefaulted
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlSetSaclSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||
IN BOOLEAN SaclPresent,
|
||
IN PACL Sacl OPTIONAL,
|
||
IN BOOLEAN SaclDefaulted OPTIONAL
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlGetSaclSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||
OUT PBOOLEAN SaclPresent,
|
||
OUT PACL *Sacl,
|
||
OUT PBOOLEAN SaclDefaulted
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlSetOwnerSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||
IN PSID Owner OPTIONAL,
|
||
IN BOOLEAN OwnerDefaulted OPTIONAL
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlGetOwnerSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||
OUT PSID *Owner,
|
||
OUT PBOOLEAN OwnerDefaulted
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlSetGroupSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||
IN PSID Group OPTIONAL,
|
||
IN BOOLEAN GroupDefaulted OPTIONAL
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlGetGroupSecurityDescriptor (
|
||
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
|
||
OUT PSID *Group,
|
||
OUT PBOOLEAN GroupDefaulted
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
RtlMakeSelfRelativeSD(
|
||
IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
|
||
IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
|
||
IN OUT PULONG BufferLength
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlAbsoluteToSelfRelativeSD(
|
||
IN PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
|
||
IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
|
||
IN OUT PULONG BufferLength
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlSelfRelativeToAbsoluteSD(
|
||
IN OUT PSECURITY_DESCRIPTOR SelfRelativeSecurityDescriptor,
|
||
OUT PSECURITY_DESCRIPTOR AbsoluteSecurityDescriptor,
|
||
IN OUT PULONG AbsoluteSecurityDescriptorSize,
|
||
IN OUT PACL Dacl,
|
||
IN OUT PULONG DaclSize,
|
||
IN OUT PACL Sacl,
|
||
IN OUT PULONG SaclSize,
|
||
IN OUT PSID Owner,
|
||
IN OUT PULONG OwnerSize,
|
||
IN OUT PSID PrimaryGroup,
|
||
IN OUT PULONG PrimaryGroupSize
|
||
);
|
||
|
||
NTSTATUS
|
||
RtlNewSecurityGrantedAccess(
|
||
IN ACCESS_MASK DesiredAccess,
|
||
OUT PPRIVILEGE_SET Privileges,
|
||
IN OUT PULONG Length,
|
||
IN HANDLE Token OPTIONAL,
|
||
IN PGENERIC_MAPPING GenericMapping,
|
||
OUT PACCESS_MASK RemainingDesiredAccess
|
||
);
|
||
|
||
#ifdef remove
|
||
|
||
typedef struct _MESSAGE_RESOURCE_ENTRY {
|
||
USHORT Length;
|
||
USHORT Reserved;
|
||
UCHAR Text[ 1 ];
|
||
} MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY;
|
||
|
||
typedef struct _MESSAGE_RESOURCE_BLOCK {
|
||
ULONG LowId;
|
||
ULONG HighId;
|
||
ULONG OffsetToEntries;
|
||
} MESSAGE_RESOURCE_BLOCK, *PMESSAGE_RESOURCE_BLOCK;
|
||
|
||
typedef struct _MESSAGE_RESOURCE_DATA {
|
||
ULONG NumberOfBlocks;
|
||
MESSAGE_RESOURCE_BLOCK Blocks[ 1 ];
|
||
} MESSAGE_RESOURCE_DATA, *PMESSAGE_RESOURCE_DATA;
|
||
|
||
NTSTATUS
|
||
RtlFindMessage(
|
||
IN PVOID DllHandle,
|
||
IN ULONG MessageTableId,
|
||
IN ULONG MessageLanguageId,
|
||
IN ULONG MessageId,
|
||
OUT PMESSAGE_RESOURCE_ENTRY *MessageEntry
|
||
);
|
||
|
||
#endif //remove
|
||
|
||
|
||
//
|
||
// Routine for converting NT status codes to DOS/OS|2 equivalents.
|
||
//
|
||
|
||
ULONG
|
||
*RtlNtStatusToDosError (
|
||
IN NTSTATUS Status
|
||
);
|
||
|
||
#endif // _NTRTL_
|