Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi File handle readonly? (https://www.delphipraxis.net/114969-file-handle-readonly.html)

Neutral General 3. Jun 2008 18:31


File handle readonly?
 
Hi,

Ich suche eine Möglichkeit herauszufinden ob ein Filehandle nur readonly ist.. Also nur GENERIC_READ.

Habe in der Windows Unit die Funktion MSDN-Library durchsuchenGetFileInformationByHandle gefunden, aber da wird glaube ich nichts zurückgegeben was ich gebrauchen kann.

Würde mich über Hilfe freuen ;)

Gruß
Neutral General

Apollonius 3. Jun 2008 18:40

Re: File handle readonly?
 
Es gibt wahrscheinlich auch einen dokumentierten Weg, aber zur Not kannst du es mit MSDN-Library durchsuchenNtQueryObject probieren.

Neutral General 3. Jun 2008 19:22

Re: File handle readonly?
 
Hi Apollonius,

Diese Funktion scheint die richtige zu sein, aber ich musste sie mir selbst importieren und entweder hat das nicht so ganz funktioniert oder ich rufe die Funktion falsch auf.

(ist jetzt alles nur mal dahingeklatscht:)

Delphi-Quellcode:
interface

type
  OBJECT_INFORMATION_CLASS = (ObjectBasicInformation,
                              ObjectNameInformation,
                              ObjectTypeInformation,
                              ObjectAllInformation,
                              ObjectDataInformation);

   PObjectBasicInformation = ^TObjectBasicInformation;
   TObjectBasicInformation = packed record
     Attributes: Cardinal;
     GrantedAccess: ACCESS_MASK;
     HandleCount: Cardinal;
     PointerCount: Cardinal;
     Reserved: Array[0..9] of Cardinal;
   end;

   function NtQueryObject(Handle: THandle;
                          ObjectInformationClass: OBJECT_INFORMATION_CLASS;
                          out ObjectInformation: Pointer;
                          ObjectInformationLength: ULONG;
                          out ReturnLength: PULONG): Cardinal; external 'ntdll.dll';
Aufruf:

Delphi-Quellcode:
var inf: Pointer;
    size: ULONG;
      l : PULONG;
begin
  size := SizeOf(TObjectBasicInformation);
  NtQueryObject(FileHandle,ObjectBasicInformation,inf,size,l);
end;
Habe auch schon gegoogelt und in der DP gesucht, aber nichts gefunden was mir geholfen hätte. Hab herausgefunden das die Aufrufkonvention "NTAPI" ist?!

Zitat:

NTSTATUS NTAPI NtQueryObject (
IN HANDLE ObjectHandle,
IN OBJECT_INFORMATION_CLASS ObjectInformationClass,
OUT PVOID ObjectInformation,
IN ULONG ObjectInformationLength,
OUT PULONG ReturnLength OPTIONAL
);
Ich weiß grad einfach nicht weiter... Bin überfordert :?

Apollonius 3. Jun 2008 19:27

Re: File handle readonly?
 
NTAPI = WINAPI = CALLBACK = StdCall
Lass die Outs weg oder verwende keine Zeiger. Die Outs in C sind nur ein Hinweis, verändern aber eigentlich nichts, ganz im Gegensatz zu Delphi, wo ein Zeiger auf eine Variable vom angegebenen Datentyp übergeben wird.
Außerdem rufst du die Funktion wie fast alle anderen WinAPI-Funktionen auf, die Daten variabler Größe speichern: DU musst den Puffer allozieren, nicht die Funktion selbst.

Neutral General 3. Jun 2008 19:32

Re: File handle readonly?
 
Hi,

Zitat:

Zitat von Apollonius
NTAPI = WINAPI = CALLBACK = StdCall
Lass die Outs weg oder verwende keine Zeiger. Die Outs in C sind nur ein Hinweis, verändern aber eigentlich nichts, ganz im Gegensatz zu Delphi, wo ein Zeiger auf eine Variable vom angegebenen Datentyp übergeben wird.
Außerdem rufst du die Funktion wie fast alle anderen WinAPI-Funktionen auf, die Daten variabler Größe speichern: DU musst den Puffer allozieren, nicht die Funktion selbst.

Das mit stdcall dachte ich mir fast und ich bins auch gewohnt den speicher für APIs zu allozieren, hatte aber eben nicht funktioniert weil die Definition falsch war und da hab ichs mal so probiert..

Auf die Sache mit den outs wär ich jedoch nicht gekommen ;) Danke, es funktioniert jetzt :)

Gruß
Neutral General


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

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