DWORD ListNamedValueSD ( HKEY RootKey, LPTSTR KeyName, LPTSTR ValueName ) { DWORD returnValue; SECURITY_DESCRIPTOR *sd; BOOL present; BOOL defaultDACL; PACL dacl; BOOL newSD = FALSE; returnValue = GetNamedValueSD (RootKey, KeyName, ValueName, &sd, &newSD); if ((returnValue != ERROR_SUCCESS) || (newSD == TRUE)) { _tprintf (TEXT("<Using Default Permissions>\n")); free (sd); return returnValue; } if (!GetSecurityDescriptorDacl (sd, &present, &dacl, &defaultDACL)) { free (sd); return GetLastError(); } if (!present) { _tprintf (TEXT("<Access is denied to everyone>\n")); free (sd); return ERROR_SUCCESS; } ListACL (dacl); free (sd); return ERROR_SUCCESS; }
/*---------------------------------------------------------------------------*\ * NAME: ListNamedValueSD * --------------------------------------------------------------------------* * DESCRIPTION: Displays the designated security descriptor. \*---------------------------------------------------------------------------*/ DWORD ListNamedValueSD ( HKEY hkeyRoot, LPTSTR tszKeyName, LPTSTR tszValueName, DWORD dwSDType ) { DWORD dwReturnValue = ERROR_SUCCESS; SECURITY_DESCRIPTOR *pSD = NULL; BOOL fPresent = FALSE; BOOL fDefaultDACL = FALSE; PACL dacl = NULL; dwReturnValue = GetNamedValueSD (hkeyRoot, tszKeyName, tszValueName, &pSD, NULL); if (dwReturnValue != ERROR_SUCCESS) { _tprintf (_T("<Using Default Permissions>\n")); goto CLEANUP; } if (!GetSecurityDescriptorDacl (pSD, &fPresent, &dacl, &fDefaultDACL)) { dwReturnValue = GetLastError(); goto CLEANUP; } if (!fPresent) { _tprintf (_T("<Access is denied to everyone>\n")); goto CLEANUP; } ListACL (dacl, dwSDType); CLEANUP: if(pSD) free (pSD); return dwReturnValue; }