75 lines
1.7 KiB
C++
75 lines
1.7 KiB
C++
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1998 - 1999.
|
||
|
//
|
||
|
// File: secutil.hxx
|
||
|
//
|
||
|
// Contents: security utility routines
|
||
|
//
|
||
|
// History: 10-April-98 dlee Created from 4 other copies in NT
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
#include <aclapi.h>
|
||
|
|
||
|
//
|
||
|
// Structure to hold information about an ACE to be created
|
||
|
//
|
||
|
|
||
|
struct ACE_DATA
|
||
|
{
|
||
|
UCHAR AceType;
|
||
|
UCHAR InheritFlags;
|
||
|
UCHAR AceFlags;
|
||
|
ACCESS_MASK Mask;
|
||
|
SID * pSid;
|
||
|
};
|
||
|
|
||
|
void WINAPI CiCreateSecurityDescriptor( ACE_DATA const * const pAceData,
|
||
|
ULONG cAces,
|
||
|
SID * pOwnerSid,
|
||
|
SID * pGroupSid,
|
||
|
XArray<BYTE> & xAcls );
|
||
|
|
||
|
|
||
|
|
||
|
inline ULONG CopyNamedDacls(
|
||
|
WCHAR const * pwcDestination,
|
||
|
WCHAR const * pwcSource )
|
||
|
{
|
||
|
PACL pDacl = 0;
|
||
|
PSID pOwnerSid = 0;
|
||
|
PSECURITY_DESCRIPTOR pSecurityDescriptor = 0;
|
||
|
|
||
|
ULONG Error = GetNamedSecurityInfo(
|
||
|
(WCHAR *) pwcSource,
|
||
|
SE_REGISTRY_KEY,
|
||
|
DACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION ,
|
||
|
&pOwnerSid,
|
||
|
NULL,
|
||
|
&pDacl,
|
||
|
NULL,
|
||
|
&pSecurityDescriptor );
|
||
|
|
||
|
if ( ERROR_SUCCESS != Error )
|
||
|
return Error;
|
||
|
|
||
|
Error = SetNamedSecurityInfo(
|
||
|
(WCHAR *) pwcDestination,
|
||
|
SE_KERNEL_OBJECT,
|
||
|
DACL_SECURITY_INFORMATION | OWNER_SECURITY_INFORMATION ,
|
||
|
pOwnerSid,
|
||
|
NULL,
|
||
|
pDacl,
|
||
|
NULL );
|
||
|
|
||
|
if ( 0 != pSecurityDescriptor )
|
||
|
LocalFree( pSecurityDescriptor );
|
||
|
|
||
|
return Error;
|
||
|
} //CopyNamedDacls
|
||
|
|