Registriert seit: 29. Mai 2002
37.621 Beiträge
Delphi 2006 Professional
|
28. Jan 2003, 22:20
Ja, steckt aber in SysUtils drin. Du verstehen?
Jetzt bekomme ich aber hier einen RunTimeError:
Delphi-Quellcode:
procedure AddUserProc(sComputer: String);
var
ui3 : PUSERINFO3; //Pointer;
szBuffer : array[0..255] of Char;
s, sUser : String;
dwNetError : NET_API_STATUS;
begin
Sender := VOID;
GetMem(ui3, (sizeof(USER_INFO_3)) shl 1);
GetDlgItemText(hApp, IDC_EDTNAME, szBuffer, sizeof(szBuffer));
sUser := s;
s := String(szBuffer);
ui3.usri3_name := PWideChar(WideString(s));
GetDlgItemText(hApp, IDC_EDTDESCRIPTION, szBuffer, sizeof(szBuffer));
s := String(szBuffer);
ui3.usri3_comment := PWideChar(WideString(s));
GetDlgItemText(hApp, IDC_EDTFULLNAME, szBuffer, sizeof(szBuffer));
s := String(szBuffer);
ui3.usri3_full_name := PWideChar(WideString(s));
GetDlgItemText(hApp, IDC_EDTHOMEDIR, szBuffer, sizeof(szBuffer));
s := String(szBuffer);
ui3.usri3_home_dir := PWideChar(WideString(s));
ui3.usri3_flags := 0;
if IsDlgButtonChecked(hApp, IDC_CHKCANTCHNGPW) = BST_CHECKED then
ui3.usri3_flags := ui3.usri3_flags or UF_PASSWD_CANT_CHANGE
else
ui3.usri3_flags := ui3.usri3_flags and not UF_PASSWD_CANT_CHANGE;
if IsDlgButtonChecked(hApp, IDC_CHKDISABLED) = BST_CHECKED then
ui3.usri3_flags := ui3.usri3_flags or UF_ACCOUNTDISABLE
else
ui3.usri3_flags := ui3.usri3_flags and not UF_ACCOUNTDISABLE;
if IsDlgButtonChecked(hApp, IDC_CHKDONTEXPIRE) = BST_CHECKED then
ui3.usri3_flags := ui3.usri3_flags or UF_DONT_EXPIRE_PASSWD
else
ui3.usri3_flags := ui3.usri3_flags and not UF_DONT_EXPIRE_PASSWD;
if IsDlgButtonChecked(hApp, IDC_CHKLOCKED) = BST_CHECKED then
ui3.usri3_flags := ui3.usri3_flags or UF_LOCKOUT
else
ui3.usri3_flags := ui3.usri3_flags and not UF_LOCKOUT;
if IsDlgButtonChecked(hApp, IDC_CHKMUSTCHNGPW) = BST_CHECKED then
ui3.usri3_password_expired := 1
else
ui3.usri3_password_expired := 0;
dwNetError := NetUserAdd(nil, 3, ui3, nil); // <- hier kommt der RunTimeError. Was habe ich übersehen?
NetAPIBufferFree(ui3);
if IsDlgButtonChecked(hApp, IDC_CHKISADMIN) = BST_CHECKED then
dwNetError := AddToGroup('Administratoren', sUser, sComputer);
if IsDlgButtonChecked(hApp, IDC_CHKISPOWERUSER) = BST_CHECKED then
dwNetError := AddToGroup('Hauptbenutzer', sUser, sComputer);
if IsDlgButtonChecked(hApp, IDC_CHKISUSER) = BST_CHECKED then
dwNetError := AddToGroup('Benutzer', sUser, sComputer);
if IsDlgButtonChecked(hApp, IDC_CHKISGUEST) = BST_CHECKED then
dwNetError := AddToGroup('Gäste', sUser, sComputer);
if IsDlgButtonChecked(hApp, IDC_CHKISBACKUPOP) = BST_CHECKED then
dwNetError := AddToGroup('Sicherungs-Operatoren', sUser, sComputer);
if IsDlgButtonChecked(hApp, IDC_CHKISREPOP) = BST_CHECKED then
dwNetError := AddToGroup('Replikations-Operator', sUser, sComputer);
case dwNetError of
ERROR_ACCESS_DENIED : s := 'Zugriff verweigert.';
ERROR_INVALID_PARAMETER : s := 'Ungültiger Parameter.';
NERR_InvalidComputer : s := 'Ungültiger Computer';
NERR_NotPrimary : s := 'Operation darf nur auf dem Domain-Controller ausgeführt werden.';
NERR_SpeGroupOp : s := 'Operation darf nicht auf diese Gruppe angewandt werden.';
NERR_LastAdmin : s := 'Der letzte macht das Licht aus, aber nicht bei Windows. :o)'
+#13#10+'Der letzte Administrator Account kann nicht gelöscht werden';
NERR_BadPassword,
NERR_PasswordTooShort : s := 'Ungültiges Passwort';
NERR_UserNotFound : s := 'Ungültiger Benutzer.';
NERR_GroupNotFound : s := 'Gruppe nicht gefunden.';
NERR_Success : s := 'Konto erfolgreich geändert.';
end;
if dwNetError <> NERR_Success then
Messagebox(hApp, pointer(s), 'Konto ändern', MB_ICONSTOP);
end;
Wozu eigentlich das shl 1 bei GetMem?
Michael Ein Teil meines Codes würde euch verunsichern.
|