2016-05-16 18 views
0

Ich muss große Dateien herunterladen. Um die Übertragung zu beschleunigen, verwende ich mehrere Verbindungen pro Datei. Um die Festplattenfragmentierung zu reduzieren, gebe ich Windows nach der Erstellung die endgültige Größe der Datei an. Um Null Initialisierung zu vermeiden, wenn ich das erste Byte der letzten Verbindung schreibe, initialisiere ich die Datei als Müll mit SetFileValidData. Das Problem besteht darin, dass SetFileValidData die Berechtigung SE_MANAGE_VOLUME_NAME erfordert, die normalerweise nur Administratoren haben. Wie kann ich SE_MANAGE_VOLUME_NAME für nicht belebte Benutzer (Administratorbenutzer mit aktivierter Benutzerkontensteuerung) aktivieren?Wie gewähre ich unerlaubten Benutzern Windows-Rechte?

+0

Wie würden Sie es für einen Griff Standardbenutzer? Was hast du unter Windows XP gemacht? –

+0

@IanBoyd Ich unterstütze keine Standardbenutzer. WinXP funktioniert als Win7 mit deaktivierter Benutzerkontensteuerung. –

+0

Ich fürchte, du hast kein Glück. Die Vergabe von 'SE_MANAGE_VOLUME_NAME' an Benutzer ist eine Sicherheitslücke, da sie den Inhalt zuvor gelöschter Dateien lesen können. Wenn der Benutzer diese Berechtigung nicht hat, gibt es keine Möglichkeit, sie einfach zu bekommen. Die einzige Möglichkeit für einen Benutzer besteht darin, sich als Benutzer, der ein Administrator ist, anzumelden. –

Antwort

1

Sie können nicht; Es gibt keine Möglichkeit, einem Prozess, der mit einem eingeschränkten Token ausgeführt wird, erhöhte Rechte zu geben.

Verwenden Sie möglicherweise einen Systemdienst, um die erhöhte Aufgabe auszuführen. Es gibt mindestens drei mögliche Ansätze:

  • Machen Sie die ganze Arbeit, einschließlich des Downloads, aus dem Dienst.

  • Laden Sie von der Anwendung herunter und verwenden Sie den gemeinsam genutzten Speicher, um dem Dienst die Daten zum Schreiben in die Datei bereitzustellen.

  • Lassen Sie den Dienst die Datei erstellen und erweitern, und versehen Sie die Anwendung mit einem schreibgeschützten Handle. (Es hat Zuschreibung nur sein, um sicherzustellen, dass die Anwendung nicht in das Lesen der potentiell sensible Daten dazu verleitet werden, die in der Datei belassen wurde, wenn Sie Null-Initialisierung umgangen.)

Beachten Sie, dass in all diesen Fällen Sie müssen auch vorsichtig sein, welche Berechtigungen Sie für die Datei festlegen.


Alternativ können Sie die Download-Streams je nach Protokoll anders organisieren. Anstatt dass jeder Datenstrom einen großen sequenziellen Teil der Daten abruft, so dass der letzte Datenstrom an das Ende der Datei geschrieben wird, muss jeder Datenstrom eine Reihe kleinerer zwischengespeister Datenblöcke abrufen, die Sie sequentiell in die Datei schreiben können.

(Dies könnte nicht möglich sein, wenn das Protokoll nur jede Verbindung ermöglicht einen sequentiellen Datenblock, wegen des zusätzlichen Aufwand für eine neue Verbindung für jeden Block zu holen.)

+0

Warum unterscheidet sich SE_MANAGE_VOLUME_NAME von c: \ irgendwas? Ich kann Standardbenutzern Rechte für Dateien geben. –

+0

Äpfel und Orangen. Privilegien sind nicht auf die gleiche Weise wie Zugriffsrechte implementiert, sie sind völlig unterschiedliche Dinge. –

+0

Sie können zwar Standardbenutzern beliebige Berechtigungen zuweisen (über die lokale Sicherheitsrichtlinie), aber dies betrifft nicht die Administratoren, die den Prozess immer noch mit erhöhten Rechten ausführen müssen. In Ihrem Szenario müssten Sie UAC deaktivieren. Wohlgemerkt, wenn Sie den Standardbenutzern Administrator-äquivalente Privilegien geben, haben Sie sowieso keine Ahnung von Sicherheit, also schätze ich, dass Sie UAC auch ausschalten können. :-) –