Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Benutzer einer Gruppe zu ordnen (https://www.delphipraxis.net/2527-benutzer-einer-gruppe-zu-ordnen.html)

Hansa 29. Jan 2003 00:36

Zitat:

Zitat von Hansa
Geh der Spur mal nach.

Damit meinte ich MICH ! Ich geh der Spur nach. Das ist ein dubioser Fehler. Irgendwo in meinen Quelltexten ist darauf ein Hinweis drin. Den suche ich, aber erst morgen :angle:

Gruß
Hansa

Luckie 29. Jan 2003 00:42

Achso. Na dan mal los. Aber ich denke nicht, dass die Fehler die gleiche Ursache haben.

Hansa 29. Jan 2003 00:57

Zitat:

Zitat von Luckie
...Aber ich denke nicht, dass die Fehler die gleiche Ursache haben.

Ja, glaube ich auch. Aber das ist ein ätzender Fehler. Lese hier:

http://www.nl.freepascal.org/lists/f...ry/002758.html

Wenn ich mein Gedächtnis bemühe : ab 500 MHz gabs Ärger. Dann kam dieser Fehler. Irgendwo mußte integer (16Bit) auf 32 Bit umgestellt werden. Dann gings.

Gruß
Hansa

Luckie 29. Jan 2003 01:00

Nein, daran liegt es wohl nicht. ich vermute eher, dass ich mit dem Speicher Mist baue.

Hansa 29. Jan 2003 01:07

Ja,

irgend so eine Scheiße ist das da. Absolut unsinniger und unnötiger Mist !

Gruß
Hansa

P.S.: wie gesagt, gucke morge mal nach.

Luckie 29. Jan 2003 04:16

Irgendwie glaube ich, dass ich mich im Kreise drehe. Ich bin, glaube ich, wieder bei der Ursprungsversion angekommen:
Delphi-Quellcode:
procedure AddUserProc(sComputer: String);
var
  ui3        : Pointer; // USER_INFO_3; //
  szBuffer  : array[0..255] of Char;
  s, sUser  : String;
  dwNetError : NET_API_STATUS;
begin
  Sender := VOID;
  GetMem(ui3, sizeof(USER_INFO_3));
  try
    GetDlgItemText(hApp, IDC_EDTNAME, szBuffer, sizeof(szBuffer));
    sUser := s;
    s := String(szBuffer);
    PUSERINFO3(ui3)^.usri3_name := PWideChar(WideString(s));
    GetDlgItemText(hApp, IDC_EDTDESCRIPTION, szBuffer, sizeof(szBuffer));
    s := String(szBuffer);
    PUSERINFO3(ui3)^.usri3_comment := PWideChar(WideString(s));
    GetDlgItemText(hApp, IDC_EDTFULLNAME, szBuffer, sizeof(szBuffer));
    s := String(szBuffer);
    PUSERINFO3(ui3)^.usri3_full_name := PWideChar(WideString(s));
    GetDlgItemText(hApp, IDC_EDTHOMEDIR, szBuffer, sizeof(szBuffer));
    s := String(szBuffer);
    PUSERINFO3(ui3)^.usri3_home_dir := PWideChar(WideString(s));

    PUSERINFO3(ui3)^.usri3_flags := 0;
    if IsDlgButtonChecked(hApp, IDC_CHKCANTCHNGPW) = BST_CHECKED then
      PUSERINFO3(ui3)^.usri3_flags := PUSERINFO3(ui3)^.usri3_flags or UF_PASSWD_CANT_CHANGE
    else
      PUSERINFO3(ui3)^.usri3_flags := PUSERINFO3(ui3)^.usri3_flags and not UF_PASSWD_CANT_CHANGE;
    if IsDlgButtonChecked(hApp, IDC_CHKDISABLED) = BST_CHECKED then
      PUSERINFO3(ui3)^.usri3_flags := PUSERINFO3(ui3)^.usri3_flags or UF_ACCOUNTDISABLE
    else
      PUSERINFO3(ui3)^.usri3_flags := PUSERINFO3(ui3)^.usri3_flags and not UF_ACCOUNTDISABLE;
    if IsDlgButtonChecked(hApp, IDC_CHKDONTEXPIRE) = BST_CHECKED then
      PUSERINFO3(ui3)^.usri3_flags := PUSERINFO3(ui3)^.usri3_flags or UF_DONT_EXPIRE_PASSWD
    else
      PUSERINFO3(ui3)^.usri3_flags := PUSERINFO3(ui3)^.usri3_flags and not UF_DONT_EXPIRE_PASSWD;
    if IsDlgButtonChecked(hApp, IDC_CHKLOCKED) = BST_CHECKED then
      PUSERINFO3(ui3)^.usri3_flags := PUSERINFO3(ui3)^.usri3_flags or UF_LOCKOUT
    else
      PUSERINFO3(ui3)^.usri3_flags := PUSERINFO3(ui3)^.usri3_flags and not UF_LOCKOUT;
    if IsDlgButtonChecked(hApp, IDC_CHKMUSTCHNGPW) = BST_CHECKED then
      PUSERINFO3(ui3)^.usri3_password_expired := 1
    else
      PUSERINFO3(ui3)^.usri3_password_expired := 0;

    dwNetError := NetUserAdd(nil, 3, ui3, nil); //  hier steigt er mit dem RuntimeError 216 aus
  finally
    FreeMem(ui3, sizeof(USER_INFO_3));
  end;

  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);

  if dwNetError <> NERR_Success then
    DisplayNetError(dwNetError);
