@@ -169,7 +169,7 @@ public unsafe WIN32_ERROR GetAcl(string path, bool isFolder, out AccessControlLi
169
169
public unsafe WIN32_ERROR AddAce ( string szPath , bool isFolder , string szSid )
170
170
{
171
171
ACL * pDACL = default ;
172
- // ACL* pNewDACL = default;
172
+ ACL * pNewDACL = default ;
173
173
PSID pSid = default ;
174
174
ACL_SIZE_INFORMATION aclSizeInfo = default ;
175
175
ACCESS_ALLOWED_ACE * pTempAce = default ;
@@ -190,28 +190,28 @@ public unsafe WIN32_ERROR AddAce(string szPath, bool isFolder, string szSid)
190
190
191
191
// Get ACL size info
192
192
bool bResult = PInvoke . GetAclInformation (
193
- * pDACL ,
193
+ pDACL ,
194
194
& aclSizeInfo ,
195
195
( uint ) Marshal . SizeOf < ACL_SIZE_INFORMATION > ( ) ,
196
196
ACL_INFORMATION_CLASS . AclSizeInformation ) ;
197
197
198
198
if ( ! bResult )
199
199
return ( WIN32_ERROR ) Marshal . GetLastPInvokeError ( ) ;
200
200
201
- var cbNewDACL = aclSizeInfo . AclBytesInUse + aclSizeInfo . AclBytesFree + Marshal . SizeOf < ACCESS_ALLOWED_ACE > ( ) ;
202
- uint dwAclCount = aclSizeInfo . AceCount ;
201
+ var cbNewDACL = aclSizeInfo . AclBytesInUse + aclSizeInfo . AclBytesFree + Marshal . SizeOf < ACCESS_ALLOWED_ACE > ( ) * 2 ;
203
202
204
- //// Allocate space for the new DACL that contains the new ACE
205
- //PInvoke.LocalAlloc(LOCAL_ALLOC_FLAGS.LPTR, (nuint)cbNewDACL);
203
+ pNewDACL = ( ACL * ) PInvoke . LocalAlloc ( LOCAL_ALLOC_FLAGS . LPTR , ( nuint ) cbNewDACL ) ;
204
+ if ( pNewDACL == default )
205
+ return ( WIN32_ERROR ) Marshal . GetLastPInvokeError ( ) ;
206
206
207
207
// Initialize the new DACL
208
- PInvoke . InitializeAcl ( out ACL pNewDACL , ( uint ) cbNewDACL , ACE_REVISION . ACL_REVISION ) ;
208
+ PInvoke . InitializeAcl ( pNewDACL , ( uint ) cbNewDACL , ACE_REVISION . ACL_REVISION ) ;
209
209
210
210
// Copy ACEs from the old DACL
211
- for ( uint dwAceIndex = 0u ; dwAceIndex < dwAclCount ; dwAceIndex ++ )
211
+ for ( uint dwAceIndex = 0u ; dwAceIndex < aclSizeInfo . AceCount ; dwAceIndex ++ )
212
212
{
213
213
bResult = PInvoke . GetAce ( pDACL , dwAceIndex , ( void * * ) & pTempAce ) ;
214
- PInvoke . AddAce ( & pNewDACL , ACE_REVISION . ACL_REVISION , uint . MaxValue , ( void * ) pTempAce , pTempAce ->Header . AceSize ) ;
214
+ PInvoke . AddAce ( pNewDACL , ACE_REVISION . ACL_REVISION , uint . MaxValue , pTempAce , pTempAce ->Header . AceSize ) ;
215
215
}
216
216
217
217
// Get the principal's SID of the new ACE
@@ -237,7 +237,7 @@ public unsafe WIN32_ERROR AddAce(string szPath, bool isFolder, string szSid)
237
237
OBJECT_SECURITY_INFORMATION . DACL_SECURITY_INFORMATION | OBJECT_SECURITY_INFORMATION . PROTECTED_DACL_SECURITY_INFORMATION ,
238
238
new PSID ( ( void * ) 0 ) ,
239
239
new PSID ( ( void * ) 0 ) ,
240
- & pNewDACL ) ;
240
+ pNewDACL ) ;
241
241
}
242
242
243
243
if ( result is not WIN32_ERROR . ERROR_SUCCESS )
0 commit comments