![]() |
Nocheinmal NetJoinDomain
Hi leute,
in der Funktion NetJoinDomain gibt es einen Paramater Namens "FJoinOptions". gehe ich da richtig in der Annahme, dass es sich um Konstanten handelt? Habe ich diese Konstanten richtig definiert und zugeordnet? Die Funktion selber:
Delphi-Quellcode:
und meine Konstantendefinition:
function NetJoinDomain(const lpServer: PWChar; const lpDomain:
PWChar; const lpAccountOU: PWChar; const lpAccount: PWChar; const lpPassword: PWChar; const fJoinOptions: DWord): NET_API_STATUS; stdcall; external 'netapi32.dll';
Delphi-Quellcode:
Hier noch die Beschreibung der einzelnen Konstanten.
const
NETSETUP_JOIN_DOMAIN = 0; NETSETUP_ACCT_CREATE = 1; NETSETUP_WIN9X_UPGRADE = 2; NETSETUP_DOMAIN_JOIN_IF_JOINED = 3; NETSETUP_JOIN_UNSECURE = 4; NETSETUP_MACHINE_PWD_PASSED = 5; fJoinOptions [in] Specifies a value that contains a set of bit flags defining the join options. This parameter can be one or more of the following values. Value Meaning NETSETUP_JOIN_DOMAIN Joins the computer to a domain. If this value is not specified, joins the computer to a workgroup. NETSETUP_ACCT_CREATE Creates the account on the domain. NETSETUP_WIN9X_UPGRADE The join operation is occurring as part of an upgrade of Windows Me/98/95. NETSETUP_DOMAIN_JOIN_IF_JOINED Allows a join to a new domain even if the computer is already joined to a domain. NETSETUP_JOIN_UNSECURE Performs an unsecured join. NETSETUP_MACHINE_PWD_PASSED Indicates that the lpPassword parameter specifies a local machine account password rather than a user password. This flag is valid only for unsecured joins, which you must indicate by also setting the NETSETUP_JOIN_UNSECURE flag. If you set this flag, then after the join operation succeeds, the machine password will be set to the value of lpPassword, if that value is a valid machine password. Die weiter Frage Kann ich diesen Konstanten einfach die Werte von = 0 bis 5 zuweisen und zwar in der Reihenfolge, wie sie in der Hilfe beschrieben sind? |
Re: Nocheinmal NetJoinDomain
Moin Steppo,
die genannten Konstanten haben die Werte:
Delphi-Quellcode:
Das ein einfaches durchnummerieren nicht gehen kann kannst Du schon dem Kommentar zum Parameter entnehmen.
NETSETUP_JOIN_DOMAIN = $00000001;
NETSETUP_ACCT_CREATE = $00000002; NETSETUP_WIN9X_UPGRADE = $00000010; NETSETUP_DOMAIN_JOIN_IF_JOINED = $00000020; NETSETUP_JOIN_UNSECURE = $00000040; NETSETUP_MACHINE_PWD_PASSED = $00000080; Zum einen handelt es sich um Bitflags, zum anderen kann man mehrere kombinieren. Gerade letzteres wäre aber bei durchnummerierten nicht möglich. Beispiel, mit Deiner Aufteilung: NETSETUP_ACCT_CREATE or NETSETUP_WIN9X_UPGRADE = 3 = NETSETUP_DOMAIN_JOIN_IF_JOINED Fast immer, wenn Du die Beschreibung solcher Konstanten findest wird je Konstante nur ein Bit gesetzt sein, zumindest aber keine Überschneidung zwischen den Bits vorliegen, ausser es handelt sich um Konstanten, die selber schon eine häufige Kombination als eine Konstante zusammenfassen. Du solltest Dir mal das PSDK herunterladen (hatte ich glaub' ich letztens schon vorgeschlagen ;-)). Darin sind dann auch, bei entsprechendem Umfang des Downloads, auch die Headerdateien enthalten, denen Du solche Konstanten entnehmen kannst (in diesem Falle die LMJOIN.H) |
Re: Nocheinmal NetJoinDomain
Hi Cristian,
habe mal ein wenig in C++(auf deinen Vorschlag hin) gestöbert. Da habe ich auch endlich die Beschreibung der Konstanten gefunden, danke. Die PSDK habe ich schon runtergeladen, aber ich muß mich noch darin zurechtfinden. Danke für deine Mühe. mfg steppo p.s.: Du hast recht, durch die Möglichkeit die Parameter zu addieren, fällt das durchnummerieren flach. Ich werde es beherzigen: erst denken, dann handeln (fragen). |
Re: Nocheinmal NetJoinDomain
Moin Steppo,
das ist alles Gewöhnung. Mit der Zeit hast Du im "Gefühl" was Du wo findest. Deklarationen z.B. meist in den Headern. Zitat:
Wenn Du z.B. eine Kombikonstante nimmst, dann noch eine, die schon in dieser enthalten ist und diese addierst, erhälst Du mit Sicherheit einen völlig falschen Wert. Verknüpfst Du mit OR kann das nicht passieren. |
Re: Nocheinmal NetJoinDomain
Vielen Dank christian.
Habe das wohl falsch verstanden! Hatte auch noch einige andere Fehler. z.B. Das keine vertrauensstellung vorhanden sei. oder zu wenig informationen enthalten sind. habe das Problem aber in den Griff bekommen. Vielen Dank für deine Hilfe. Ich verstehe das ganze jedoch immer noch nicht ganz. Wenn ich "or" sage, gebe ich doch zwei Möglichkeiten zur auswahl. Es sollen aber doch beide ausgeführt werden! |
Re: Nocheinmal NetJoinDomain
Moin Steppo,
nein, mit OR werden die Werte binär verknüpft, bei + addiert. z.B. Angenommen, Du hast 4 Konstanten. Drei mit Einzelwerten, die kombiniert werden dürfen, und eine, die die ersten beiden Konstanten schon kombiniert, da diese häufig zusammen verwendet werden. K1 = 1 K2 = 2 K3 = 4 K4 = 3 (Kombinationskonstante) Jetzt nimmst Du, versehentlich K1, K2 und K4. Du willst K1 und K2 Kombinieren, hast aber nicht bedacht, oder weisst es nicht, dass K4 das schon erledigen würde Bei OR wird der Funktion dann der Wert 1 OR 2 OR 3 = 3 übergeben. Alles gut. Bei + wird dann aber 1 + 2 + 3 = 6 übergeben. Das entspräche dann K2 OR K3. Was auch immer das bedeutet, es war nicht beabsichtigt. Eine Funktion kann eine so übergebene Funktion dann so auswerten (und wird es auch so oder ähnlich tun):
Delphi-Quellcode:
Es werden also beide übergebenen Möglichkeiten erkannt.
if (Flags and K1) = K1 then // Berücksichtige Einstellung K1
if (Flags and K2) = K2 then // Berücksichtige Einstellung K2 // usw. Bei einer Addition wäre das nicht gezielt zu zerlegen. |
Re: Nocheinmal NetJoinDomain
hi Christian,
danke für die erklärung. steppo |
Re: Nocheinmal NetJoinDomain
ich bin auch gerade dabei eine möglichkeit zu finden, die workgroup/domain am lokalen rechner zu ändern.
Delphi-Quellcode:
ich habe es mit oben beschriebener funktion versucht. NET_API_STATUS wird als nicht deklariert angegeben.
function NetJoinDomain(const lpServer: PWChar; const lpDomain:
PWChar; const lpAccountOU: PWChar; const lpAccount: PWChar; const lpPassword: PWChar; const fJoinOptions: DWord): NET_API_STATUS; stdcall; external 'netapi32.dll'; habe es mal spaßeshalber durch String ersetzt. siehe da es lässt sich komplilieren. und beim aurufen mit
Delphi-Quellcode:
wird die workgroup auch tatsächlich in 'test' umgeändert. aber leider kommt eine zugriffsverletzung gleich darauf und domainmsg ist immer noch leer.
domainmsg := NetJoinDomain('test',nil,nil,nil,nil,NETSETUP_DOMAIN_JOIN_IF_JOINED);
Code:
für was steht denn dieses NET_API_STATUS und wie komm ich da dran?
access violation at 0012f7c4: write of address 0xf95be744
EDIT auweia. die fehlermeldung ist ja ein fehlercode. also integer. NET_API_STATUS durch integer ersetzt und schon gehts :) domainmsg ist nach dem setzen '0' also keine fehlermeldung. zwei fragen bleiben dann trotzdem noch: 1. was ist NET_API_STATUS und warum ist das sinnvoller als einfach nur 'Integer'? 2. wie komme ich an die fehlercodes von folgenden meldungen ran?
Code:
ERROR_INVALID_PARAMETER A parameter is incorrect.
ERROR_NO_SUCH_DOMAIN The specified domain did not exist. NERR_SetupAlreadyJoined The computer is already joined to a domain. NERR_InvalidWorkgroupName The specified workgroup name is not valid. |
Re: Nocheinmal NetJoinDomain
Moin CodeX,
die Deklarationen kannst Du in den Header Dateien des PSDK finden (Download bei MS, in vollem Umfang ca. 350MB)
Delphi-Quellcode:
const
// aus LMErr.h NERR_BASE = 2100; NERR_SetupAlreadyJoined = (NERR_BASE+591); NERR_InvalidWorkgroupName = (NERR_BASE+595); // aus WinError.h ERROR_NO_SUCH_DOMAIN = 1355; ERROR_INVALID_PARAMETER = 87; type // aus LMCons.h NET_API_STATUS = DWORD; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 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