RunningObjectTable problem

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Hi,

I am using COM with RunningObjectTable, take in mind the following points:

1. I have a server that runs as a service this service register an object in
ROT, the object should be accesible to usermode applications
2. I have a user mode application trying to get the interface pointer to the
objsect registered by thye service in ROT

spROT->GetObjectW failes with 0x800401e3 on the user mode application

when running my server as an application ( and not as a service ) the
interface is retrieved successfully.

Enumerating all the ROT objects by the app didn’t show the object registered
by the service.

It seems as if there is a different context per desktop ( such as with named
kernel objects ), is there any special namespace I cane use ( such as
‘Global’ ) that will enable a non service app to resolve objects registered
by a service?

Why does this happen? Why objects registered in ROT by a service are not
accessible to non service applications?

Any help would be appreciated.
 
Nadav said:
Hi,

I am using COM with RunningObjectTable, take in mind the following points:

1. I have a server that runs as a service this service register an object in
ROT, the object should be accesible to usermode applications
2. I have a user mode application trying to get the interface pointer to the
objsect registered by thye service in ROT

spROT->GetObjectW failes with 0x800401e3 on the user mode application

when running my server as an application ( and not as a service ) the
interface is retrieved successfully.

Enumerating all the ROT objects by the app didn’t show the object registered
by the service.

It seems as if there is a different context per desktop ( such as with named
kernel objects ), is there any special namespace I cane use ( such as
‘Global’ ) that will enable a non service app to resolve objects registered
by a service?

Why does this happen? Why objects registered in ROT by a service are not
accessible to non service applications?

Any help would be appreciated.



Have you register the object with the ROTFLAGS_ALLOWANYCLIENT flag set?

Willy.
 
Hi Willy,

Thanks for your immediate response, I have tried to use
ROTFLAGS_ALLOWANYCLIENT, this results: 0x80004015 The class is configured to
run as a security id different from the caller

Some background:
My "server" is an AtlComModule DLL loaded by snmp.exe on the entry point (
SnmpExtensionInit ) a specialized thread is created, this thread instentiate
the COM object and register it on the ROT, when using ROTFLAGS_ALLOWANYCLIENT
I get the error described above.

How can I resolve this problem ( 0x80004015 )how can I configure the class
security id? is there any COM specific configuration I should do ?
 
Read the documentation carefully:

http://msdn2.microsoft.com/en-us/library/ms680747.aspx

In particular:

"A server registered as either LocalService or RunAs can set the
ROTFLAGS_ALLOWANYCLIENT flag in its call to Register to allow any client to
connect to it. A server setting this bit must have its executable name in
the AppID section of the registry that refers to the AppID for the
executable."

HTH,

Brian

By the way, please don't multipost like this. It is considered bad
netiquette. You should be crossposting instead.
 
Hi Brian,

Thanks for your response, I have added the following:
HKCR
{
...
...
NoRemove AppID
{
ForceRemove 'ROTTester.DLL'
{
val AppId = s '%APPID%'
}
ForceRemove '%APPID%'
{
val RunAs = s 'Interactive User'
}
}
}

Unfortunetly, it didn't help I still get 0x80004015

Additional background:
1. I am writing an SNMP Extension Agent
2. The extension agent expose SNMP API and enclose a CAtlDllModule
3. During SNMP initialization ( SnmpExtensionInit ) I create the COM object
( implemented by the DLL ) and try to register it in ROT using
ROTFLAGS_ALLOWANYCLIENT, this returns 0x80004015

Taking the above in mind giving special attention to the fact that my DLL is
registered as a SnmpExtension DLL and is loaded by snmp.exe, is it somehow
possible to have an inproc COM object registered in ROT with
ROTFLAGS_ALLOWANYCLIENT ?

Any help would be appreciated
 
IMHO you haven't followed instructions. You must use an executable to
register the COM object in the ROT, and the executable must outlive the
registration period. A DLL is not an executable.

Unfortunately, I know nothing about SNMP extensions, but I reckon the AppID
must be the name of the SNMP service.

This is admittedly on the fringe of my expertise but hopefully this will be
of some help.

Brian
 
IMHO you haven't followed instructions. You must use an executable to
register the COM object in the ROT, and the executable must outlive the
registration period. A DLL is not an executable.

Unfortunately, I know nothing about SNMP extensions, but I reckon the AppID
must be the name of the SNMP service.

This is admittedly on the fringe of my expertise but hopefully this will be
of some help.

Brian
 
Hi Brian,

Thanks for your help, unfortunetly, my application must be implemneted as a
DLL and not as EXEcutable, creating an AppId ( that reference the COM DLL )
for snmp.exe doesn't help...
 
Time to explore alternatives. What about splitting your code
into a COM service and your original SNMP extension DLL
talking to it?

--
=====================================
Alexander Nickolov
Microsoft MVP [VC], MCSD
email: (e-mail address removed)
MVP VC FAQ: http://vcfaq.mvps.org
=====================================
 
Back
Top