Announcement

Collapse
No announcement yet.

Lauferkfreigabe

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Lauferkfreigabe

    Hat jemand eine Ahnung, wie man mit Delphi die Laufwerks-, Ordner- und Druckereingabe kontrollieren kann?

  • #2
    Hallo Johannes,<br>schau mal unter WNetAddConnection nach.<br>:-) Jens Schuman

    Comment


    • #3
      Es gibt verschiedene Funktionen für 9x und NT

      Version für 9x (weil komplizierter - und Delphi nicht viele von den records kennt)

      <pre><p>
      <b>const</b>
      LM20_NNLEN = 12; <i>{ LM 2.0 Net name length }</i>
      SHPWLEN = 8; <i>{ Share password length (bytes) }</i>
      <p>
      <b>type</b>
      PShareInfo50 = ^TShareInfo50;
      TShareInfo50 = <b>packed record</b>
      shi50_netname : <b>array</b> [0..LM20_NNLEN] <b>of</b> Char; <i>{ share name }</i>
      shi50_type : Byte; <i>{ see below }</i>
      shi50_flags : Word; <i>{ see below }</i>
      shi50_remark : PChar; <i>{ ANSI comment string }</i>
      shi50_path : PChar; <i>{ shared resource }</i>
      shi50_rw_password: <b>array</b> [0..SHPWLEN] <b>of</b> Char; <i>{ read-write password (share-level security) }</i>
      shi50_ro_password: <b>array</b> [0..SHPWLEN] <b>of</b> Char; <i>{ read-only password (share-level security) }</i>
      <b>end</b>;
      <p>
      <i>{---------------------------------------------------------------}</i>
      <i>{ }</i>
      <i>{ Special values and constants - SHARE }</i>
      <i>{ }</i>
      <i>{---------------------------------------------------------------}</i>
      <p>
      <i>{ Field values for shi50_flags; }</i>
      <p>
      <i>{ These flags are relevant for share-level security on VSERVER }</i>
      <i>{ When operating with user-level security, use SHI50F_FULL - the actual }</i>
      <i>{ access rights are determined by the NetAccess APIs. }</i>
      <p>
      <b>const</b>
      SHI50F_RDONLY = $0001;
      SHI50F_FULL = $0002;
      SHI50F_DEPENDSON = SHI50F_RDONLY <b>or</b> SHI50F_FULL;
      SHI50F_ACCESSMASK = SHI50F_RDONLY <b>or</b> SHI50F_FULL;
      <p>
      <i>{ The share is restored on system startup }</i>
      <p>
      <b>const</b>
      SHI50F_PERSIST = $0100;
      <p>
      <i>{ The share is not normally visible }</i>
      <p>
      <b>const</b>
      SHI50F_SYSTEM = $0200;
      <p>
      <i>{ Share types. }</i>
      <i>{ STYPE_DISKTREE and STYPE_PRINTQ are recognized on peer servers }</i>
      <p>
      <b>const</b>
      STYPE_DISKTREE = 0; <i>{ disk share }</i>
      STYPE_PRINTQ = 1; <i>{ printer share }</i>
      STYPE_DEVICE = 2;
      STYPE_IPC = 3;
      <p>
      <b>const</b>
      SHI_USES_UNLIMITED = -1;
      <p>
      <b>function</b> NetShareAdd(pszServer: PChar; sLevel: Smallint; pbBuffer: Pointer;
      cbBuffer: Word): DWORD; <b>stdcall</b>; <b>external</b> 'svrapi.dll' name 'NetShareAdd';
      <p>
      <i>{ ServerName can be nil to indicate the local computer. }</i>
      <b>function</b> NetShareAdd_9x(pszServerName, ShareName, SharePath: PChar): DWORD;
      <b>var</b>
      pBuf: PShareInfo50;
      cbBuffer: Byte;
      <b>begin</b>
      Result := ERROR_INTERNAL_ERROR;
      cbBuffer := SizeOf(TShareInfo50);
      GetMem(pBuf, cbBuffer);
      <b>if</b> pBuf <> <b>nil then</b>
      <b>try</b>
      lstrcpyn(pBuf^.shi50_netname, ShareName, SizeOf(pBuf^.shi50_netname) - 1);
      pBuf^.shi50_type := STYPE_DISKTREE;
      pBuf^.shi50_flags := SHI50F_FULL;
      pBuf^.shi50_remark := <b>nil</b>;
      pBuf^.shi50_path := SharePath;
      pBuf^.shi50_rw_password[0] := #0; <i>{ No password }</i>
      pBuf^.shi50_ro_password[0] := #0; <i>{ No password }</i>
      Result := NetShareAdd(pszServerName, 50, pBuf, cbBuffer);
      <b>finally</b>
      FreeMem(pBuf);
      <b>end</b>;
      <b>end</b>;
      <p>
      <b>procedure</b> TForm1.Button1Click(Sender: TObject);
      <b>begin</b>
      NetShareAdd_9x(<b>nil</b>, 'test', 'c:\temp');
      <b>end</b>;
      <p></pre>
      <p>
      Das die Bezeichner-Namen nicht ganz Borland-konform sind liegt einfach daran, das es eine 1:1 Übersetzung des Beispiels von Microsoft aus dem PSDK ist.

      Gruß Nico
      &#10

      Comment


      • #4
        mehr Infos zu der Funktion gibt's unter...<br>
        http://msdn.microsoft.com/library/psdk/network/ntlmapi2_0bxg.htm

        Gruß Nic

        Comment


        • #5
          Es gibt verschiedene Funktionen für 9x und NT

          Version für 9x (weil komplizierter - und Delphi nicht viele von den records kennt)

          <pre><p>
          <b>const</b>
          LM20_NNLEN = 12; <i>{ LM 2.0 Net name length }</i>
          SHPWLEN = 8; <i>{ Share password length (bytes) }</i>
          <p>
          <b>type</b>
          PShareInfo50 = ^TShareInfo50;
          TShareInfo50 = <b>packed record</b>
          shi50_netname : <b>array</b> [0..LM20_NNLEN] <b>of</b> Char; <i>{ share name }</i>
          shi50_type : Byte; <i>{ see below }</i>
          shi50_flags : Word; <i>{ see below }</i>
          shi50_remark : PChar; <i>{ ANSI comment string }</i>
          shi50_path : PChar; <i>{ shared resource }</i>
          shi50_rw_password: <b>array</b> [0..SHPWLEN] <b>of</b> Char; <i>{ read-write password (share-level security) }</i>
          shi50_ro_password: <b>array</b> [0..SHPWLEN] <b>of</b> Char; <i>{ read-only password (share-level security) }</i>
          <b>end</b>;
          <p>
          <i>{---------------------------------------------------------------}</i>
          <i>{ }</i>
          <i>{ Special values and constants - SHARE }</i>
          <i>{ }</i>
          <i>{---------------------------------------------------------------}</i>
          <p>
          <i>{ Field values for shi50_flags; }</i>
          <p>
          <i>{ These flags are relevant for share-level security on VSERVER }</i>
          <i>{ When operating with user-level security, use SHI50F_FULL - the actual }</i>
          <i>{ access rights are determined by the NetAccess APIs. }</i>
          <p>
          <b>const</b>
          SHI50F_RDONLY = $0001;
          SHI50F_FULL = $0002;
          SHI50F_DEPENDSON = SHI50F_RDONLY <b>or</b> SHI50F_FULL;
          SHI50F_ACCESSMASK = SHI50F_RDONLY <b>or</b> SHI50F_FULL;
          <p>
          <i>{ The share is restored on system startup }</i>
          <p>
          <b>const</b>
          SHI50F_PERSIST = $0100;
          <p>
          <i>{ The share is not normally visible }</i>
          <p>
          <b>const</b>
          SHI50F_SYSTEM = $0200;
          <p>
          <i>{ Share types. }</i>
          <i>{ STYPE_DISKTREE and STYPE_PRINTQ are recognized on peer servers }</i>
          <p>
          <b>const</b>
          STYPE_DISKTREE = 0; <i>{ disk share }</i>
          STYPE_PRINTQ = 1; <i>{ printer share }</i>
          STYPE_DEVICE = 2;
          STYPE_IPC = 3;
          <p>
          <b>const</b>
          SHI_USES_UNLIMITED = -1;
          <p>
          <b>function</b> NetShareAdd(pszServer: PChar; sLevel: Smallint; pbBuffer: Pointer;
          cbBuffer: Word): DWORD; <b>stdcall</b>; <b>external</b> 'svrapi.dll' name 'NetShareAdd';
          <p>
          <i>{ ServerName can be nil to indicate the local computer. }</i>
          <b>function</b> NetShareAdd_9x(pszServerName, ShareName, SharePath: PChar): DWORD;
          <b>var</b>
          pBuf: PShareInfo50;
          cbBuffer: Byte;
          <b>begin</b>
          Result := ERROR_INTERNAL_ERROR;
          cbBuffer := SizeOf(TShareInfo50);
          GetMem(pBuf, cbBuffer);
          <b>if</b> pBuf <> <b>nil then</b>
          <b>try</b>
          lstrcpyn(pBuf^.shi50_netname, ShareName, SizeOf(pBuf^.shi50_netname) - 1);
          pBuf^.shi50_type := STYPE_DISKTREE;
          pBuf^.shi50_flags := SHI50F_FULL;
          pBuf^.shi50_remark := <b>nil</b>;
          pBuf^.shi50_path := SharePath;
          pBuf^.shi50_rw_password[0] := #0; <i>{ No password }</i>
          pBuf^.shi50_ro_password[0] := #0; <i>{ No password }</i>
          Result := NetShareAdd(pszServerName, 50, pBuf, cbBuffer);
          <b>finally</b>
          FreeMem(pBuf);
          <b>end</b>;
          <b>end</b>;
          <p>
          <b>procedure</b> TForm1.Button1Click(Sender: TObject);
          <b>begin</b>
          NetShareAdd_9x(<b>nil</b>, 'test', 'c:\temp');
          <b>end</b>;
          <p></pre>
          <p>
          Das die Bezeichner-Namen nicht ganz Borland-konform sind liegt einfach daran, das es eine 1:1 Übersetzung des Beispiels von Microsoft aus dem PSDK ist.

          Gruß Nic

          Comment


          • #6
            Ich denke, das war gemeint (weil oben drüber steht "Laufwerksfreigabe", aber mit "Laufwerks-, Ordner- und Druckereingabe" kann ich nichts anfangen)

            Gruß Nic

            Comment

            Working...
            X