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 Windows Session neu aufbauen (https://www.delphipraxis.net/49429-windows-session-neu-aufbauen.html)

Gruber_Hans_12345 11. Jul 2005 12:18


Windows Session neu aufbauen
 
Hallo, ich habe folgende Anforderung :

Der PC hat eine Netzlaufwerk verbunden auf P: -> \\SERVER\Daten1

Nun möchste ich die Sitzung zu dem Server abbrechen, mich autoamtisch mit einem anderem Username anmelden (Username und PAsswort sind dabei in einem externen File) und dann autoatisch das Netzlaufwerk auf P: -> \\SERVER\Daten2 umändern

Das mit den Netzlaufwerken ist ja kein Problem,
Aber wie kann ich den User ab und anschließend anmelden ?
Kann ich das Passwort übergeben ?

Ware toll, wenn mich wer auf die Richtige Spur bringen kann.

Olli 11. Jul 2005 12:55

Re: Windows Session neu aufbauen
 
Alles was du brauchst steht im PSDK ;)

WNetAddConnection2
WNetAddConnection3
WNetCancelConnection <-------- KUCKUCK
WNetCancelConnection2 <-------- KUCKUCK
WNetCloseEnum
WNetConnectionDialog
WNetConnectionDialog1
WNetDisconnectDialog
WNetDisconnectDialog1
WNetEnumResource
WNetGetConnection
WNetGetLastError
WNetGetNetworkInformation
WNetGetProviderName
WNetGetResourceInformation
WNetGetResourceParent
WNetGetUniversalName
WNetGetUser
WNetOpenEnum
WNetRestoreConnectionW
WNetUseConnection


:mrgreen:

shmia 11. Jul 2005 12:56

Re: Windows Session neu aufbauen
 
Zitat:

Zitat von Gruber_Hans_12345
Das mit den Netzlaufwerken ist ja kein Problem,
Aber wie kann ich den User ab und anschließend anmelden ?
Kann ich das Passwort übergeben ?

Die API Funktion lautet: Hier im Forum suchenWNetAddConnection2

Gruber_Hans_12345 11. Jul 2005 13:32

Re: Windows Session neu aufbauen
 
Hm... bin gespannt, ob das mit dem WNetCancelConnection funktioniert, denn wenn ich von Windows aus manuell das Netzlaufwerk trenne und anschließend versuche das Netzlaufwerk mit neuem Benutzername/Passwort wiederherzustellen, dann bekomme ich immer Fehlermeldungen wie :

"Dieser Netzwerkordner ist zurzeit unter Verwendung eines anderen Namens und Kennwort verbunden.
Trennen Sie zuerst jede bestehende Verbindung auf diese Netzwerkfreigabe, um unter Verwendung eines anderen Namens und Kennwortes verbunden zu werden."

Und dann :

"Das Netzlaufwerk konnte nicht verbunden werden, da der folgende Fehler aufgetreten ist :

Mehrfache Verbindungen zu einem Server oder einer freigegebenen Ressource vom denselben Benutzer unter Verwendung mehrerer Benutzernamen sind nicht zulässig. Trennen Sie alle früheren Verbindungen zu dem Server bzw. freigegebenen Ressource, und versuchen Sie es erneut."

Obwohl ich aber sonst keine "Sichtbaren" Verbindungen mehr habe.


Und ich glaube, das WNetCancelConnection nur das selbe macht wie Windows mit Netzlaufwerk trennen .... aber ich werds auf jeden Fall mal probieren ...

shmia 11. Jul 2005 13:37

Re: Windows Session neu aufbauen
 
Zitat:

Zitat von Gruber_Hans_12345
Hm... bin gespannt, ob das mit dem WNetCancelConnection funktioniert, denn wenn ich von Windows aus manuell das Netzlaufwerk trenne und anschließend versuche das Netzlaufwerk mit neuem Benutzername/Passwort wiederherzustellen, dann bekomme ich immer Fehlermeldungen wie :

"Dieser Netzwerkordner ist zurzeit unter Verwendung eines anderen Namens und Kennwort verbunden.
Trennen Sie zuerst jede bestehende Verbindung auf diese Netzwerkfreigabe, um unter Verwendung eines anderen Namens und Kennwortes verbunden zu werden."

Dann nimm WNetCancelConnection2.
Code:
DWORD WNetCancelConnection2(
  LPCTSTR lpName,
  DWORD dwFlags,
  BOOL fForce
);
fForce sollte auf True gesetzt werden.

Gruber_Hans_12345 11. Jul 2005 14:14

Re: Windows Session neu aufbauen
 
