![]() |
JEDI API für Delphi XE2
Guten Morgen
ich habe soeben Delphi XE2 gekauft weil ich schon seit langem einen Dienst, der mit einem Treiber kommuniziert, auch in einer 64-Bit-Version haben sollte. Nach einigen Mühen habe ich sogar geschafft, auch die JEDI-JCL/JVCL-Komponenten zu installieren. Nun stehe ich aber mit dem JEDI-API (aktuelle Version von SourceForgeNet) an. Ich bekomme beim Compile zuerst eine Fehlermeldung JwsclLsa.pas(111): E2010 Inkompatible Typen: 'Cardinal' und 'NativeUInt' (Zeile 111, property LsaHandle: Cardinal Read fLsaHandle; ) Wenn ich hingehe und einfach mal probehalber das 'Cardinal' in 'Handle' ändere, läuft mir Kompilation weiter bis zum Fehler JwsclLsa.pas(481): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen Auch da wieder führt ein probehalbes Ändern von hToken: TJwTokenHandle; zu hToken : Handle; scheinbar zu Erfolg. Doch dann steht die Umwandlung auf JwslToken.pas an, vermutlich als Folgefehler meiner 'Anpassungen' in JwsclLsa.pas. Der Fehler ist dann folgender: JwsclToken.pas(3195): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen Derselbe Fehler wiederholt sich auf Zeilen 3256, 3298, 3452, 3454, 3461, 3501, 3502, 3509, 3628, 3691 und 3735. Da habe ich dann meine Versuche abgebrochen. Nun meine Fragen: - hat es jemand gescchafft, die JEDI-API auf Delphi-XE2 zu installieren? - wenn nein, weiss jemand, wann man mit einer kompatiblen Version rechnen kann? - Gibt es etwas anderes 'gescheites' um aus einem Service eine Desktop-Applikation als System-User zu pushen, so dass diese auf jeden möglichen Desktop angezeigt wird. Falls das jemand interessiert, hier die Funktion, welche auf W-XP oder W-7 auf 32-Bit-Maschinen perfekt funktioniert. Besten Dank für Eure Antworten
Code:
{Starter of Notify program}
procedure TAMNotifier1.StartApp(const App, Parameters, CurDir : TJwString); var pi : PROCESS_INFORMATION; si : STARTUPINFO; dwSessionId : DWORD; winlogonPid : DWORD; hUserToken : THANDLE; hUserTokenDup : THANDLE; hPToken : THANDLE; hProcess : THANDLE; hsnap : THANDLE; dwCreationFlags : DWORD; procEntry : TPROCESSENTRY32; winlogonSessId : DWORD; tp : TOKEN_PRIVILEGES; lpenv : pointer; err : boolean; pCurDir : TJwPChar; pCmdLine : TJwPChar; begin pCmdLine := TJwPChar('"'+App+'" ' + Parameters); pCurDir := Nil; if Length(CurDir) > 0 then pCurDir := TJwPChar(CurDir); dwSessionId := WTSGetActiveConsoleSessionId(); hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnap = INVALID_HANDLE_VALUE) then exit; procEntry.dwSize := sizeof(TPROCESSENTRY32); repeat if (comparetext(procEntry.szExeFile, 'winlogon.exe') = 0) then begin winlogonSessId := 0; if (ProcessIdToSessionId(procEntry.th32ProcessID, winlogonSessId) and (winlogonSessId = dwSessionId)) then begin winlogonPid := procEntry.th32ProcessID; break; end; end; until (not Process32Next(hSnap, procEntry)); WTSQueryUserToken(dwSessionId, hUserToken); dwCreationFlags := NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE; ZeroMemory(@si, sizeof(STARTUPINFO)); si.cb := sizeof(STARTUPINFO); si.lpDesktop := 'winsta0\Winlogon'; ZeroMemory(@pi, sizeof(pi)); hProcess := OpenProcess(MAXIMUM_ALLOWED,FALSE,winlogonPid); if(not OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY or TOKEN_DUPLICATE or TOKEN_ASSIGN_PRIMARY or TOKEN_ADJUST_SESSIONID or TOKEN_READ or TOKEN_WRITE, hPToken)) then Err := True; if (not LookupPrivilegeValue(nil,SE_DEBUG_NAME,tp.Privileges[0].Luid)) then Err := True; tp.PrivilegeCount := 1; tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; DuplicateTokenEx(hPToken,MAXIMUM_ALLOWED,Nil, SecurityIdentification,TokenPrimary,hUserTokenDup); SetTokenInformation(hUserTokenDup, TokenSessionId,pointer(dwSessionId),sizeof(DWORD)); if (not AdjustTokenPrivileges(hUserTokenDup,FALSE,@tp,sizeof(TOKEN_PRIVILEGES), nil,nil)) then Err := True; if (GetLastError() = ERROR_NOT_ALL_ASSIGNED) then Err := True; lpEnv := nil; if(CreateEnvironmentBlock(lpEnv,hUserTokenDup,TRUE)) then dwCreationFlags := dwCreationFlags or CREATE_UNICODE_ENVIRONMENT else lpEnv := nil; CreateProcessAsUser(hUserTokenDup,TJwPChar(App), pCmdLine, nil, nil, FALSE, dwCreationFlags, lpEnv, pCurDir, si, pi ); CloseHandle(hProcess); CloseHandle(hUserToken); CloseHandle(hUserTokenDup); CloseHandle(hPToken); end; |
AW: JEDI API für Delphi XE2
Same problem here... :)
|
AW: JEDI API für Delphi XE2
geht auch bei mir nicht :cry:
gibts da schon was neues ?? kuba |
AW: JEDI API für Delphi XE2
Also die Jedi-Windows-API aus dem SVN-Trunk lässt sich unter XE2 kompilieren.
Die Jedi-Security-Lib hat sich imho bisher noch keiner zur Brust genommen. Das könnte sich ändern, sobald mein XE2 auf Arbeit eintrifft. |
AW: JEDI API für Delphi XE2
aber bei 64 Bit stolpert der Compiler über Assembler Code...
[DCC Fehler] JwaWinNT.pas(9651): E1025 Sprach-Feature wird nicht unterstützt: 'ASM' kuba |
AW: JEDI API für Delphi XE2
Hast Du den Compilerschalter DYNAMIC_LINK definiert?
Wenn ja, nehm den mal raus. |
AW: JEDI API für Delphi XE2
Zitat:
|
AW: JEDI API für Delphi XE2
Hallo,
den Compilerschalter DYNAMIC_LINK kann ich nirgends in den Projektoptionen finden. Den SVN-trunk habe ich mir ![]() Meine Pfade (64-Bit): C:\jedi-apilib\jwapi\branches\2.3\Win32API\jwaWindows; C:\jedi-apilib\jwapi\branches\2.3\Win32API; C:\jedi-apilib\jwapi\branches\2.3\Packages; C:\jedi-apilib\jwapi\branches\2.3\Common; C:\jedi-apilib\jwapi\branches\2.3\Includes; Habe auch diese ausprobiert: C:\jedi-apilib\jwapi\trunk\Win32API\jwaWindows; C:\jedi-apilib\jwapi\trunk\Win32API; C:\jedi-apilib\jwapi\trunk\Packages; C:\jedi-apilib\jwapi\trunk\Common; C:\jedi-apilib\jwapi\trunk\Includes; In der JediAPILib.inc habe ich folgende Zeile geändert (ging sonst gar nicht): {$I ..\includes\jproject\jedi.inc} geändert in: {$I jedi.inc} Was läuft falsch ?? kuba |
AW: JEDI API für Delphi XE2
Hmmm .. also wenn, dann kann es nur mit dem 2. Pack an Pfaden funktionieren.
Leider hab ich im Moment kein XE2 zur Hand. Sobald ich es aber habe, werd ich mich mit deinem Problem befassen. |
AW: JEDI API für Delphi XE2
im trunk fehlt die Jedi.inc komplett.
kuba |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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 by Thomas Breitkreuz