Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi NetGroupAddUser (https://www.delphipraxis.net/9931-netgroupadduser.html)

steppo 7. Okt 2003 23:27


NetGroupAddUser
 
hi leute,
ich bekomme beim aufruf der function

"NetGroupAddUser(servername, groupname, userName: PWChar): Integer;stdcall;
external 'netapi32.dll';"

immer "The Groupname could not be found" als Rückgabewert.
Was tun?

Christian Seehase 7. Okt 2003 23:54

Re: NetGroupAddUser
 
Moin Steppo,

ich vermute mal, dass Du versucht hast einen User einer lokalen Gruppe hinzuzufügen.
NetGroupAddUser ist aber für globale Gruppen zuständig.

Probiers mal mit NetLocalGroupAddMembers.

steppo 8. Okt 2003 07:28

Re: NetGroupAddUser
 
Morgen Christian,

Du hast recht!
Ich habe versucht einen lokalen User hinzuzufügen.

Habe auch schon in diesem Forum nach "NetLocalGroupAddMembers" gesucht und auch gefunden.
Komme aber mit den Parametern nicht zurecht.

Vor allem wie und wo definiere ich dieses NERR_SUCCESS und die übrigen Rückgabe bzw Übergabeparameter. Dieses NERR_SUCCESS ist doch eine Konstante, oder?
Von welchem Typ?

Ich lerne es glaub´ ich nie!

Christian Seehase 8. Okt 2003 13:27

Re: NetGroupAddUser
 
Moin Steppo,

ein Aufruf wie dieser sollte gehen:

Delphi-Quellcode:
type
  NET_API_STATUS = DWORD;

function NetLocalGroupAddMembers(const servername : PWChar;const groupname : PWChar;const buf : pointer;const totalentries : DWORD) : NET_API_STATUS; stdcall; external 'netapi32.dll';

const
  NERR_SUCCESS = 0;

var
  lgmiWork : LOCALGROUP_MEMBERS_INFO_3;
  dwResult : DWORD;

begin
  lgmiWork.lgrmi3_domainandname := 'Rechnername\username';
  dwResult := NetLocalGroupAddMembers(nil,'Name der lokalen Gruppe',3,@lgmiWork,1);
  //...
für Nähere Informationen zu den Funktionen usw. kannst Du ja im PSDK bzw. auf MSDN nachsehen.
Im PSDK könntest Du dann in den Header Dateien auch die Konstanten nachschlagen.

Zitat:

Zitat von Steppo
Ich lerne es glaub´ ich nie!

Wieso? Ist doch alles nur Übungssache.

steppo 8. Okt 2003 15:54

Re: NetGroupAddUser
 
Ich muß dich nocheinmal behelligen.
Ich bekomme beim compilieren die Fehlermeldung
"LOCALGROUP_MEMBERS_INFO_3" / Undefinierter Bezeichner.

Ist das auch Dword?

Wenn du lust und zeit hast, würde ich mich sehr freuen, wenn du mir die gesamte Funktion erklärst.
Vielleicht ist es mir dann möglich andere API-Funktionen richtig zu übersetzen!

Danke für deine bisherige Hilfe!
steppo

Dani 8. Okt 2003 15:58

Re: NetGroupAddUser
 
LOCALGROUP_MEMBERS_INFO_3 ist eine Konstante/Variable (edit) oder ein Typ, welche(r) aber in keiner Unit definiert wurde. Wenn du eine Windows API Funktion übersetzten willst, musst du auch alle Structures, Constants usw die von der Funktion verwendet werden mit übersetzen.

Vielleicht haben das die JEDIs aber auch schon erledigt... schau mal auf http://www.jedi.delphi-source.de

Christian Seehase 8. Okt 2003 16:20

Re: NetGroupAddUser
 
Moin Steppo

Delphi-Quellcode:
type
  LOCALGROUP_MEMBERS_INFO_3 = record
    lgrmi3_domainandname : PWChar;
  end;
Du solltest Dir wirklich mal das PSDK zulegen ;-)

@Dani:
Wie kommst Du denn auf Konstante?

Dani 8. Okt 2003 19:08

Re: NetGroupAddUser
 
Upsa, stimmt natürlich, dass das auch Typen sein können :oops:

War ein spontaner Gedanke ;-)

steppo 8. Okt 2003 20:06

Re: NetGroupAddUser
 
Danke Christian, habe nachher gesehen, dass es sich um ein Record handeln muß.
(lgmiWork.lgrmi3_domainandname).
Was mich etwas verwirrt hat ist, dass in dem Record nur eine Variable deklariert ist. Das ist doch untypisch, da ein Record dann benutzt wird, wenn mann mehrere Werte verschiedener Datentypen zusammenfassen will.


Habe aber auch das verstanden.

Die anderen Werte, wie
LOCALGROUP_MEMBERS_INFO_0
LOCALGROUP_MEMBERS_INFO_1
LOCALGROUP_MEMBERS_INFO_2
brauchen wir garnicht und definieren sie daher auch nicht.

Stimmt das alles so?

steppo

Christian Seehase 8. Okt 2003 21:28

Re: NetGroupAddUser
 
Moin Steppo,

stimmt.
Für Level 0 bräuchtest Du die SID (Security ID) des Users, und Level 1 und 2 werden von anderen Funktionen benötigt.

Zitat:

Zitat von Steppo
Was mich etwas verwirrt hat ist, dass in dem Record nur eine Variable deklariert ist. Das ist doch untypisch, da ein Record dann benutzt wird, wenn mann mehrere Werte verschiedener Datentypen zusammenfassen will.

Hier haben die Entwickler halt ihr System durchgehalten. Ansonsten hätte es auch einfach ein PWChar getan.

Alle diese Netxxx Funktionen, Typen, Konstanten... sind in den LanManager Headern deklariert.
Wie Dani schon richtig vermutete gibt es dort fertige Übersetzungen bei den JEDIs.
Allerdings verwende ich lieber meine eigenen Übersetzungen (die sich nicht immer mit den anderen vertragen), da bei den JEDIs die borlandtypischen Funktionsdeklarationen mit Var Parametern verwendet werden.
Ich halte mich da lieber mehr an die c-typische Deklaration. Zum einen kann man dann auch leichter Samples umsetzen, zum anderen ist es manchmal einfacher die Funktionen der Dokumentation entsprechend zu verwenden. Bei var Parametern kann man nun einmal nicht nil angeben, selbst wenn dies gemäss Dokumentation zulässig wäre. Man muss sich also, bei borlandtypischer Deklaration, manchmal Dummyvariablen anlegen, die man eigentlich nicht braucht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:34 Uhr.
Seite 1 von 2  1 2      

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