![]() |
Re: Large Integer? Welcher Typ in Delphi
in Delphi gibt es den Record auch ... der heißt übrigens ganz einfach LARGE_INTEGER / _LARGE_INTEGER :zwinker:
Delphi-Quellcode:
type // aus Unit Windows
PLargeInteger = ^TLargeInteger; _LARGE_INTEGER = record case Integer of 0: ( LowPart: DWORD; HighPart: Longint); 1: ( QuadPart: LONGLONG); end; TLargeInteger = Int64; LARGE_INTEGER = _LARGE_INTEGER; ULARGE_INTEGER = record case Integer of 0: ( LowPart: DWORD; HighPart: DWORD); 1: ( QuadPart: LONGLONG); end; PULargeInteger = ^TULargeInteger; TULargeInteger = ULARGE_INTEGER; |
Re: Large Integer? Welcher Typ in Delphi
@Himitsu
is jetz nich dein Ernst oder? ;) Hast du dir die demo mal angeschaut? Wenn ich einen Int64 nehme liefert mir die Funktion nur noch Schwachsinn zurück. Ich bezweifle, das es mit einer so großen Recordstruktur anders sein wird. Aber ich teste das mal. Entweder ich hab nen kapitale Bug drinn oder die MSDN ist dort falsch dokumentiert. mfG Richard |
Re: Large Integer? Welcher Typ in Delphi
ohh, da gibt's 'ne Demo :shock: (war nicht im Themen-Rückblick zu sehn -.-'')
ich schau mal rein :???: |
Re: Large Integer? Welcher Typ in Delphi
@Himitsu
wenn ich Large_Integer nehme kracht es ->Kernel32.dll exeption Wenn ich Plargeinteger nehm. funktioniert es, jedoch ist in der Strucktur kein Pointer ausgeschrieben. Ich habe festgestellt, das wenn ich für den Parameter Time von TKBasicInformation einen Int64 nehm füllt windows anscheinend sie Struktur nicht mehr richtig. Tlasttimewrite sollte eigentlich auch 2 Dword beinhalten statt 2 word. jedoch kracht es dann wieder. Entweder ich lese die Struktur falsch aus, oder es liegt am Typ des Feldes Time? Die Länge und der String werden ja richtig ausgelesen , das habe ich überprüft. Richard |
Re: Large Integer? Welcher Typ in Delphi
also dann ist es wohl ein Fehler im MSDN?
weil LARGE / LONGLONG = 64 Bit :stupid: Plargeinteger = Pointer/Integer also wieder 32 Bit ... wird die API wohl doch nur 32 Bit haben wollen :gruebel: und dieses _KEY_BASIC_INFORMATION hätte ich so Übersetzt
Delphi-Quellcode:
stimmt sozusagen mit deinem überein.
TKeyBasicInformation = packed record
Time: TFileTime; TitleIndex: LongWord; NameLength: LongWord; Name: Array[0..0] of WideChar; end; mit KEY_INFORMATION_CLASS mußt du erstmal aufpassen ... entweder du sorgst dafür daß dieses Set 4 Byte groß ist (standardmäßig macht Delphi dieses nur 1 Byte klein) oder du definierst es so:
Delphi-Quellcode:
ich mach's gern auch so ... da sieht man den Zusammenhang
type
KEY_INFORMATION_CLASS = ULONG; const KeyBasicInformation = 0; KeyCachedInformation = 1; KeyNameInformation = 2; KeyNodeInformation = 3; KeyFullInformation = 4; KeyVirtualizationInformation = 5;
Delphi-Quellcode:
PS: const KeyBasicInformation: KEY_INFORMATION_CLASS = 0; geht nicht, weil Delphi macht dann eine "konstante" Variable draus -.-''
type KEY_INFORMATION_CLASS = ULONG;
const KeyBasicInformation = KEY_INFORMATION_CLASS(0); ... KeyVirtualizationInformation = KEY_INFORMATION_CLASS(5); [add] hast du nochmal die Parameter deiner APIs geprüft? VAR, CONST und sowas kennt die WinAPI (C) ja sozusagen nicht NtQueryKey: var ResultLength: PULONG würde ich da eher als var ResultLength: ULONG vermuten (kenn jetzt aber die API-Definitionen nicht, aber es wird doch wohl PULONG ResultLength; sein). |
Re: Large Integer? Welcher Typ in Delphi
@Himitsu
hast du es mal mit deinem Record getestet? KeyInformationClass ist doch als Aufzählung definiert, oder was meinst du? Richard |
Re: Large Integer? Welcher Typ in Delphi
@Himitsu
Habe es jetz mit deinen Änderungen getestet. Es kracht... Die Konstanten der Klasse Key_Information_Class habe ich als Const definiert wie von dir vorgeschlagen. Leider hat das überhaupt keinen Einfluss. Sobald ich Time als Tfiletime definiere. -> Exeption Gruß Richard |
Re: Large Integer? Welcher Typ in Delphi
Zitat:
Heißt Delphi würde bei deinem Code nur das niederwertige Byte setzen und Windows den ganzen integer auswerten, wenn du es einfach nur als SET definierst. Und wenn dein SET strimmt, dann stimmen auch die Werte der Konstanten ... es wird einfach nur durchgezählt. so, ich lad mir gleich nochmal deine Demo runter ... entweder hab ich grad was zertestet, oder die Variable Test wird nirgend's zugewiesen, weßhalb da nur schrott drinsteht :gruebel: [add]nee stimmt, TEST wird nirgends was zugewiesen, also Inhalt ist undefiniert[/add] kannst du mal die ganzen Definitionen posten? also das woraus du die Funktionsdefinitionen erstellt hast. |
Re: Large Integer? Welcher Typ in Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
ein bisl PLONG>varLONG geändert
und wenn du von NtQueryKey in KeyInformation 1024 Byte speichern lassen willst, dann weise KeyInformation erstmal Speicher zu :!: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 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-2025 by Thomas Breitkreuz