Zugriff auf entfernte Registry



  • Hallo Freunde,

    ich möchte mit einem Programm Werte aus einer entfernten Registry über das Netz auslesen. Das Verbinden zu dem anderem Rechner mit RegConnectRegistry klappt schon (Danke an flenders 😉 ). Jedoch bekomme ich beim Öffnen des Schlüssels einen "Access denied". Aus der Suchfunktion und dem MSDN weiß ich, dass man zuerst Privilegien setzen muss:

    When you call the RegOpenKeyEx function, the system checks the requested access rights against the key's security descriptor. If the user does not have the correct access to the registry key, the open operation fails. If an administrator needs access to the key, the solution is to enable the SE_TAKE_OWNERSHIP_NAME privilege and open the registry key with WRITE_OWNER access.

    Daraufhin wollte ich mit der Funktion das Privilegium setzen, indem ich in die Funktion das Handle reinstecke, das ich von RegConnectRegistry bekommen habe. Nur bekomme ich dann bei "AdjustTokenPrivileges" den Fehler "invalid Handle".

    BOOL SetPrivilege(
        HANDLE hToken,          // Handle aus RegConnectRegistry
        LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
        BOOL bEnablePrivilege   // to enable or disable privilege
        ) 
    {
    TOKEN_PRIVILEGES tp;
    LUID luid;
    
    if ( !LookupPrivilegeValue( 
            NULL,            // lookup privilege on local system
            lpszPrivilege,   // privilege to lookup 
            &luid ) )        // receives LUID of privilege
    {//das klappt noch
        printf("LookupPrivilegeValue error: %u\n", GetLastError() ); 
        return FALSE; 
    }
    
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Luid = luid;
    if (bEnablePrivilege)
        tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    else
        tp.Privileges[0].Attributes = 0;
    
    // Enable the privilege or disable all privileges.
    
    if ( !AdjustTokenPrivileges(
           hToken, 
           FALSE, 
           &tp, 
           sizeof(TOKEN_PRIVILEGES), 
           (PTOKEN_PRIVILEGES) NULL, 
           (PDWORD) NULL) )
    { 
          printf("AdjustTokenPrivileges error: %u\n", GetLastError() ); //hier kommt Fehler Nr. 6
          return FALSE; 
    } 
    
    return TRUE;
    }
    

    Hat jemand einen Tip, warum das falsch läuft, oder bin ích vielleicht ganz auf dem falschen Weg? 😕

    Danke
    Inq.



  • Was hat das Handle aus RegConnectRegistry mit dem Token zu tun?





  • Ah, danke! Das werd ich mal versuchen...

    Inq.


Anmelden zum Antworten