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 12 - LogonUser - WNetAddConnection2 (https://www.delphipraxis.net/215265-delphi-12-logonuser-wnetaddconnection2.html)

lxo 4. Jun 2024 15:43

Delphi 12 - LogonUser - WNetAddConnection2
 
Hallo zusammen,

wir verwenden folgenden Code um mit einem Dienst auf entfernte Ziele zuzugreifen.
Mit Delphi 11.3 hat das immer funktioniert.
Seit Delphi 12.1 bekomme ich den Errorcode 1204 bei WNetAddConnection2.

In den Änderungen von Delphi 12.1 im Vergleich zu 11.3 sehe ich aber nicht das da irgendwas passiert ist.
Hat jemand eine Idee?

Delphi-Quellcode:
var
  lError: integer;
  NRW  : TNetResource;
  hToken: NativeUInt;
  lUser,
  lPass: string;
begin
  LogonUser('NETWORK SERVICE', '"NT AUTHORITY', Nil, 9{LOGON32_LOGON_NEW_CREDENTIALS}, LOGON32_PROVIDER_WINNT50, &hToken );
  ImpersonateLoggedOnUser(hToken);

  NRW.dwScope      := RESOURCE_GLOBALNET;
  NRW.dwType       := RESOURCETYPE_DISK;
  NRW.dwUsage      := RESOURCEUSAGE_CONNECTABLE;
  NRW.dwDisplayType := RESOURCEDISPLAYTYPE_SHARE;
  NRW.lpLocalName  := nil;
  NRW.lpComment    := '';
  NRW.lpRemoteName := PChar('\\<REMOTENAME>');

  lUser := '<USER>';
  lPass := '<PASSWORD>';

   lError := WNetAddConnection2(NRW, PChar(lPass), PChar(lUser), 0);
  ...
end;

shebang 5. Jun 2024 08:24

AW: Delphi 12 - LogonUser - WNetAddConnection2
 
Zitat:

'"NT AUTHORITY'
Die extra Quotes sind aber nicht das Problem?

Zitat:

ERROR_BAD_PROVIDER

1204 (0x4B4)

Der angegebene Netzwerkanbietername ist ungültig.


lxo 5. Jun 2024 09:07

AW: Delphi 12 - LogonUser - WNetAddConnection2
 
Nein das macht leider keinen Unterschied.

Es funktioniert auch komischerweise zum Teil mit Delphi 12.1, das heißt auf bestimmte Ziele.
Mit Delphi 11.3, gleicher Stand funktioniert es auf allen Zielen.

Was ich mir vorstellen könnte das die Windows-Server Version der Ziele da noch einen Unterschied macht.

Trotzdem stellt sich für mich die Frage wieso geht es mit Delphi 11.3 ohne Probleme und mit Delphi 12.1 zum Teil nicht.
Ich sehe da keinen Unterschied in den Änderungen von Delphi 12.1, sind ja auch eigentlich nur WinAPI Aufrufe.

lxo 5. Jun 2024 10:47

AW: Delphi 12 - LogonUser - WNetAddConnection2
 
Ich hab die Lösung ...
Wenn ich beim zuweisen des Users und Passworts den Wert nochmal als PChar caste funktioniert es auch mit Delphi 12.1 ohne Probleme.
Könnte jetzt auch die Variablen lUser und lPass auf PChar ändern, müsste beim zuweisen dann aber aufjedenfall ja als PChar casten.

Kann mir einer erklären warum das mit Delphi 11.3 nun immer funktioniert hat und es sich bei Delphi 12.1 anders verhält?

Delphi-Quellcode:
var
  lError: integer;
  NRW  : TNetResource;
  hToken: NativeUInt;
  lUser,
  lPass: string;
begin
  LogonUser('NETWORK SERVICE', '"NT AUTHORITY', Nil, 9{LOGON32_LOGON_NEW_CREDENTIALS}, LOGON32_PROVIDER_WINNT50, &hToken );
  ImpersonateLoggedOnUser(hToken);

  NRW.dwScope      := RESOURCE_GLOBALNET;
  NRW.dwType       := RESOURCETYPE_DISK;
  NRW.dwUsage      := RESOURCEUSAGE_CONNECTABLE;
  NRW.dwDisplayType := RESOURCEDISPLAYTYPE_SHARE;
  NRW.lpLocalName  := nil;
  NRW.lpComment    := '';
  NRW.lpRemoteName := PChar('\\<REMOTENAME>');

  //lUser := '<USER>';
  //lPass := '<PASSWORD>';
  lUser := PChar('<USER>');
  lPass := PChar('<PASSWORD>');

   lError := WNetAddConnection2(NRW, PChar(lPass), PChar(lUser), 0);
  ...
end;

himitsu 5. Jun 2024 12:11

AW: Delphi 12 - LogonUser - WNetAddConnection2
 
Der einzige Ein Unterschied ist dann, dass dann die Strings keine Konstante (RefCount = -1), sondern eine Variable (RefCount > 0) sind,
aber von den Daten her, bleibt nach dem PChar, beim Aufruf nichts mehr übrig.

Ein anderer Unterschied ist, dass der Speicher als Konstante nicht beschreibbar ist.
Aber es sind [in]-Parameter und in der Hilfe steht nicht, dass reingeschrieben wird / werden kann.


Zitat:

Wenn lpPassword NULL ist, verwendet die Funktion das aktuelle Standardkennwort ...
Achtung: PChar gibt bei einem Leer-String einen "leeren" String zurück, also einen Zeiger auf zwei #0#0,
aber nicht NIL.

Mit Pointer(lPass) bekommt man sowas hin, aber dabei geht leider die Compiler-Prüfung und -Warungen bezüglich ANSI/Unicode verloren.
Oder eine PChar Variable und vorher ein
Delphi-Quellcode:
if lPass = '' then pPass := Nil else pPass := PChar(lPass);
.

lxo 5. Jun 2024 12:53

AW: Delphi 12 - LogonUser - WNetAddConnection2
 
Zitat:

Zitat von himitsu (Beitrag 1537485)
Der einzige Ein Unterschied ist dann, dass dann die Strings keine Konstante (RefCount = -1), sondern eine Variable (RefCount > 0) sind,
aber von den Daten her, bleibt nach dem PChar, beim Aufruf nichts mehr übrig.

Ein anderer Unterschied ist, dass der Speicher als Konstante nicht beschreibbar ist.
Aber es sind [in]-Parameter und in der Hilfe steht nicht, dass reingeschrieben wird / werden kann.


Zitat:

Wenn lpPassword NULL ist, verwendet die Funktion das aktuelle Standardkennwort ...
Achtung: PChar gibt bei einem Leer-String einen "leeren" String zurück, also einen Zeiger auf zwei #0#0,
aber nicht NIL.

Mit Pointer(lPass) bekommt man sowas hin, aber dabei geht leider die Compiler-Prüfung und -Warungen bezüglich ANSI/Unicode verloren.
Oder eine PChar Variable und vorher ein
Delphi-Quellcode:
if lPass = '' then pPass := Nil else pPass := PChar(lPass);
.

Die Unterschiede sind aber doch generell also sollte zwischen Delphi 11.3 und Delphi 12.1 gleich sein.
Was hat sich nun in Delphi 12.1 geändert das es sich in dem Fall anders verhält?

himitsu 5. Jun 2024 13:20

AW: Delphi 12 - LogonUser - WNetAddConnection2
 
Ein anderes Manifest und ich weiß nicht, wann die zuletzt die Versionen im PE-Header geändert haben (D11 oder D12)

Und dann so Dinge, wie Bereichs- und Überlaufprüfungen aktiv (in neu erstellten Projekten) ... und vielleicht noch andere Projektoptionen.


Es wurde auch zuletzt in der PE bissl was geändert ... weiß aber nicht wann (irgendwo zwischen XE und D11),
wo einige Konstanten früher beschreibbar waren, jetzt aber nicht mehr (eventuell Sectionen nun anders verteilt, oder die Schreibrechte der Sectionen überarbeitet)


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