Community
cancel
Showing results for 
Search instead for 
Did you mean: 
vzvezda
Beginner
96 Views

Access violation exception in imrsdk.dll

I am experiencing some problems with imrsdk.dll when my program crashed with access violation exception inside imrsdk.dll. According to the call stack in the debugger the access violation exception happened not inside the program thread but inside some other thread (looks like in an internal imrsdk.dll thread).

Problem can be reproduced when
IMR_SOLOpenTCPSession returns IMR_RES_AUTH_FAILED. Sometimes after having this error returned, application crashed.

I made a test application from the
RedirectionConfig SDK Sample which does the following:
  • Enables redirection listener using correct digest username and password
  • Initialize imrsdk.dll and create client
  • Calls IMR_SOLOpenTCPSession 10 times with some fake username and passwords expecting IMR_RES_AUTH_FAILED. There is a sleep 2 sec. between attempts.
  • After some IMR_SOLOpenTCPSession the application can crash in an imrsdk.dll thread.
Problem does not occur always, sometimes I have to launch test application several times to get access violation error and sometimes there is "Pure Virtual Function call" message box shown instead of access violation error.

It seems that problem can be reproduced on different environments:
  • AMT 2.0/2.5
  • Enterprise Mode without TLS . With TLS problem is not reproduced using the test application, but still can be reproduced in my main program.
  • Windows Vista x64, x86/Windows 2003 SP1 x86
  • Different version of imrsdk.dll (3.0.2, 3.0 148862, 3.0 Gold, 2.1)
Not reproduced when:
  • Test application works fine with AMT in Small Business mode.
  • Problem does not occur if "Kerberos Only" authentication is selected in BIOS for SOL/IDER.

0 Kudos
8 Replies
96 Views

Hi,

Whichfunction are you usinghere? Which version of SDK?

Thanks,

Sree

vzvezda
Beginner
96 Views

I am using SDK 3.0.2, but I have also tried it with different versions of imrsdk.dll. The function is IMR_SOLOpenTCPSession. Problem reproduced only when IMR_SOLOpenTCPSession returns IMR_RES_AUTH_FAILED.

The simplified test app is below.
 bool status = SetListenerState(soap, true, false, verbose); // enable listener 
 IMRVersion version;
IMR_Init(&version, ".RedirectionConfig.ini");
 IMR_RemoveAllClients();
 IMR_AddClient(
 tls ? CLI_TLS : CLI_TCP,
 host, 
 NULL,
 &client_id);

TCPSessionParams params;

// !! use a fake user to get the IMR_RES_AUTH_FAILED error.
 strcpy(params.user_name, "fakeuser");
 strcpy(params.user_pswd, "FakePassword1!");

