Bonjour tout le monde,
J'ai un code qui vise donner le droit de contrôle total (ou à la limite "lecture/écriture" )au groupe "tout le monde" ( ou "Everyone" en anglais ). Le problème c'est que ce programme, après lancement en compte SYSTEM(j'utilise PSTools pour faire ça):
1) OK: Réussit à ajouter le groupe "Tout le monde" aux groupes qui ont droit sur ce dossier
2) KO: ne donne à ce groupe que "Autorisations spéciales" mais pas de lecture/écriture

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include "stdafx.h"
#include "monProg.h"
#include <windows.h>
#include <AccCtrl.h>
#include <Aclapi.h>
#include <stdio.h>




DWORD AddAceToObjectsSecurityDescriptor (
    LPTSTR pszObjName,          // name of object
    SE_OBJECT_TYPE ObjectType,  // type of object
    LPTSTR pszTrustee,          // trustee for new ACE
    TRUSTEE_FORM TrusteeForm,   // format of trustee structure
    DWORD dwAccessRights,       // access mask for new ACE
    ACCESS_MODE AccessMode,     // type of ACE
    DWORD dwInheritance         // inheritance flags for new ACE
) ;

int APIENTRY _tWinMain(HINSTANCE ,
                     HINSTANCE ,
                     LPTSTR    ,
                     int       )
{

PSID pSIDEveryone = NULL;

SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;

//Create a SID for the BUILTIN\Administrators group.
   
if( !AllocateAndInitializeSid(&SIDAuthWorld, 1,
                              SECURITY_WORLD_RID,
                                                          0,
                                        0, 0, 0, 0, 0, 0,
                                       &pSIDEveryone) )
    {
        printf( "Error %u\n",GetLastError() );
        
    }

DWORD d=AddAceToObjectsSecurityDescriptor (
         "C:\\test\\",  // name of object
         SE_FILE_OBJECT,  // type of object
        (LPTSTR)pSIDEveryone,  // trustee for new ACE
         TRUSTEE_IS_SID,  // format of trustee structure
       GENERIC_ALL|GENERIC_READ|GENERIC_WRITE|GENERIC_EXECUTE,  //access mask for new ACE
    SET_ACCESS,  // type of ACE
    NO_INHERITANCE  // inheritance flags for new ACE
) ;

return 0;
}


DWORD AddAceToObjectsSecurityDescriptor (
    LPTSTR pszObjName,          // name of object
    SE_OBJECT_TYPE ObjectType,  // type of object
    LPTSTR pszTrustee,          // trustee for new ACE
    TRUSTEE_FORM TrusteeForm,   // format of trustee structure
    DWORD dwAccessRights,       // access mask for new ACE
    ACCESS_MODE AccessMode,     // type of ACE
    DWORD dwInheritance         // inheritance flags for new ACE
) 
{
	DWORD dwRes = 0;
	PACL pOldDACL = NULL, pNewDACL = NULL;
	PSECURITY_DESCRIPTOR pSD = NULL;
	EXPLICIT_ACCESS ea;

	if (NULL == pszObjName) 
		return ERROR_INVALID_PARAMETER;

	// Get a pointer to the existing DACL.

	dwRes = GetNamedSecurityInfo(pszObjName, ObjectType, 
		  DACL_SECURITY_INFORMATION,
		  NULL, NULL, &pOldDACL, NULL, &pSD);
	if (ERROR_SUCCESS != dwRes) {
		printf( "GetNamedSecurityInfo Error %u\n", dwRes );
		goto Cleanup; 
	}  

	// Initialize an EXPLICIT_ACCESS structure for the new ACE. 

	ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
	ea.grfAccessPermissions = dwAccessRights;
	ea.grfAccessMode = AccessMode;
	ea.grfInheritance= dwInheritance;
	ea.Trustee.TrusteeForm = TrusteeForm;
	ea.Trustee.TrusteeType= TRUSTEE_IS_GROUP;
	ea.Trustee.ptstrName = pszTrustee;
	

	// Create a new ACL that merges the new ACE
	// into the existing DACL.

	dwRes = SetEntriesInAcl(1,&ea, pOldDACL, &pNewDACL);
	if (ERROR_SUCCESS != dwRes)  {
		printf( "SetEntriesInAcl Error %u\n", dwRes );
		goto Cleanup; 
	}  

	// Attach the new ACL as the object's DACL.

	dwRes = SetNamedSecurityInfo(pszObjName, ObjectType, 
		  DACL_SECURITY_INFORMATION,
		  NULL, NULL, pNewDACL, NULL);
	if (ERROR_SUCCESS != dwRes)  {
		printf( "SetNamedSecurityInfo Error %u\n", dwRes );
		goto Cleanup; 
	}  

	Cleanup:

		if(pSD != NULL) 
			LocalFree((HLOCAL) pSD); 
		if(pNewDACL != NULL) 
			LocalFree((HLOCAL) pNewDACL); 

		return dwRes;
}
Alors, ce qui paraît c'est que ces autorisations spéciales n'incluent pas l'écriture/lecture ( ou je me trompe ? )
Je sais pas comment corriger ce code pour donner le droit lecture/écriture à ce groupe

Merci d'avance pour toute indication