Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Zugriff auf Freigabe per Delphi-Code (https://www.delphipraxis.net/123319-zugriff-auf-freigabe-per-delphi-code.html)

azwa66 30. Okt 2008 18:30


Zugriff auf Freigabe per Delphi-Code
 
hallo,

bräuchte mal eure hilfe. kennt jemand von euch eine möglichkeit per delphi-code auf eine freigabe (sagen wir mal \\server01\c$) zuzugreifen, obwohl der aktuelle benutzer keine berechtigung auf diese freigabe hat? ich möchte der routine als parameter einen benutzer und ein passwort übergeben mit der die freigabe geöffnet wird. soll quasi identisch ablaufen wie netzwerklaufwerk verbinden -> verbindung unter anderem benutzernamen herstellen.

hoffe ich hab mich verständlich ausgedrückt.

danke schon mal im voraus.

Uwe Raabe 30. Okt 2008 18:43

Re: Zugriff auf Freigabe per Delphi-Code
 
Das geht mit NetUseAdd. Bei Level = 2 kannst du in der Struktur auch einen anderen Usernamen angeben.

azwa66 31. Okt 2008 09:18

Re: Zugriff auf Freigabe per Delphi-Code
 
danke für die rasche antwort. hast du auch ein code-beispiel?

Uwe Raabe 31. Okt 2008 13:58

Re: Zugriff auf Freigabe per Delphi-Code
 
Habe gerade festgestellt, daß NetUseAdd nicht in der Standard Delphi Windows API vorhanden ist. Aber diese Wrapper sollten den gleichen Zweck erfüllen und benötigen lediglich die Windows Unit.

Delphi-Quellcode:
function NetUseAdd(const LocalName, RemoteName, UserName, Password: string; var AccessName: string): DWord;
var
  netResource: TNetResource;
  dwResult, dwBufSize, dwFlags: DWORD;
  hRes: DWORD;
  buf: array[0..1024] of Char;
begin
  dwFlags := CONNECT_REDIRECT;
  ZeroMemory(@netResource, sizeof(TNetResource));
  with netResource do begin
    dwType := RESOURCETYPE_DISK;
    lpLocalName := PChar(LocalName);
    lpRemoteName := PChar(RemoteName);
    lpProvider := nil;
  end;
  dwBufSize := Sizeof(buf);
  result := WNetUseConnection(0, netResource, PChar(UserName), PChar(Password), dwFlags, buf, dwBufSize, dwResult);
  if hRes = NO_ERROR then
    AccessName := buf;
end;

function NetUseDelete(const LocalName: string): Boolean;
var
  hRes: DWORD;
begin
  hRes := WNetCancelConnection2(PChar(LocalName), CONNECT_UPDATE_PROFILE, true);
  result := (hres = NO_ERROR);
end;
Bei NetUseAdd kann LocalName leer bleiben, dann wird automatisch ein freier Laufwerksbuchstabe vergeben. Bitte die gemappten Laufwerke immer wieder mit NetUseDelete freigeben, da sonst irgendwann keine Laufwerksbuchstaben mehr frei sind.

Wenn nicht benötigt können Username und Password auch leer bleiben.

RWarnecke 31. Okt 2008 15:15

Re: Zugriff auf Freigabe per Delphi-Code
 
So verbinde ich ein Volume oder eine Freigabe : (Code ist nicht von mir)
Delphi-Quellcode:
function NetzlaufwerkVerbinden(Laufwerk: string; Pfad: string;
  Username: string; Password: string; RestoreAtLogon: Boolean): DWORD;
var
  NetResource: TNetResource;
  dwFlags: DWORD;
begin
  with NetResource do
  begin
    dwType := RESOURCETYPE_DISK;
    lpLocalName := PChar(Laufwerk);
    lpRemoteName := PChar(Pfad);
    lpProvider := nil;
  end;

  if (RestoreAtLogon) then
    dwFlags := CONNECT_UPDATE_PROFILE
  else
    dwFlags := 0;

  Result := WNetAddConnection2(NetResource, PChar(Password),
    PChar(Username), dwFlags);
end;

azwa66 3. Nov 2008 10:43

Re: Zugriff auf Freigabe per Delphi-Code
 
habs mal mit beiden methoden probiert! das ergebnis ist immer 5 (ERROR_ACCESS_DENIED)

d:= NetUseAdd(EmptyStr, '\\dbsrv01\c$', EmptyStr, EmptyStr, str);
bzw.
d := NetzlaufwerkVerbinden('y:', '\\dbsrv01\c$', 'administrator', 'xxx', false);

beim verbinden über den windows explorer funktioniert es tadellos. was mache ich denn falsch?


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