Ok,danke mal, werds probieren, und bin schon gespannt, obs (und wie's) funktioniert

Gruber_Hans_12345 11. Jul 2005 15:44

Re: Windows Session neu aufbauen
 
Funktioniert einwandfrei !

Danke an alle nocheinmal !

Gruber_Hans_12345 12. Jul 2005 07:52

Re: Windows Session neu aufbauen
 
Zu früh gefreut, funktioniert doch nicht.

Ich bekomme jetzt auf einmal immer Fehler 1219 ERROR_SESSION_CREDENTIAL_CONFLICT (The credentials supplied conflict with an existing set of credentials.)

Ich lasse mir mit
err := WNetOpenEnum(RESOURCE_CONNECTED, RESOURCETYPE_ANY, RESOURCEUSAGE_CONNECTABLE, temp, hand);
....

alle Verbindungen anzeigen, und Disconnecte dann alle die zu dem Server gehen.

Doch beim Add bekomme ich immer wieder den selben Fehler

shmia 12. Jul 2005 09:19

Re: Windows Session neu aufbauen
 
Zitat:

Zitat von Gruber_Hans_12345
alle Verbindungen anzeigen, und Disconnecte dann alle die zu dem Server gehen.

Beim Disconnecten kann man ein gemapptes Laufwerk oder auch eine Netzwerkresource (Freigabe) abklemmen.

DWORD WNetCancelConnection2(
LPCTSTR lpName,
DWORD dwFlags,
BOOL fForce
);
lpName
[in] Pointer to a constant null-terminated string that specifies the name of either the redirected local device or the remote network resource to disconnect from.
If this parameter specifies a redirected local device, the function cancels only the specified device redirection. If the parameter specifies a remote network resource, all connections without devices are canceled.

Also ich würde mal versuchen, nicht nur die Laufwerke, sondern auch die Freigaben des Servers zu canceln.

Olli 12. Jul 2005 09:39

Re: Windows Session neu aufbauen
 
Hast du in der Hand wie die erste Verbindung aufgebaut wird? Wenn ja, dann verbinde dich, statt zu *irgendwelchen* Netzfreigaben mal zu \\Server\IPC$ ... dann bist du komplett gegen den Rechner authentifiziert und kannst alles machen was remote geht (inkl. Laufwerke verbinden ;) ).

Gruber_Hans_12345 12. Jul 2005 10:22

Re: Windows Session neu aufbauen
 
@shmia
Ich kann zwar das Laufwerk und/oder die Netzwerkfreigabe disconnecten, das geht auch ohne Probleme. (Und es scheint anschließend auch nicht mehr bei Enum ... nicht mehr auf), aber ich bekomme trotzdem wenn ich mich anschließend mit einem anderen Benutzernamen anmelden will den obigen Fehler.
Wenn ich mit Enum alle Verbindungen aufliste, bekomme ich immer nur Laufwerke (habe keine Drucker verbunden), aber auch keine Verbindung auf \IPC$.
(Habe auch schon versucht "blind" \\SERVER\IPC$ zu trennen, hat aber nicht funktioniert !)

Gruber_Hans_12345 12. Jul 2005 11:03

Re: Windows Session neu aufbauen
 
Kann den Fehler jetzt rekonstruieren :

*) Keine Verbindung zum Server
*) Baue eine Verbindung mit User1 auf (Laufwerk R: -> \\SERVER\USER_1)
*) Eins meiner Programme öffnet eine Datei am Server lockDir := CreateFile(PChar(ServerPfad+'temp.lck')
, GENERIC_READ
, FILE_SHARE_READ or FILE_SHARE_DELETE or FILE_SHARE_WRITE
, nil
, OPEN_EXISTING
, 0//FILE_FLAG_BACKUP_SEMANTICS {Or FILE_FLAG_OVERLAPPED}
, 0
);
*) Enum zeigt nur R: an
*) Am Server sehe ich eine Sitzung und die Datei geöffnet
*) Verbindung von R: wird disconnected
*) Das Programm schließt die Datei
if not CloseHandle(lockDir) then
RaiseLastWin32Error;
*) Die Datei bleibt am Server nach wie vor geöffnet (genau so wie die Sitzung)


Wenn ich die Datei schließe und das Disconnect erst anschließend mache, dann passt alles, Datei geschlossen, Sitzung geschlossen und kann anschließend mit einem anderem Username anmelden.

Gruber_Hans_12345 12. Jul 2005 13:21

Re: Windows Session neu aufbauen
 
hmmm, irgendwie verwirrend

MSDN:
The WNetEnumResource function does not enumerate users connected to a share; you can call the NetConnectionEnum function to accomplish this task. To enumerate hidden shares, call the NetShareEnum function.


Delphi Hilfe:
The NetConnectionEnum function is obsolete. It is provided only for compatibility with LAN Manager and 16-bit versions of Windows. Win32-based applications should use the WNetEnumResource function.

Olli 12. Jul 2005 14:06

Re: Windows Session neu aufbauen
 
Immer und ausschließlich auf die PSDKs (oder eben MSDN) zurückgreifen. Die alte Helpdatei kann man vergessen ;)

Christian Seehase 12. Jul 2005 20:34

Re: Windows Session neu aufbauen
 
Moin Hans,

wenn es sich nur um zwei Verbindungen handelt (User1 und User2), mit denen Du Dich am Servershare anmelden willst, kannst Du das auch mit einem "Workaround" machen.
Der eine User verbindet sich mit Server, der andere mit IP-Adresse-von-Server.
Unter dieser Voraussetzung ist es möglich sich gleichzeitig mit zwei verschiedenen Accounts von einem Rechner aus auf einen anderen zu verbinden.

Gruber_Hans_12345 13. Jul 2005 08:10

Re: Windows Session neu aufbauen
 
@Christian Seehase

Das funktioniert ja wirklich.
Aber leider kann ich nicht für alle User immer neue IP-Adressen anlegen (am Server)

Jetzt hab ich schon NetConnectionEnum,NetFileEnum und NetSessionEnum ausprobiert, aber die liefern anscheindend ja nur die Verbinung zu meinem Server.

Schön langsam bin ich am verzweifeln ....

Gruber_Hans_12345 13. Jul 2005 08:16

Re: Windows Session neu aufbauen
 
Hab jetzt das selbe auch am Server probiert:
NetSessionEnum, NetFileEnum, NetConnectionEnum, WNetEnumResource
nur NetSessionEnum zeigt was an, diese Session schließe ich dann in der Computerverwaltung, aber am Client bekomme ich immer den selben Fehler.

Christian Seehase 13. Jul 2005 12:08

Re: Windows Session neu aufbauen
 
Moin Hans,

wieso müssen sich eigentlich diverse verschiedene User von einem Client aus auf den Server verbinden?


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