![]() |
Zitat:
Gruß Hansa |
Achso. Na dan mal los. Aber ich denke nicht, dass die Fehler die gleiche Ursache haben.
|
Zitat:
![]() 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 |
Nein, daran liegt es wohl nicht. ich vermute eher, dass ich mit dem Speicher Mist baue.
|
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. |
Irgendwie glaube ich, dass ich mich im Kreise drehe. Ich bin, glaube ich, wieder bei der Ursprungsversion angekommen:
Delphi-Quellcode:
Mit dem Erfolg, dass der RuntimeError immer noch nicht weg ist. :cry:
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; Irgendwelche Vorschläge, Ideen? :? |
Moin Luckie,
ich hab' das mal versucht auch zu machen. Bei mir sieht's dann so aus:
Delphi-Quellcode:
So geht's, auch kein Runtime Error.
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; 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 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: |
Moin Luckie,
freut mich ja, wenn ich Dir helfen konnte, aber was war's denn nun. BTW: Und pass auf meinen Arm auf ;-) |
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. |
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