Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi lpEnvironment-Parameter bei CreateProcessWithLogonW (https://www.delphipraxis.net/50750-lpenvironment-parameter-bei-createprocesswithlogonw.html)

ringli 30. Jul 2005 23:44


lpEnvironment-Parameter bei CreateProcessWithLogonW
 
Ich hoffe das ich meine Frage im richtigen Bereich gepostet habe. :gruebel:

Jedenfalls habe ich da mal eine Frage zu CreateProcessWithLogonW.

Delphi-Quellcode:
function CreateProcessWithLogonW(lpUsername, lpDomain, lpPassword: LPCWSTR;
  dwLogonFlags: DWORD; lpApplicationName: LPCWSTR; lpCommandLine: LPWSTR;
  dwCreationFlags: DWORD; lpEnvironment: LPVOID; lpCurrentDirectory: LPCWSTR;
  const lpStartupInfo: STARTUPINFOW; var lpProcessInformation: PROCESS_INFORMATION): BOOL; stdcall;
Und zwar gibt es da ja den Parameter lpEnvironment. Meine Vermutung geht dahin das ich damit beim Start eines Prozesses ein bestimmtes Profil bzw. eine bestimmte Umgebung vorgeben kann. Leider habe ich bis jetzt noch nichts brauchbares gefunden wie ich diesen Parameter verwenden oder gar ermitteln kann.

Kann mir da jemand mal ein bisschen Hilfestellung zur Verwendung & Ermittlung dieses Parameters geben?

Daniel G 31. Jul 2005 00:09

Re: lpEnvironment-Parameter bei CreateProcessWithLogonW
 
Das PSDK, dein Freund und Helfer :thumb:

Zitat:

Zitat von Das PSDK
lpEnvironment
[in] Pointer to an environment block for the new process. If this parameter is NULL, the new process uses the environment of the specified user instead of the environment of the calling process.
An environment block consists of a null-terminated block of null-terminated strings. Each string is in the form:

name=value

Because the equal sign is used as a separator, it must not be used in the name of an environment variable.

An environment block can contain Unicode or ANSI characters. If the environment block pointed to by lpEnvironment contains Unicode characters, be sure that dwCreationFlags includes CREATE_UNICODE_ENVIRONMENT.

Note that an ANSI environment block is terminated by two zero bytes: one for the last string, one more to terminate the block. A Unicode environment block is terminated by four zero bytes: two for the last string, two more to terminate the block.

To retrieve a copy of the environment block for a given user, use the CreateEnvironmentBlock function.

Und dann brauchst du das:

MSDN-Library durchsuchenCreateEnvironmentBlock

ringli 31. Jul 2005 00:15

Re: lpEnvironment-Parameter bei CreateProcessWithLogonW
 
Danke Daniel, das hatte ich in der OH auch schon gelesen. Das Problem ist das ich nicht so wirklich weiss wie ich das verarbeiten kann (absolut miserable Englischkenntnisse), zumal ich mit Pointern sowieso auf Kriegsfuss stehe. :-(

Daniel G 31. Jul 2005 12:33

Re: lpEnvironment-Parameter bei CreateProcessWithLogonW
 
Ah, ok. Ich friemel mal im Laufe des Tages was für dich zusammen.

ringli 31. Jul 2005 12:45

Re: lpEnvironment-Parameter bei CreateProcessWithLogonW
 
Das wäre wirklich super. Vielen Dank. :-)

Daniel G 31. Jul 2005 23:23

Re: lpEnvironment-Parameter bei CreateProcessWithLogonW
 
Liste der Anhänge anzeigen (Anzahl: 1)
So... Hab's endlich geschafft. Rein von der Syntax her ist es völlig in Ordnung. Obs auch tatsächlich funktioniert, konnte ich natürlich nicht testen. Wenn du Fragen hast, einfach Posten.

:party:

ringli 1. Aug 2005 06:42

Re: lpEnvironment-Parameter bei CreateProcessWithLogonW
 
Vielen Dank für deine Mühe :-D das Problem war die Verwendung des lpEnvironment-Parameters wenn er nicht auf nil gesetzt wird.

Hast du da vielleicht auch noch eine Idee?

Olli 1. Aug 2005 10:07

Re: lpEnvironment-Parameter bei CreateProcessWithLogonW
 
Wo liegt denn dein Problem? Entweder du benutzt AnsiString oder du benutzt WideString. Bei WideString mußt du CREATE_UNICODE_ENVIRONMENT bei den Flags setzen.

Dann setzt du deine Variablen zB so wie du willst:
Delphi-Quellcode:
var s : WideString;
// ^--- kann auch AnsiString sein, der Code bleibt gleich!
// Bis auf CREATE_UNICODE_ENVIRONMENT natürlich ;)
begin
  s := 'PATH=C:\Programme';
  s := s + #0; // Aktuelle Variable abschließen
  // Nächste Variable
  s := s + 'BLA=BLUBB';
  s := s + #0; // Aktuelle Variable abschließen
  // Zuguterletzt den Block abschließen ...
  s := s + #0;
end;
Wichtig, am Ende muß immer 2mal #0 stehen!!!

Hoppala, das wichtigste vergessen: Danach übergibst du auf diesen String einen Pointer (genauergesagt auf das erste Zeichen!)
Delphi-Quellcode:
lpEnvironment := Pointer(@s[1]);
vermutlich geht auch
Delphi-Quellcode:
lpEnvironment := @s[1];
(also ohne Pointer-Typecast)

Noch'n Nachtrag: Wenn du eine Kopie eines anderen Environment Blocks machen willst, benutzt du, wie oben schon gesagt, MSDN-Library durchsuchenCreateEnvironmentBlock()!

EDIT4: Sorry, hatte einen Bug, natürlich werden die nächsten Variablen an den String angehangen ;)

ringli 1. Aug 2005 18:49

Re: lpEnvironment-Parameter bei CreateProcessWithLogonW
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe jetzt mal versucht es mit CreateEnvironmentBlock hinzubekommen. Leider erhalte ich beim Versuch die Anwendung zu starten lauter Zugriffsverletzungen. Ich habe das Testprojekt mal angehangen, vielleicht kann mir jemand sagen was ich da falsch mache :gruebel:

marabu 1. Aug 2005 21:03

Re: lpEnvironment-Parameter bei CreateProcessWithLogonW
 
Versuche doch erst einmal CreateProcessWithLogonW() überhaupt zum Laufen zu bringen. Achte dabei auf den Typ der Parameter und verwende wo es geht defaults. Wenn der Code dann läuft, dann können wir über deine Vorstellungen zum Environment diskutieren. Ich glaube nämlich nicht, dass der Basiscode schon funktioniert.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.
Seite 1 von 2  1 2      

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