Guten Tag,
ich habe folgenden Code im Internet gefunden: Quelle
int token=0;
int retval=0;
TOKEN_PRIVILEGES TP = new TOKEN_PRIVILEGES();
TOKEN_PRIVILEGES TP2 = new TOKEN_PRIVILEGES();
LUID RestoreLuid = new LUID();
LUID BackupLuid = new LUID();
retval = OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | _
TOKEN_QUERY, ref token);
retval = LookupPrivilegeValue(null, SE_RESTORE_NAME, ref RestoreLuid);
retval = LookupPrivilegeValue(null, SE_BACKUP_NAME, ref BackupLuid);
TP.PrivilegeCount = 1;
TP.Attributes = SE_PRIVILEGE_ENABLED;
TP.Luid = RestoreLuid;
TP2.PrivilegeCount = 1;
TP2.Attributes = SE_PRIVILEGE_ENABLED;
TP2.Luid = BackupLuid;
retval = AdjustTokenPrivileges(token, 0, ref TP, 1024, 0, 0);
retval = AdjustTokenPrivileges(token, 0, ref TP2, 1024, 0, 0);
// Loading a Hive
RegLoadKey(HKEY_USERS,"KeyName","Irgendwo\SYSTEM");
// Unloading a Hive
RegUnLoadKey(HKEY_USERS,"Irgendwo\SYSTEM"); Wenn ich diesen Code nun auf meinem Rechner ausführe wird das SYSTEM Hive geladen. Es funzt
Wenn ich es aber auf einem anderen Computer ausführe erhalte ich die folgende Fehlermeldung:
1314 error (A required privilege is not held by the client)
Auf beiden Computern sind Admin-Rechte vorhanden wobei ich schon folgenden Satz gefunden habe:
(Being an admin account doesn't necessarily mean that you have those
privileges)
Aber eine Erklärung was nun noch nötig ist, scheint es nirgens zu geben :-D
Desweiteren habe ich die folgende Möglichkeit gefunden:
To load a hive without requiring these special privileges, use the RegLoadAppKey function.
RegLoadAppKey Funktion
Allerdings ist die API nur für C++ beschrieben und auch sonst finde ich keine weiteren informationen zu dieser API.
Lange Rede kurzer Sinn:
Kennt jemand den Grund, warum die Privilegien nicht erstellt/geladen werden können, oder weiß jemand wie man die API RegLoadAppKey aus c# heraus benutzt?
Mit freundlichen Gr??en,
Andy G.
Beitrag wurde zuletzt am 28.01.09 um 14:37:21 editiert. |