163 lines
3.2 KiB
C
163 lines
3.2 KiB
C
#ifndef _PH_SECEDIT_H
|
|
#define _PH_SECEDIT_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// secedit
|
|
|
|
typedef struct _PH_ACCESS_ENTRY
|
|
{
|
|
PWSTR Name;
|
|
ACCESS_MASK Access;
|
|
BOOLEAN General;
|
|
BOOLEAN Specific;
|
|
PWSTR ShortName;
|
|
} PH_ACCESS_ENTRY, *PPH_ACCESS_ENTRY;
|
|
|
|
PHLIBAPI
|
|
HPROPSHEETPAGE
|
|
NTAPI
|
|
PhCreateSecurityPage(
|
|
_In_ PWSTR ObjectName,
|
|
_In_ PPH_GET_OBJECT_SECURITY GetObjectSecurity,
|
|
_In_ PPH_SET_OBJECT_SECURITY SetObjectSecurity,
|
|
_In_opt_ PVOID Context,
|
|
_In_ PPH_ACCESS_ENTRY AccessEntries,
|
|
_In_ ULONG NumberOfAccessEntries
|
|
);
|
|
|
|
PHLIBAPI
|
|
VOID
|
|
NTAPI
|
|
PhEditSecurity(
|
|
_In_ HWND hWnd,
|
|
_In_ PWSTR ObjectName,
|
|
_In_ PPH_GET_OBJECT_SECURITY GetObjectSecurity,
|
|
_In_ PPH_SET_OBJECT_SECURITY SetObjectSecurity,
|
|
_In_opt_ PVOID Context,
|
|
_In_ PPH_ACCESS_ENTRY AccessEntries,
|
|
_In_ ULONG NumberOfAccessEntries
|
|
);
|
|
|
|
typedef struct _PH_STD_OBJECT_SECURITY
|
|
{
|
|
PPH_OPEN_OBJECT OpenObject;
|
|
PWSTR ObjectType;
|
|
PVOID Context;
|
|
} PH_STD_OBJECT_SECURITY, *PPH_STD_OBJECT_SECURITY;
|
|
|
|
FORCEINLINE ACCESS_MASK PhGetAccessForGetSecurity(
|
|
_In_ SECURITY_INFORMATION SecurityInformation
|
|
)
|
|
{
|
|
ACCESS_MASK access = 0;
|
|
|
|
if (
|
|
(SecurityInformation & OWNER_SECURITY_INFORMATION) ||
|
|
(SecurityInformation & GROUP_SECURITY_INFORMATION) ||
|
|
(SecurityInformation & DACL_SECURITY_INFORMATION)
|
|
)
|
|
{
|
|
access |= READ_CONTROL;
|
|
}
|
|
|
|
if (SecurityInformation & SACL_SECURITY_INFORMATION)
|
|
{
|
|
access |= ACCESS_SYSTEM_SECURITY;
|
|
}
|
|
|
|
return access;
|
|
}
|
|
|
|
FORCEINLINE ACCESS_MASK PhGetAccessForSetSecurity(
|
|
_In_ SECURITY_INFORMATION SecurityInformation
|
|
)
|
|
{
|
|
ACCESS_MASK access = 0;
|
|
|
|
if (
|
|
(SecurityInformation & OWNER_SECURITY_INFORMATION) ||
|
|
(SecurityInformation & GROUP_SECURITY_INFORMATION)
|
|
)
|
|
{
|
|
access |= WRITE_OWNER;
|
|
}
|
|
|
|
if (SecurityInformation & DACL_SECURITY_INFORMATION)
|
|
{
|
|
access |= WRITE_DAC;
|
|
}
|
|
|
|
if (SecurityInformation & SACL_SECURITY_INFORMATION)
|
|
{
|
|
access |= ACCESS_SYSTEM_SECURITY;
|
|
}
|
|
|
|
return access;
|
|
}
|
|
|
|
PHLIBAPI
|
|
_Callback_ NTSTATUS
|
|
NTAPI
|
|
PhStdGetObjectSecurity(
|
|
_Out_ PSECURITY_DESCRIPTOR *SecurityDescriptor,
|
|
_In_ SECURITY_INFORMATION SecurityInformation,
|
|
_In_opt_ PVOID Context
|
|
);
|
|
|
|
PHLIBAPI
|
|
_Callback_ NTSTATUS
|
|
NTAPI
|
|
PhStdSetObjectSecurity(
|
|
_In_ PSECURITY_DESCRIPTOR SecurityDescriptor,
|
|
_In_ SECURITY_INFORMATION SecurityInformation,
|
|
_In_opt_ PVOID Context
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhGetSeObjectSecurity(
|
|
_In_ HANDLE Handle,
|
|
_In_ ULONG ObjectType,
|
|
_In_ SECURITY_INFORMATION SecurityInformation,
|
|
_Out_ PSECURITY_DESCRIPTOR *SecurityDescriptor
|
|
);
|
|
|
|
PHLIBAPI
|
|
NTSTATUS
|
|
NTAPI
|
|
PhSetSeObjectSecurity(
|
|
_In_ HANDLE Handle,
|
|
_In_ ULONG ObjectType,
|
|
_In_ SECURITY_INFORMATION SecurityInformation,
|
|
_In_ PSECURITY_DESCRIPTOR SecurityDescriptor
|
|
);
|
|
|
|
// secdata
|
|
|
|
PHLIBAPI
|
|
BOOLEAN
|
|
NTAPI
|
|
PhGetAccessEntries(
|
|
_In_ PWSTR Type,
|
|
_Out_ PPH_ACCESS_ENTRY *AccessEntries,
|
|
_Out_ PULONG NumberOfAccessEntries
|
|
);
|
|
|
|
PHLIBAPI
|
|
PPH_STRING
|
|
NTAPI
|
|
PhGetAccessString(
|
|
_In_ ACCESS_MASK Access,
|
|
_In_ PPH_ACCESS_ENTRY AccessEntries,
|
|
_In_ ULONG NumberOfAccessEntries
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif |