Was genau bewirkt EPrivilege angehoben werden?
Ich bin immer ein bug-report, dass einige Funktionen in einigen Musik-Wiedergabe-code in eine externe DLL (SDL_Mixer, falls es hilft), dass mein Programm verwendet wird, ist die Anhebung EPrivilege. Die DLL ist in C geschrieben, so kann ich nicht sinnvoll stack trace-Informationen aus der er mit MadExcept, und das problem ist nicht reproduzierbar auf mein Ende. Und nur um alles noch schlimmer machen, ich weiß gar nicht, was EPrivilege ist.
Habe ich noch nie gesehen es wieder in meinem eigenen code, es gibt sehr wenig Informationen über Sie online verfügbar, und was es gibt, ist widersprüchlich. (Eine Erklärung sagt, es ist die durch das OS, wenn Sie versuchen, etwas zu tun, mit einem eingeschränkten Konto, erfordert Berechtigungen, die nicht verfügbar sind, ein anderer sagt, dass es ausgelöst durch die CPU, wenn Sie versuchen, eine Anweisung auszuführen, die über Ihre Berechtigungsebene.)
Hat jemand eine maßgebliche Erklärung für das, was bewirkt, dass EPrivilege? Und hat jemand eine Idee wie es sein könnte, ausgelöst durch die Musik-spielen-code auf einem Windows 7 64-bit-Computer unter einem nicht-admin-Konto aber nicht ausgelöst werden, wenn läuft der gleiche code auf meine Windows 7 64-bit-Computer unter einem nicht-admin-Konto?
- Die RTL-Quelle nicht wirklich geben keine Hinweise...
- EPrivilege = class(EExternal), ist der Hinweis
- Haben Sie überprüft, um zu sehen, ob DEP wurde auf beiden Rechnern identisch? Ich hatte dieses Problem einmal, wo eine Delphi 2007-app generieren einer Ausnahme, auf einer Maschine, andere aber nicht (Vista); die Maschine mit der Fehlermeldung hatte Datenausführungsverhinderung eingeschaltet, während die anderen nicht, und was war, stolpern Sie.
- Ich bezweifle es, aus zwei Gründen. Zuerst, ich weiß, ich habe die Datenausführungsverhinderung eingeschaltet ist, und zweitens, wenn ich mich Recht erinnere DEP nicht, lösen Sie eine Ausnahme aus; beendet das Programm sofort. (Ich denke.)
- Ich bin mir ziemlich sicher, bekam ich eine Ausnahme (obwohl ich würde nicht schwören, es war EPrivilege). Nur ein Gedanke, eh -, das ist, warum es war ein Kommentar und keine Antwort. 🙂
- und @Mason: was ist DEP? (Ich habe manchmal wirklich nicht unser Akronym-rich environment)
- Data Execution Prevention
Du musst angemeldet sein, um einen Kommentar abzugeben.
EPrivilege
wird ausgelöst, wenn der hardware-Objekte, die Sie versuchen zu laufen, einen privilegierten Befehl im user-Modus. Diese privilegierte Befehle sind nur für supervisor-Modus, einen.k.ein. ring 0.Die hardware, die den Fehler auslöst, und dann die RTL fängt ihn auf und ordnet Sie einer RTL-Ausnahme, wie alle die
EExternal
Ausnahmen, z.B.EAccessViolation
,EStackOverflow
etc.Admin-Rechte sind hier nicht relevant. Das ist etwas, das erzwungen durch die OS-software. Anleitung Privileg gesteuert wird auf der hardware-Ebene.
Sehen Sie eine solche Fehlermeldung, wenn Sie versuchen, führen Sie Müll (d.h. beschädigte Funktionszeiger), die gerade passiert, zu buchstabieren, einen privilegierten Befehl. Speicher Korruption ist die einzige vernünftige Erklärung. Nur Compiler, target kernel-Modus-code emittieren, privilegierte Anweisungen.
GetMem
? Aufruf von SetLength auf ein array oder ein Konstruktor für ein Objekt nicht null heraus, die Erinnerung, und diese sind das, was ich gewohnt bin, wenn es um die Zuteilung.GetMem
. Wenn ich es will konzentrierte ich einfach anrufenAllocMem
.Wir haben eine Menge von real-time-hardware Steuern mit Delphi. Dies beinhaltet das Lesen und schreiben von I/O-ports. Wenn Sie nicht über die Berechtigung (oder ein kernel-Treiber), um dies tun, erhalten Sie
EPrivilege
.Beispielsweise dieses bit des Codes:
unter W98 benötigt nichts, um es zu schreiben, die ein byte an eine I/O-Adresse, z.B. an den PC parallel port. Unter NT und es wird erzeugen
EPrivilege
es sei denn, die Adresse wurde geöffnet, die in irgendeiner Weise z.B. mit gwiopm. SoEPrivilege
können ein Indikator für ein "Müll read/write" (wie David schon sagt) oder eines unvollständigen setup, das Lesen /schreiben falsch setup-hardware.