Announcement

Collapse
No announcement yet.

Dateirechte mit VB und Delphi - WMI Schnittstelle

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

  • Dateirechte mit VB und Delphi - WMI Schnittstelle

    Hallo!
    Habe folgendes Problem mit WMI

    Ich versuche die Benutzerrechte einer Datei auszulesen was in VB sehr einfach ist und funktioniert.
    Wie kann ich so etwas in Delphi erstellen ?

    folgender VB Code

    connect = "winmgmts:Win32_LogicalFileSecuritySetting='" & testdatei & "'"

    Set instance = GetObject(connect)
    retval = instance.getsecuritydescriptor(objDescriptor)
    DACL = objDescriptor.Properties_.Item("dacl").Value

    For each entry in DACL
    list = list & entry.Trustee.Name & ": " & entry.AccessMask & vbCr _
    & GetRights(entry.AccessMask) & vbCr
    Next
    MsgBox list

  • #2
    Hallo,

    die Vorgehensweise in Delphi ist abgesehen von der Syntax die gleiche. Die Suche nach der Zeichenkette <b>ISWbemObject</B> bzw. <b>WMI</b> liefert hier im FORUM einige Beispiele für WMI-Abfragen mit Delphi zurück

    Comment


    • #3
      Hallo,

      danke für die Antwort.
      Ich habe diese Beispiele bereits angeschaut und nachgebildet und funktionieren auch soweit (Habe auch Ihre Bücher gelesen).
      Bei dem obigen Beispiel komme ich allerdings nicht weiter. Ich erhalte zwar die möglichen Properties kann aber nicht die Berechtigungen von Gruppen und Benutzern auslesen.
      Können Sie mir helfen ?

      <PRE>
      procedure TForm1.ButtonClick(Sender: TObject);
      var
      aSrv : ISWbemServices;
      aObjSet : ISWbemObjectSet;
      aObj : ISWbemObject;
      vNVS : OleVariant;
      aPropSet : ISWbemPropertySet;
      aProp : ISWbemProperty;
      pEnum : IEnumVARIANT;
      vOut : OleVariant;
      dwRetrieved : LongWord;
      hRes : HResult;
      begin
      aSrv := SWbemLocator1.ConnectServer('','','','','','',0,vN VS);
      aObj := aSrv.Get('Win32_LogicalFileSecuritySetting=''d:\te st.txt''', 0, vNVS);
      aPropSet := aObj.Properties_;
      pEnum := aPropSet.Get__NewEnum as IEnumVARIANT;
      while (TRUE) do
      begin
      hRes := pEnum.Next(1, vOut, dwRetrieved);
      if hRes <> S_OK then
      Break;
      ListBox.Items.Add(vOut.Name);
      end;
      end;
      </PRE&gt

      Comment


      • #4
        Hallo,

        &gt;... kann aber nicht die Berechtigungen von Gruppen und Benutzern auslesen..

        das ist kein Wunder, denn das Wichtigste fehlt ja noch. In der Frage wurde das folgende VB-Beispiel genannt:

        <pre>
        ...
        retval = instance.getsecuritydescriptor(objDescriptor)
        DACL = objDescriptor.Properties_.Item("dacl").Value
        For each entry in DACL
        list = list & entry.Trustee.Name & ": " & entry.AccessMask & vbCr _ & GetRights(entry.AccessMask) & vbCr
        Next
        ..
        </pre>
        Die <b>While</b>-Schleife aus meinem Beispiel entspricht der For each-Anweisung aus VB. Daher muss die Abforderung der Sicherheitsinformationen (<b>GetSecurityDescriptor</b>) davorgesetzt werden

        Comment


        • #5
          Hallo,
          habe ich versucht komme aber leider nicht weiter. Wie muß ich den GetSecurityDescriptor
          davorsetzen

          Comment


          • #6
            Hallo,

            das folgende Beispiel verdeutlicht den Zugriff:
            <pre>
            <b>uses</b> ActiveX;

            <b>procedure</b> TForm1.Button1Click(Sender: TObject);
            <b>var</b>
            aSrv : ISWbemServices;
            vObj : OleVariant;
            iRet : Integer;
            vObjDesc : OleVariant;
            vDACL : Variant;
            vDACLEnum : OleVariant;
            vNVS : OleVariant;
            iHigh, iLow, i : Integer;
            <b>begin</b>
            aSrv := SWbemLocator1.ConnectServer(<font color="#9933CC">''</font>,<font color="#9933CC">''</font>,<font color="#9933CC">''</font>,<font color="#9933CC">''</font>,<font color="#9933CC">''</font>,<font color="#9933CC">''</font>,0,vNVS);
            vObj := aSrv.Get(<font color="#9933CC">'Win32_LogicalFileSecuritySetting= '</font><font color="#9933CC">'C:\trace.txt'</font><font color="#9933CC">''</font>, 0, vNVS);
            iRet := vObj.GetSecurityDescriptor(vObjDesc);
            <b>if</b> iRet &lt;&gt; 0 <b>then</b>
            <b>begin</b>
            ShowMessage(IntToStr(iRet));
            Exit;
            <b>end</b>;
            <font color="#003399"><i>// Siehe &quot;GetSecurityDescriptor&quot; in Platform SDK Hilfe</i></font>
            <font color="#003399"><i>// Ergebnis ist ein Variant-Array</i></font>
            vDACL := vObjDesc.DACL;
            <font color="#003399"><i>// Variant-Array auswerten</i></font>
            iHigh := VarArrayHighBound(vDACL, 1);
            iLow := VarArrayLowBound(vDACL, 1);
            <b>for</b> i := iLow <b>to</b> iHigh <b>do</b>
            <b>begin</b>

            ListBox1.Items.Add(vDACL[i].Trustee.Name);
            ListBox1.Items.Add(vDACL[i].AccessMask);
            <b>end</b>;
            <b>end</b>;
            </pre>

            P.S: Je nach Eigenschaft muss man penibel die Hilfeseiten aus der Microsoft Platform SDK Hilfe durchsehen, da nicht alle Eigenschaften über IEnumVARIANT verfügbar sind. Im Fall der DACL wird ein klassiches Variant-Array zurückgeliefert

            Comment


            • #7
              Hallo,
              Ich schreib gerade ein Programm, bei dem ich unter anderem auslesen will wer für bestimmte Ordner Schreibrechte hat.
              ich habe ziemlich genau die oben beschriebene Prozedur in mein Programm eingebaut. Aber was fang ich jetzt mit den Daten an, die in der Liste stehen?? Wie kann ich jetzt genau die BEnutzer anzeigen lassen die Schreibrechte besitzen?

              Comment


              • #8
                HELP! Ich verzweifle an dieser Frage... Ich hab das ganze Netz durchsucht und finde nichts, was mir die Ausgabe dieser Prozedur erklären kann. Was ist das für ein Schlüssel??? Gibt es irgendjemanden der mir nen Hinweis geben kann???

                Comment

                Working...
                X