end;
Mit dem Erfolg, dass der RuntimeError immer noch nicht weg ist. :cry:

Irgendwelche Vorschläge, Ideen? :?

Christian Seehase 29. Jan 2003 13:07

Moin Luckie,

ich hab' das mal versucht auch zu machen. Bei mir sieht's dann so aus:

Delphi-Quellcode:
const // aus Winnt.h
  DOMAIN_GROUP_RID_USERS = $00000201;

var
  rUI     : USER_INFO_3;
  dwResult : NET_API_STATUS;

begin
  FillChar(rUI,SizeOf(USER_INFO_3),0);
  rUI.usri3_name            := 'testuser2';
  rUI.usri3_password        := '';
  rUI.usri3_comment         := 'Neuer Testuser';
  rUI.usri3_flags           := UF_NORMAL_ACCOUNT;
  rUI.usri3_max_storage     := USER_MAXSTORAGE_UNLIMITED;
  rUI.usri3_primary_group_id := DOMAIN_GROUP_RID_USERS;
  dwResult := NetUserAdd(nil,3,@rUI,nil);
  if dwResult <> NERR_SUCCESS then
  begin
    ShowMessage(SysErrorMessage(dwResult));
  end;
end;
So geht's, auch kein Runtime Error.

Was mir allerdings auffällt:

Du weist ganz zu Anfang der lokalen Variablen sUser die lokale Variable s zu. Beide sind zu diesem Zeitpunkt allerdings noch nicht initialisiert. Das könnte nach NetUserAdd doch zu Problemen führen.

Luckie 29. Jan 2003 13:58

*luckie der vor freude aus dem schreibtsichstuhl springt und vor glückseeligkeit im zimmer rumhüpft*

:bouncing4: :firejump: :bounce1: :bounce2: :hello:

*luckie der außeratem zum schreibtischstuhl zurückkehrt und christian um den hals fällt*

:P :hello: :witch: :stupid:

Christian Seehase 29. Jan 2003 15:19

Moin Luckie,

freut mich ja, wenn ich Dir helfen konnte, aber was war's denn nun.

BTW:
Und pass auf meinen Arm auf ;-)

Luckie 29. Jan 2003 15:23

Gute Frage. Auf alle Fälle ging es dann ohne Runtime Error. was auch wichtig war ist das: DOMAIN_GROUP_RID_USERS = $00000201; ohne das legt er den Benutzer nicht an.

Deinen Arm? Was ist mit dem?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz