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/)
-   -   Delphi [Delphi 2010] RegQueryValueEx-Problem (https://www.delphipraxis.net/152877-%5Bdelphi-2010%5D-regqueryvalueex-problem.html)

RWarnecke 10. Jul 2010 22:46

[Delphi 2010] RegQueryValueEx-Problem
 
Hallo zusammen,

so langsam hasse ich diesen Kram mit Unicode. Ich stehe vor folgendem Problem :
Delphi-Quellcode:
var
  FAccess : Cardinal;
  Key    : HKEY;
  dwType : DWORD;
  dwLen  : DWORD;

{...}

  if RegOpenKeyEx(HKEY_LOCAL_MACHINE, PChar('SOFTWARE\Microsoft\Windows NT\CurrentVersion'), 0, FAccess, Key) = 0 then
  begin
    try
      dwType := REG_NONE;              // Typ muss ermittelt werden
      dwLen := 0;                     // Puffergröße auf Null
      if RegQueryValueEx(key, 'DigitalProductId', nil, @dwType, nil, @dwLen) = ERROR_SUCCESS then
        if (dwType = REG_BINARY) and (dwLen > 0) then
        begin
          SetLength(HexBuf,dwLen);
          RegQueryValueEx(key, 'DigitalProductId', nil, @dwType, @HexBuf[0], @dwLen);
        end;
      Result.ProduktKey := DecodeProductKey(HexBuf);
    finally
      RegCloseKey(key);
    end;
  end;
Dieser Sourcecode hat unter Delphi 2006 noch wunderbar funktioniert. Nur leider schmeißt mir RegQueryValueEx in der ersten IF-Abfrage unter Delphi 2010 den Fehlercode 2 (File not found) zurück. Warum passiert das ? Ich kann mir da leider keinen Reim drauf machen ausser das es mal wieder mit Unicode zu tun hat. Vermute ich das richtig ? Wenn ja, was muss ich ändern, damit es funktioniert ?

jaenicke 11. Jul 2010 07:00

AW: [Delphi 2010] RegQueryValueEx-Problem
 
Das kann ich nicht reproduzieren, bei mir funktioniert der Code (mit KEY_READ als Zugriff) problemlos (Delphi 2010, Win 32-Bit).

// EDIT:
Vielleicht funkt da die Umleitung der Registryzweige dazwischen, wenn du ein 64-Bit Betriebssystem hast.

RWarnecke 11. Jul 2010 07:58

AW: [Delphi 2010] RegQueryValueEx-Problem
 
Guten Morgen Sebastian,

danke erstmal für Deine Antwort. Ja, ich habe es gestern Abend unter einem 64Bit Betriebssystem ausprobiert. Jetzt habe ich es nochmal unter Windows XP 32 Bit ausprobiert und es funktioniert. Dann liegt es wohl doch an der 64Bit-Erkennung.

Mschmidt 11. Jul 2010 11:03

AW: [Delphi 2010] RegQueryValueEx-Problem
 
Ich vermute eher kein Unicode Problem, sondern ein Rechte-problem. HKLM darf halt nicht jeder:-(
mschmidt

RWarnecke 11. Jul 2010 11:09

AW: [Delphi 2010] RegQueryValueEx-Problem
 
Nee, es ist kein Rechte-Problem. Ich habe es rausgefunden. Es war doch ein Unicode-Problem. Ich hatte ein Record falsch deklariert. Statt Ansi hatte ich Unicode genommen. Nachdem ich es geändert hatte, funktionierte es wieder so wie vorher. Dadurch, das ich das Record als Unicode erstellt hatte, wurde die Variable FAccess nicht richtig gesetzt. Dadurch kam es zu dem Problem unter einem 64Bit Betriebssystem.

Danke nochmal an alle beteiligten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:36 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