GetNamedSecurityInfo schlägt fehl



  • Hallo,

    ich kämpfe mit GetNamedSecurityInfo(...). Dabei habe ich das
    Problem, dass der Befehl bei der Anwendung auf Dateien
    wunderbar funktioniert, aber wenn ich ihn auf die Registry
    anwende schlägt er fehl. Hat von Euch jemand eine Idee?
    Hier mein verwendeter Code:

    // Hier angewendet auf Dateien, funktioniert 
       if( true )
       {
          PACL pOldDACL = NULL, pNewDACL = NULL;
          PSECURITY_DESCRIPTOR pSD = NULL;
          LPTSTR pFileName = _T("C:\\Temp");
    
          DWORD dwRes = GetNamedSecurityInfo( pFileName,                 
                                              SE_FILE_OBJECT,            
                                              DACL_SECURITY_INFORMATION, 
                                              NULL,                      
                                              NULL,                      
                                              &pOldDACL,                 
                                              NULL,                      
                                              &pSD                       
                                              );
    
          // ERROR: GetNamedSecurityInfo() failed
          if( ERROR_SUCCESS != dwRes) 
          {
             AfxMessageBox(_T("\"SE_FILE_OBJECT\" hat NICHT Funktioniert"));
          }        
       }
    
       // Hier angewendet auf die Registry, funktioniert nicht,
       // Rueckgabewert ist 87 ==> Falsche Parameter
       if( true )
       {
          PACL pOldDACL = NULL, pNewDACL = NULL;
          PSECURITY_DESCRIPTOR pSD = NULL;
          LPTSTR pFileName = _T("HKEY_LOCAL_MACHINE\SYSTEM\\ControlSet001\\UllisTest");
    
          DWORD dwRes = GetNamedSecurityInfo( pFileName,                 
                                              SE_REGISTRY_KEY,           
                                              DACL_SECURITY_INFORMATION, 
                                              NULL,                      
                                              NULL,                      
                                              &pOldDACL,                 
                                              NULL,                      
                                              &pSD                       
                                              );
    
          // ERROR: GetNamedSecurityInfo() failed
          if( ERROR_SUCCESS != dwRes) 
          {
             // ich lande hier
             AfxMessageBox(_T("\"SE_FILE_OBJECT\" hat NICHT Funktioniert"));
          }        
       }
    

    Noch zur Umgebung: Visual Studio 6.0 und Windows Xp Sp2

    Gruss Ulli



  • Erstmal fehlt ein Backslash nach HKEY_LOCAL_MACHINE, aber das man so auf die Registry zugreifen kann ist mir neu. Ich hätte wahrscheinlich versucht den Key in ein MemFile zu schreiben.



  • connan schrieb:

    Erstmal fehlt ein Backslash nach HKEY_LOCAL_MACHINE

    Uups, hast natuerlich recht, an dem liegts aber leider nicht.
    Danke fuer die Antwort


  • Mod

    Im Zweifel ist es einfach immer wieder gut, die Dokumentation zu lesen... 🕶

    Siehe http://msdn.microsoft.com/en-us/library/aa379593(VS.85).aspx

    SE_REGISTRY_KEY
    Indicates a registry key. A registry key object can be in the local registry, such as CLASSES_ROOT\SomePath or in a remote registry, such as \\ComputerName\CLASSES_ROOT\SomePath.

    The names of registry keys must use the following literal strings to identify the predefined registry keys: "CLASSES_ROOT", "CURRENT_USER", "MACHINE", and "USERS".



  • Martin Richter schrieb:

    Im Zweifel ist es einfach immer wieder gut, die Dokumentation zu lesen... 🕶

    Oh nein! Megapeinlich 🙄 !
    Kaum macht mans richtig schon funktionierts, poste mal
    nachfolgend den funktinierenden code:

    PACL pOldDACL = NULL, pNewDACL = NULL;
          PSECURITY_DESCRIPTOR pSD = NULL;
    
          // hier der funktionierende Key
          LPTSTR pFileName = _T("MACHINE\\SYSTEM\\ControlSet001\\UllisTest");;
    
          DWORD dwRes = GetNamedSecurityInfo( pFileName,                 
                                              SE_REGISTRY_KEY,           
                                              DACL_SECURITY_INFORMATION, 
                                              NULL,                      
                                              NULL,                      
                                              &pOldDACL,                 
                                              NULL,                      
                                              &pSD                       
                                              );
    

    Danke Martin!


Anmelden zum Antworten