GetObject unter Vista

28/08/2009 - 17:29 von Sascha Trowitzsch | Report spam
Hi,

In einem Tool von mir brauche ich Zugriff auf HKLM, um den Showplan-Schalter
von JET zu setzen.
Deshalb ist in die Exe per Manifest die entspr. Elevation eingebaut.

Nun klappt aber darin der Aufruf auf GetObject(,"Access.Application") nicht
(429), wenn MSAccess normal gestartet wurde.
Wird Access hingegen als Administrator gestartet, dann geht's.
Umgekehrt funktioniert das GetObjekt wiederum, wenn die Elevation nicht
eingebaut ist.
Das Gleiche kann man übrigens auch unter VBA nachstellen. (word.exe als
Admin starten > VBIDE > GetObject(,"Access.Application) geht schief.)

Offenbar ist unter Vista der Zugriff auf die ROT impersonifiziert, oder wie?
Wie kann man das lösen?

(OK, ich könnte die ROT auch über IMoniker-COM-Objekte auslesen, aber so
kompliziert will ich's im Moment (noch) nicht machen...)

Gruß, Sascha
 

Lesen sie die antworten

#1 Sascha Trowitzsch
31/08/2009 - 12:35 | Warnen spam
Hi,

Sascha Trowitzsch wrote:
Hi,

In einem Tool von mir brauche ich Zugriff auf HKLM, um den
Showplan-Schalter von JET zu setzen.
Deshalb ist in die Exe per Manifest die entspr. Elevation eingebaut.

Nun klappt aber darin der Aufruf auf GetObject(,"Access.Application")
nicht (429), wenn MSAccess normal gestartet wurde.
Wird Access hingegen als Administrator gestartet, dann geht's.
Umgekehrt funktioniert das GetObjekt wiederum, wenn die Elevation
nicht eingebaut ist.
Das Gleiche kann man übrigens auch unter VBA nachstellen. (word.exe
als Admin starten > VBIDE > GetObject(,"Access.Application) geht
schief.)
Offenbar ist unter Vista der Zugriff auf die ROT impersonifiziert,
oder wie? Wie kann man das lösen?

(OK, ich könnte die ROT auch über IMoniker-COM-Objekte auslesen, aber
so kompliziert will ich's im Moment (noch) nicht machen...)




Nur, falls es jemand interessiert:
Auch über die ROT kann man auf einen COM-Server nicht zugreifen, der unter
anderer SID gestartet wurde.
EnumRunning von IRunningObjectsTable listet schlicht nicht den Server, wenn
es innerhalb eines elevated Prozesses aufgerufen wird.
Das einzige, was dazu auf MSDN zu finden war:
http://msdn.microsoft.com/en-us/library/ms679687(VS.85).aspx
Ich habe dort nicht alles so ganz verstanden - abgesehen davon, dass es wohl
nur schwer für VB6 umzusetzen ist - und finde eigentlich auch nichts, das
klar erlàutern würde, warum ein elevated Prozess nicht auf Objekte eines
Servers zugreifen kann, der unter anderer SID/ACL gestartet wurde.

Ok, COM wird ja eh in einigen Jahren ausgestorben sein... ;-)

Ciao, Sascha

Ähnliche fragen