Avatar billede mr_falle Nybegynder
07. december 2009 - 11:28 Der er 7 kommentarer

Ændre file owner

Hej

Er det muligt at ændre fil ejer via c# kode?

Jeg skal slette en fil der er ejet a trustedinstaller, ejeren skal derfor skiftes til everyone.
Avatar billede kalp Novice
07. december 2009 - 12:03 #1
Se eksempler her:
http://stackoverflow.com/questions/153087/getting-setting-file-owner-in-c

Det kan du lige prøve og se om du har heldet med dig.

Hvis ikke er det fordi man ikke bare kan ændre "Owner" af en fil.
Den nuværende "Owner" skal give en anden konto rettigheder til og blive "Owner".
Den anden konto skal så herefter tage ejerskab. (hvis du forstod det:D )

Teknisk set kan du stadig gøre det du vil.
Du skal dog i sidste ende kende til brugernavn og password på den nuværende "Owner" og via. impersonation klare opgaven.
Dvs. lidt ekstra kode skal tilføres eksemplet jeg har henvist til.
Avatar billede mr_falle Nybegynder
07. december 2009 - 12:26 #2
Synes ikke jeg kan få  det til at virke med det eksempel.

Ejeren af filen er som standard trustedinstaller.
Avatar billede windcape Praktikant
07. december 2009 - 12:54 #3
Og det er TrustedInstaller som kører koden der vil ændre rettighederne?
Avatar billede kalp Novice
07. december 2009 - 13:13 #4
mr_falle:> så er det nok fordi du skal impersonate "TrustedInstaller" konto'en som jeg nævnte i mit oprindelige indlæg.

Dette siger jeg fordi jeg antager du kører koden fra en anden konto.
Avatar billede mr_falle Nybegynder
07. december 2009 - 13:36 #5
Hvordan kan man impersonate "TrustedInstaller" konto'en?
Avatar billede kalp Novice
07. december 2009 - 15:12 #6
google et eksempel:)
men jeg kan da godt give dig en rå udgave hvis du så selv kan bikse det sammen med din kode;)

tilføj disse namespace's i using:
System.ServiceProcess
System.Security.Principal
System.Runtime.InteropServices

tilføj denne kode i den klasse hvor du har din kode i.

[DllImport("advapi32.dll", SetLastError = true)]
    static extern bool LogonUser(
      string principal,
      string authority,
      string password,
      LogonSessionType logonType,
      LogonProvider logonProvider,
      out IntPtr token);
    [DllImport("kernel32.dll", SetLastError = true)]
    static extern bool CloseHandle(IntPtr handle);
    enum LogonSessionType : uint
    {
        Interactive = 2,
        Network,
        Batch,
        Service,
        NetworkCleartext = 8,
        NewCredentials
    }
    enum LogonProvider : uint
    {
        Default = 0, // default for platform (use this!)
        WinNT35,    // sends smoke signals to authority
        WinNT40,    // uses NTLM
        WinNT50      // negotiates Kerb or NTLM
    }


og tilføj denne kode lige før din egen kode (den kode jeg har henvist til i mit link):

IntPtr token = IntPtr.Zero;
WindowsImpersonationContext impersonatedUser = null;

LogonUser("TrustedInstaller", "",
                                    "",
                                    LogonSessionType.Network,
                                    LogonProvider.Default,
                                    out token);

WindowsIdentity id = new WindowsIdentity(token);
impersonatedUser = id.Impersonate();

tilføj så din kode her..

og til sidst denne kode efter din egen.

if (impersonatedUser != null)
impersonatedUser.Undo();
     
if (token != IntPtr.Zero)
CloseHandle(token);


så hvis du er god til copy and paste burde du have hvad du skal bruge.

Hvis den der konto har et password skal du dog tilføje det i parameter nr. 3 i LogonUser konstruktøren.
Avatar billede mr_falle Nybegynder
07. december 2009 - 15:34 #7
Fejler med at token ikke må være 0.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester