Board index » delphi » Can anyone explain this ?

Can anyone explain this ?

If I call the following code in a normal windows exe this code executes
without raising an exception. However if I call this code in a COM class
that is used as a SOAP server I receive the following access violation:

"Access violation at address 77F83941 in module 'ntdll.dll'. Write of
address 00000010"

Note: the exec method returns an integer value, and the method only raises
the access violation if the return value is < 0. The anonymous access user
for the IIS virtual directory where the SOAP dll resides is set to a
specific domain username, and thus is different to the user that the exe
runs under, however both are normal windows accounts.

var
  pathwayObject: OLEVariant;
begin
  pathwayObject:= CreateOLEObject('ePathway.CertificateSearch');
  pathwayObject.exec(xmlRequest,Result);
end;

tia andrew

 

Re:Can anyone explain this ?


An access violation inside ntdll is never good.
It looks like you have a nil-pointer that you try to write to.
Check your ICertificateSearchDisp object and find out what dispid is 10.
If this is a read-write property then maybe this can give you a clue.
On second thought, since the exception is inside ntdll, then the nil-pointer
must originate from inside ntdll.
Do your ICertificateSearch uses any automation objects that live inside
ntdll?
I get the exact same message when I forget to instantiate my
xmldomdocuments, but then the module is of course msxml2.dll insted of
ntdll.dll.

'Hans Olav.

Quote
"andrew" <and...@there.com> wrote in message news:3c882d2a_1@dnews...
> If I call the following code in a normal windows exe this code executes
> without raising an exception. However if I call this code in a COM class
> that is used as a SOAP server I receive the following access violation:

> "Access violation at address 77F83941 in module 'ntdll.dll'. Write of
> address 00000010"

> Note: the exec method returns an integer value, and the method only raises
> the access violation if the return value is < 0. The anonymous access user
> for the IIS virtual directory where the SOAP dll resides is set to a
> specific domain username, and thus is different to the user that the exe
> runs under, however both are normal windows accounts.

> var
>   pathwayObject: OLEVariant;
> begin
>   pathwayObject:= CreateOLEObject('ePathway.CertificateSearch');
>   pathwayObject.exec(xmlRequest,Result);
> end;

> tia andrew

Re:Can anyone explain this ?


Quote
"Hans Olav" <n...@none.no> wrote in message news:3c8949c7$2_1@dnews...
> An access violation inside ntdll is never good.

You've got that right :)

Quote
> On second thought, since the exception is inside ntdll, then the
nil-pointer
> must originate from inside ntdll.
> Do your ICertificateSearch uses any automation objects that live inside
> ntdll?

ICertificateSearch is an automation object written in Uniface. It accepts an
xml message as an input parameter, and when the xml contained in the message
has invalid values (eg an invalid username etc) it would send an email via
MAPI to a nominated person. When I changed the IUSR_machineName user to a
user account that was an administrator of the local machine everything works
okay. I'm guess it has something to do with the registry access for a non
administrative user, however running the IUSR_machineName as an
administrative user isn't *so* bad because I know the webserver isn't
accessible to the internet

ta andrew

Other Threads