Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#14
  Alt 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.
  Mit Zitat antworten Zitat