Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   CreateFile unter Win8 (https://www.delphipraxis.net/175456-createfile-unter-win8.html)

Mattze 22. Jun 2013 13:59

CreateFile unter Win8
 
Komisch,

jetzt weiß ich nicht, was da falsch und habe nicht mal eine Idee, wo ich suchen könnte.

Was ist falsch an
hDevice:=CreateFile(PChar('\\.\PHYSICALDRIVE'+intt ostr(i)),GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
- äh - oder richtig. (hDevice - Cardinal, i - Integer)

Starte ich es normal, kann er das nicht. (Invalid_Handle_Value)
Starte ich es mit Administratorrechten, geht es.
(Ich bin übrigens Administrator. Trotzdem will er die Rechte noch explzit.)
Starte ich es normal in der Delphi-IDE, geht es auch.

Ich kann mir da nix mehr vorstellen.

(Getestet unter Win7 und Win8, 64, pro mit D7 pro)

Was stimmt denn da nicht?

Gruß
Mattze

Zacherl 22. Jun 2013 14:19

AW: CreateFile unter Win8
 
Zugriff auf physikalische oder logische Datenträger gibts nunmal nur mit Adminrechten :P Ab Win Vista musst du dank der UAC deinen Prozess explizit als Administrator starten, sonst wird er nur mit eingeschränkten Rechten ausgeführt.

Mattze 22. Jun 2013 15:58

AW: CreateFile unter Win8
 
Hallo,

den Hinweis hatte ich mal wieder vergessen:
UAC ausgeschaltet.
Und nun?
Warum kann es die Delphi-IDE? Die wird als Administrator gestartet. Wird das vererbt?
Kann man das per Code setzen (wenn man sowieso Admin ist)?

Und warum muss ich explizit als Adminstrator starten, obwohl ich Administrator bin?

Gruß
Mattze

Zacherl 22. Jun 2013 16:15

AW: CreateFile unter Win8
 
Ohne UAC ist das Verhalten natürlich komisch. Generell werden die Security Tokens vererbt. Also wenn du aus einem Administratorprozess heraus einen weiteren Prozess startest, erbt Dieser dann auch die Administratorrechte. Könnte also schon daran liegen. Vielleicht lässt sich die UAC unter Windows 8 nicht mehr in dem Umfang abschalten, wie man es von Win7 her gewöhnt ist.

Was sagt denn GetLastError()?

Mattze 22. Jun 2013 16:26

AW: CreateFile unter Win8
 
Hallo,

ich habe gerade noch mal geguckt. Also, unter Win7 64 pro (ohne UAC) geht es ohne explizit als "Adminstrator ausführen".
Createfile ist doch eigentlich eine Grundfunktion, die ohne Probleme funktionieren müsste.
Das wird doch immer und von allen Programmiersprachen genutzt, um nur Dateien zu bearbeten!

GetLastError gucke ich noch...

Gruß
Matze

Mattze 22. Jun 2013 16:43

AW: CreateFile unter Win8
 
Hallo,

also GetLastError sagt: "Zugriff verweigert" (5).
Mit Adminrechten (als Administrator starten) ist alles OK. (GetLastError=0)
Wieso, wenn ich sowieso Admin bin?

Unter Winj7 iost aber alles auch ohne explizitem Admin OK.
(Alles bei ausgeschaltener UAC.)

Gruß
Mattze

jaenicke 22. Jun 2013 16:52

AW: CreateFile unter Win8
 
Aber ich habe es ein wenig getestet, bei Windows 8 kann man die Sicherheit an der Stelle nicht ganz so aus dem System werfen wie bei Windows 7, da wird wohl wie bei Windows Vista ein wenig Druck aufgebaut um die Unvorsichtigen zwangsweise vor Viren zu schützen. Sprich ein paar Funktionen benötigen nun Adminrechte, die vorher keine brauchten.

Wobei ich für meine privaten Tools schlicht keinen Support leiste, wenn jemand die UAC deaktiviert hat. Es steht ja auch aus gutem Grund "nicht empfohlen" dabei.

Zitat:

Zitat von Mattze (Beitrag 1219461)
Wieso, wenn ich sowieso Admin bin?

Bist du ja nicht, es gibt nun einmal zwei Token und du hast nur das eingeschränkte, wenn du das mit vollen Rechten nicht anforderst. Da bis XP leider viel zu viele als Admin gearbeitet hatten, blieb Microsoft ja nur dies zwangsweise zu ändern. Es gibt halt zu viele, die das schlicht nicht besser wissen.

Zacherl 22. Jun 2013 17:22

AW: CreateFile unter Win8
 
Deine Anwendung sollte so designed sein, dass sie notfalls auch komplett unter eingeschränkten Rechten arbeiten kann. Dann hast du auch gleich keine Probleme mehr mit mit Drag & Drop Interaktion (dein anderer Thread). Für die Funktionen, die wirklich Adminrechte benötigen, gibt es die Möglichkeit entweder einen Kindprozess mit elevated Rechten zu spawnen oder aber die kritischen Funktionen über einen COM Server ablaufen zu lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:41 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz