on 3/21/07 11:28 PM, Dr Gerard Hammond at [EMAIL PROTECTED] wrote:
> Hi,
>
> Does anybody know how to change a Win32 file's permissions via RB code.
> I need to modify a file so that the Security tab has the "Full
> Control" checkbox ticked for *ALL USERS*
>
> using the shell I tried
>
> attrib -r thefilepath
>
> but that didn't work.
>
> Logging in as an administrator and doing it via the Properties panel
> works but my users struggle with this level of detail.
Gerard,
Here is some C++ code that does close to what you need. It is a snippet from
some code to give the Everyone group full access to a directory. It should
be straight forward to convert to declares with the help of the docs on
MSDN. You will still have to be logged in as a user with the rights to
change file/directory permissions for the file in question.
Chris
ACCESS_MODE aMode = GRANT_ACCESS ;
EXPLICIT_ACCESS aAccess ;
LPTSTR aPath = inDir->path ;
LPTSTR aTrustee = "Everyone" ;
PACL aOldACL ;
PACL aNewACL = NULL ;
PSECURITY_DESCRIPTOR aPSD = NULL ;
DWORD aErr = ERROR_SUCCESS;
DWORD aMask = ACTRL_FILE_WRITE | ACTRL_FILE_WRITE_PROP
| ACTRL_FILE_WRITE_ATTRIB | ACTRL_FILE_READ | ACTRL_FILE_READ_PROP |
ACTRL_FILE_READ_ATTRIB | ACTRL_FILE_APPEND | ACTRL_FILE_EXECUTE ;
if (hAdvapi_DLL != NULL)
{
aErr = GetNamedSecurityInfo( aPath, SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION, NULL, NULL, &aOldACL, NULL, &aPSD );
if ( aErr == ERROR_SUCCESS)
{
BuildExplicitAccessWithName( &aAccess, aTrustee, aMask, aMode,
SUB_CONTAINERS_AND_OBJECTS_INHERIT ) ;
aErr = SetEntriesInAcl( 1, &aAccess, aOldACL, &aNewACL ) ;
if ( aErr == ERROR_SUCCESS )
{
aErr = SetNamedSecurityInfo( aPath, SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION, NULL, NULL, aNewACL, NULL );
}
if ( aNewACL != NULL )
{
AccFree( aNewACL ) ;
}
}
if( aPSD != NULL)
{
AccFree( aPSD );
}
aResult = ( aErr == ERROR_SUCCESS ) ;
}
_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>
Search the archives:
<http://support.realsoftware.com/listarchives/lists.html>