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>

Reply via email to