In my main scope i declare my pointer variables :
…
PSID ownerSid = NULL ;
PACL pDACL = NULL ;
ownerSid = GetOwnerSIDFromFile (path);
pDACL = GetDACLFromFile (path);
if(ownerSid) FreeSid(ownerSid);
if(pDACL) LocalFree(pDACL);
…
PSID and PACL still cause leakages altgough i try to release them. How can i handle that situation ?
Here are 2 functions i call :
PSID GetOwnerSIDFromFile (char* sFileOrFolderName)
{
DWORD dwRtnCode = 0;
PSID pSidOwner = NULL ;
HANDLE hFile;
SID_IDENTIFIER_AUTHORITY SIDAuthWorld = SECURITY_WORLD_SID_AUTHORITY;
hFile = CreateFile(
sFileOrFolderName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
return NULL ;
AllocateAndInitializeSid(&SIDAuthWorld, 1, SECURITY_WORLD_RID, 0, 0, 0, 0, 0, 0, 0, &pSidOwner) ;
if( !pSidOwner )
{
CloseHandle(hFile);
return NULL ;
}
dwRtnCode = GetSecurityInfo(
hFile,
SE_FILE_OBJECT,
OWNER_SECURITY_INFORMATION,
&pSidOwner,
NULL,
NULL,
NULL,
NULL);
CloseHandle(hFile);
return pSidOwner ;
}
PACL GetDACLFromFile (char* sFileOrFolderName)
{
PACL pDACL = NULL ;
DWORD dwRtnCode = 0;
HANDLE hFile;
hFile = CreateFile(
sFileOrFolderName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
return NULL ;
pDACL = (PACL)LocalAlloc(LPTR,sizeof(PACL));
if( !pDACL )
return NULL ;
dwRtnCode = GetSecurityInfo(
hFile,
SE_FILE_OBJECT,
DACL_SECURITY_INFORMATION,
NULL,
NULL,
&pDACL,
NULL,
NULL);
CloseHandle(hFile);
return pDACL ;
}