AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi 12 - LogonUser - WNetAddConnection2
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi 12 - LogonUser - WNetAddConnection2

Ein Thema von lxo · begonnen am 4. Jun 2024 · letzter Beitrag vom 5. Jun 2024
Antwort Antwort
lxo

Registriert seit: 30. Nov 2017
281 Beiträge
 
Delphi 12 Athens
 
#1

Delphi 12 - LogonUser - WNetAddConnection2

  Alt 4. Jun 2024, 16:43
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;
  Mit Zitat antworten Zitat
shebang

Registriert seit: 7. Feb 2020
124 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Delphi 12 - LogonUser - WNetAddConnection2

  Alt 5. Jun 2024, 09:24
Zitat:
'"NT AUTHORITY'
Die extra Quotes sind aber nicht das Problem?

Zitat:
ERROR_BAD_PROVIDER

1204 (0x4B4)

Der angegebene Netzwerkanbietername ist ungültig.
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
281 Beiträge
 
Delphi 12 Athens
 
#3

AW: Delphi 12 - LogonUser - WNetAddConnection2

  Alt 5. Jun 2024, 10:07
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.
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
281 Beiträge
 
Delphi 12 Athens
 
#4

AW: Delphi 12 - LogonUser - WNetAddConnection2

  Alt 5. Jun 2024, 11:47
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;

Geändert von lxo ( 5. Jun 2024 um 12:04 Uhr) Grund: Zitat unnötig
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi 12 - LogonUser - WNetAddConnection2

  Alt 5. Jun 2024, 13:11
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 if lPass = 'then pPass := Nil else pPass := PChar(lPass); .
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
lxo

Registriert seit: 30. Nov 2017
281 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi 12 - LogonUser - WNetAddConnection2

  Alt 5. Jun 2024, 13:53
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 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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.048 Beiträge
 
Delphi 12 Athens
 
#7

AW: Delphi 12 - LogonUser - WNetAddConnection2

  Alt 5. Jun 2024, 14:20
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 5. Jun 2024 um 14:22 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:25 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