So langsam zweifele ich an mir selbst. Seit ich den UserManager überarbeite klappen die
API Funktionsaufrufe hinten und vorne nicht mehr, obwohl ich eigentlich nichts anders mache als im alten Usermanager.
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Procedure : AddToGroup
// Comment : Adds a user to a group
function AddToGroup(Server, User, Group: string): NET_API_STATUS;
var
s: String;
iSize: Integer;
lpwServer: PWideChar;
lpwGroup: PWideChar;
Member: PLocalGroupMembersInfo3;
begin
result := NERR_BASE;
if (User <> '') and (Group <> '') and (Server <> '') then
begin
s := Server + '\' + User;
iSize := MultiByteToWideChar(0, 0, Pointer(s), -1, nil, 0);
lpwServer := GetMemory(iSize * SizeOf(WideChar));
MultiByteToWideChar(0, 0, Pointer(s), -1, lpwServer, iSize);
iSize := MultiByteToWideChar(0, 0, Pointer(Group), -1, nil, 0);
lpwGroup := GetMemory(iSize * SizeOf(WideChar));
MultiByteToWideChar(0, 0, Pointer(Group), -1, lpwGroup, iSize);
GetMem(Member, sizeof(TLocalGroupMembersInfo3));
try
Member.lgrmi3_domainandname := lpwServer;
result := NetLocalGroupAddMembers(lpwServer, lpwGroup, 3, Member, 1);
finally
FreeMem(Member, sizeof(TLocalGroupMembersInfo3));
end;
end;
end;
Diese Funktion liefert mir immer den Fehler 1722 zurück, obwohl der Netzwerkpfad stimmt: "\\HAL900\Test". "HAL9000" ist mein lokaler Computer auf dem ich arbeite. Hat jemand eine Idee, woran es liegen könnte?
Nachtrag: Im
PSDK steht das lgrmi3_domainandname so
Zitat:
Pointer to a null-terminated
Unicode string specifying the account name of the local group member prefixed by the domain name and the "\" separator character. For example:
<DomainName>\<AccountName>
angegeben werden müsste. Aber auch wenn ich die ersten beiden "\\" davor wegnehme, kommt der Fehler, dass der Netzwerkpfad nicht gefunden würde.