for (int i = 0; i < 10; i ++)
 {
// !! access violation after this statement, but in another thread
 res = IMR_SOLOpenTCPSession(client_id, &params, NULL, NULL); 

if (res == IMR_RES_AUTH_FAILED)
 {
 printf("IMR_RES_AUTH_FAILED (expected)
");
 }
 int pause_ms = 2000; 
 Sleep(pause_ms);
 }

res = IMR_RemoveClient(client_id);
 res = IMR_Close();

Gael_H_Intel
Moderator
96 Views

Thank you for providing so many details! We have forwarded your question to the SDK folks and will let you know as soon as we get a response (or a request for more information.)
Gael_H_Intel
Moderator
96 Views

Hi and sorry for the delay-

Our SDK Development team has tried to reproduce the problem with the same code that you provided: open SOL in loop with wrong Authentication. They could not reproduce the issue.Theywere usingimrsdk.dll from SDK 3.0 (3.0 148862) with Santa Rosa without TLS (as you did). They even tried it with the newest DLL not yet ready for pubic download - still couldn't reprodude it.

Do you have another thread running that may be interfering with your AMT code? Do you have any more information you can send?

vzvezda
Beginner
96 Views

In the main application there are several threads than can interfere and the exception reproduced more frequently. In the test application there might be some threads started by gSOAP, but there are no own threads started. The test application is basically the RedirectionConfig sample from SDK updated. I can send the source codes of the test application.

As I wrote the problem is not reproduced when the TLS is enabled, when the AMT is in Small Business mode or has the "Kerberos only" option set. So probably the most frequently the error happened with the following settings:
* AMT 2.0/2.5
* Enterprise Mode
* TLS disabled
* "User and password" option is enabled for SOL/IDER sessions in the BIOS

For me it looks like a rare race condition so it might be not very easy to reproduce. I run the test on another PC (Win 2003 Server) right now and it took about 10-12 runs to reproduce the problem. On my PC (Vista) it reproduced very often. I have only debug symbols for ntdll.dll on the PC, so when the call stack in the debugger some times looks like that:
	imrsdk.dll!014377ae() 	
[Frames below may be incorrect and/or missing, no symbols loaded for imrsdk.dll]
imrsdk.dll!01407b88()
imrsdk.dll!0142c607()
ntdll.dll!_RtlImageNtHeaderEx@20() + 0x9d bytes
ntdll.dll!_RtlImageNtHeader@4() + 0x1b bytes
ntdll.dll!_RtlImageNtHeaderEx@20() + 0x9d bytes
0341f794()
ntdll.dll!_bsearch() + 0x63 bytes
ntdll.dll!_ARRAY_FITS@16() + 0x29 bytes
ntdll.dll!_RtlpLocateActivationContextSection@20() + 0xd8 bytes
c0150008()
ntdll.dll!_RtlFindNextActivationContextSection@16() + 0x5a bytes
ntdll.dll!_RtlFindActivationContextSectionString@20() + 0xdd bytes
ntdll.dll!_WinSqmAddToStream@16() - 0x466c9 bytes
ntdll.dll!__except_list() - 0x45d40 bytes
ntdll.dll!77943157()

Without the symbols the stack looks much more longer:
imrsdk.dll!00bc77ae()
[Frames below may be incorrect and/or missing, no symbols loaded for imrsdk.dll]
// [...] a lot of other calls here, removed.
ntdll.dll!7c82f9dd()
imrsdk.dll!00c3bf11()
imrsdk.dll!00c3bf16()
imrsdk.dll!00bbc28f()
imrsdk.dll!00c3ab2d()
imrsdk.dll!00c3a9a9()
imrsdk.dll!00c3e926()
kernel32.dll!77e66063()

Gael_H_Intel
Moderator
96 Views

Hi,
What version of gsoap are you using? Are you using the version that is included in the SDK? I have sent your last bit of information on, but I'm wondering if we can try to figure this out sooner. Are you building a debug version of your application? It looks like from above you only have debug symbols for NTDLL? Getting as many symbols as possible could help speed this up.

Is there a chance you can run a thread checker utility against the problem code?
Have you installed SP1 for Vista? I know that for many things Vista has been problematic so maybe (I'm hoping) that SP1 will solve some issues.
vzvezda
Beginner
96 Views

MADgtholmes:

What version of gsoap are you using? Are you using the version that is included in the SDK?

Yes, the gsoap is from SDK. I'm just updated the sample application in SDK to reproduce the problem found in our main application.

MADgtholmes:
I have sent your last bit of information on, but I'm wondering if we can try to figure this out sooner. Are you building a debug version of your application? It looks like from above you only have debug symbols for NTDLL? Getting as many symbols as possible could help speed this up.

I'll try to run on OS where there are more debug symbols are available.

MADgtholmes:

Is there a chance you can run a thread checker utility against the problem code?

Unfortunately I don't have one at this moment.

MADgtholmes:

Have you installed SP1 for Vista? I know that for many things Vista has been problematic so maybe (I'm hoping) that SP1 will solve some issues.

The Vista is indeed without SP1, but the problem is reproduced not only on Vista. Even having SP1 installed there still access violation errors on other OSes.
jouli
Beginner
96 Views

sites are source of information and knowledge.this is one of them.i read all the post and like it so much.I book mark it and mail all of my friends to must check it.so thanks on this nice sharing,