Misbehaving custom SharePoint components leading to claims authentication exceptions (tag bz7l)

 

I have mentioned the steps to troubleshoot Claims to Windows NT Service (c2WTS) problems in a previous post (click here). There is also a post to see if the problem is with Active Directory (AD) or c2WTS (click here). After doinf the normal troubleshooting outlined in the previous posts you still have an issue or you suspect the problem is with a custom component, follow one of the methods discussed here.

 

Symptom

In the ULS log you see occasionally the following ULS log entry:

05/27/2012 14:33:34.03 w3wp.exe (0x1144)0x1960 SharePoint Foundation Claims Authentication bz7l Medium
SPSecurityContext.WindowsIdentity: Could not retrieve a valid windows identity for NTName=’CONTOSO\jdoed’, UPN=’jdoed@contoso.com’. UPN is required when Kerberos constrained delegation is used. Exception: System.ServiceModel.Security.SecurityAccessDeniedException: Access is denied.    Server stack trace:    
at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter)   
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)   
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)   
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)   
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)    Exception rethrown
at [0]:    
at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)   
at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)   
at Microsoft.IdentityModel.WindowsTokenService.S4UClient.IS4UService_dup.UpnLogon(String upn, Int32 pid)   
at Microsoft.IdentityModel.WindowsTokenService.S4UClient.<>c__DisplayClass1.<UpnLogon>b__0(IS4UService_dup channel)   
at Microsoft.IdentityModel.WindowsTokenService.S4UClient.CallService(Func`2 contractOperation)   
at Microsoft.SharePoint.SPSecurityContext.GetWindowsIdentity().

 

Method 1 – Using a DebugDiag rule to capture dump files and analyze it later

 

Capturing data

Follow instructions here to create a dump file based on ULS tag. The tag of interest is bz7l. Follow instructions in the previous post (click here) and make the following changes:

Step 10:

Use this code instead:

 

Dim Tag1

Dim TargetTag1

TargetTag1 = "bz7l"

Dim PartialText1

PartialText1 = ""

Tag1 = Debugger.Execute("r @$t1=@ecx;.if (@$t1 >> 18 < 24) { r @$t2=@$t1>>18 & 3f; r @$t3=@$t1>>12 & 3f; r@$t4=@$t1>>0c & 3f; r @$t5=@$t1>>6 & 3f;r @$t6=@$t1 & 3f;.printf ""%C%C%C%C%C"",@@c++(@$t2 > 0x19 ? @$t2 + 0x16 : @$t2+'a'),@@c++(@$t3 > 0x19 ? @$t3 + 0x16 : @$t3+'a'),@@c++(@$t4 > 0x19 ? @$t4 + 0x16 : @$t4+'a'),@@c++(@$t5 > 0x19 ? @$t5 + 0x16 : @$t5+'a'),@@c++(@$t6 > 0x19 ? @$t6 + 0x16 : @$t6+'a');} .else { .printf ""%C%C%C%C"", @$t1>>18,@$t1>>10,@$t1>>8,@$t1; };")

WriteToLog "Tag: " & Tag1 'To avoid DebugDiag log flood comment you may remove this line 

' Test if the tag matches

If InStr(Tag1,TargetTag1)>0 Then

 'Only fetch message if necessary

 Dim Message1

 Message1  = ""

 If PartialText1 <> "" Then

   Message1 = Debugger.Execute(".printf ""%mu"",@r9")

   'WriteToLog "Message: " & Message1 'Uncomment this line if you wish to log the message

 End If

 If Message1 = "" Or  InStr(Message1,PartialText1) > 0 Then

  ' You can change the action to log the stack trace for example

   CreateDump "For Tag " & Tag1, false

 End If

End If

Step 17:

Use this code instead:

Dim Tag2

Dim TargetTag2

TargetTag2 = "bz7l"

Dim PartialText2

PartialText2 = ""

Tag2 = Debugger.Execute("r @$t1=@ecx;.if (@$t1 >> 18 < 24) { r @$t2=@$t1>>18 & 3f; r @$t3=@$t1>>12 & 3f; r@$t4=@$t1>>0c & 3f; r @$t5=@$t1>>6 & 3f;r @$t6=@$t1 & 3f;.printf ""%C%C%C%C%C"",@@c++(@$t2 > 0x19 ? @$t2 + 0x16 : @$t2+'a'),@@c++(@$t3 > 0x19 ? @$t3 + 0x16 : @$t3+'a'),@@c++(@$t4 > 0x19 ? @$t4 + 0x16 : @$t4+'a'),@@c++(@$t5 > 0x19 ? @$t5 + 0x16 : @$t5+'a'),@@c++(@$t6 > 0x19 ? @$t6 + 0x16 : @$t6+'a');} .else { .printf ""%C%C%C%C"", @$t1>>18,@$t1>>10,@$t1>>8,@$t1; };")

WriteToLog "Tag: " & Tag2 'To avoid DebugDiag log flood comment you may remove this line 

' Test if the tag matches

If InStr(Tag2,TargetTag2)>0 Then

 'Only fetch message if necessary

 Dim Message2 

Message2 = ""

 If PartialText2 <> "" Then

   Message2 = Debugger.Execute(".printf ""%mu"",@r9")

   'WriteToLog "Message: " & Message2 'Uncomment this line if you wish to log the message

 End If

 If Message2 = "" Or  InStr(Message2,PartialText2) > 0 Then

  ' You can change the action to log the stack trace for example

   CreateDump "For Tag " & Tag2, false

 End If

End If

When the dump is captured, the rule you be marked as complete. Move the dump to your working machine so you can analyze it.

 

Analyzing the data

After capturing the dump, open it in WinDbg, If you do not know how to get WinDbg to work, see this previous post (click here).

 

Verifying the user being impersonating

To see the user being impersonated, simply issue the command !token

0:072> !token

TS Session ID: 0

User: S-1-5-17

Failed to query groups info size

Primary Group: S-1-5-17

Privs: 

 00 0x000000017 SeChangeNotifyPrivilege           Attributes - Enabled Default 

 01 0x00000001d SeImpersonatePrivilege            Attributes - Enabled Default 

 02 0x00000001e SeCreateGlobalPrivilege           Attributes - Enabled Default 

 03 0x000000021 SeIncreaseWorkingSetPrivilege     Attributes - 

Auth ID: 0:3e3

Impersonation Level: Impersonation

TokenType: Impersonation

Is restricted token: no.

 

So the user SID is S-1-5-17. SID is the internal code of a credential, all SIDs with 4 parts are built-in SIDs. This is already a red flag, a domain account user looks like this: S-1-5-21-174793676-37829515-635260011-218252. Why a SID and not the account name? you may ask yourself. The reason is that the information in the dump is stored as SID. If you are in the same domain where the dump was taken or the SID is a well known group or user (i.e. a short SID like the one we saw) you may try to run this instead: !roken –n

0:072> !token -n

*** Friendly name lookup may not work correctly with dumpfiles.

TS Session ID: 0

User: S-1-5-17 (Well Known Group: NT AUTHORITY\IUSR)

Failed to query groups info size

Primary Group: S-1-5-17 (Well Known Group: NT AUTHORITY\IUSR)

Privs: 

 00 0x000000017 SeChangeNotifyPrivilege           Attributes - Enabled Default 

 01 0x00000001d SeImpersonatePrivilege            Attributes - Enabled Default 

 02 0x00000001e SeCreateGlobalPrivilege           Attributes - Enabled Default 

 03 0x000000021 SeIncreaseWorkingSetPrivilege     Attributes - 

Auth ID: 0:3e3

Impersonation Level: Impersonation

TokenType: Impersonation

Is restricted token: no.

 

So, the SID is for group NT AUTHORITY\IUSR which is the anonymous account for IIS 7+ App Pools. This is a very important clue. This means that the call to c2WTS was done without impersonating the Application Pool account. Even though adding this account to the list of users allowed to access c2WTS would work this is not a secure solution. In other words, DO NOT add the IIS anonymous account to the list of allow users in c2WTS. The solution here is to identify which component is not impersonating the Application Pool account.

 

Verifying the misbehaving component not impersonating App Pool account

You can see the managed stack trace using different commands. If you are using NetExt you may issue !wclrstack command. If you want to use sos, run first this command to load the appropriate sos version: .loadby sos clr (notice the dot in the beginning of the command). Then run !clrstack. In the worst case scenario you can also run kpL to show the stack as native.

0:072> .loadby sos clr

 

 

0:072> !clrstack

OS Thread Id: 0x3e80 (72)

(...) Call Site

(...) Microsoft.SharePoint.Diagnostics.ULS+NativeMethods.ULSSendFormattedTrace(UInt32, UInt32, Microsoft.SharePoint.Diagnostics.ULSTraceLevel, System.String, Boolean)

(...) Microsoft.SharePoint.Diagnostics.ULS+NativeMethods.ULSSendFormattedTrace(UInt32, UInt32, Microsoft.SharePoint.Diagnostics.ULSTraceLevel, System.String, Boolean)

(...) DomainBoundILStubClass.IL_STUB_PInvoke(UInt32, UInt32, Microsoft.SharePoint.Diagnostics.ULSTraceLevel, System.String, Boolean)

(...) Microsoft.SharePoint.Diagnostics.ULS.SendTraceImpl(UInt32, Microsoft.SharePoint.Diagnostics.ULSCatBase, Microsoft.SharePoint.Diagnostics.ULSTraceLevel, System.String, System.Object[]) 

(...) Microsoft.SharePoint.Diagnostics.ULS.SendTraceTag(UInt32, Microsoft.SharePoint.Diagnostics.ULSCatBase, Microsoft.SharePoint.Diagnostics.ULSTraceLevel, System.String, System.Object[]) 

(...) Microsoft.SharePoint.SPSecurityContext.GetWindowsIdentity() 

(...) Microsoft.IdentityModel.WindowsTokenService.S4UClient+IS4UService_dup.UpnLogon(System.String, Int32)

(...) Microsoft.IdentityModel.WindowsTokenService.S4UClient.CallService(System.Func`2) 

(...) Microsoft.SharePoint.SPSecurityContext.GetWindowsIdentity() 

(...) Microsoft.SharePoint.Administration.SPFarm.CurrentClaimsUserIsBoxAdministrator(Microsoft.IdentityModel.Claims.IClaimsIdentity) 

(...) Microsoft.SharePoint.Administration.SPFarm.CurrentUserIsBoxAdministrator() 

(...) Microsoft.SharePoint.SPManagedCodeInterop.CanCurrentUserIgnoreThrottle(System.Guid) 

(...) Microsoft.SharePoint.Library.SPRequestInternalClass.GetListItemDataWithCallback2(Microsoft.SharePoint.Library.IListItemSqlClient, System.String, System.String, System.String, System.String, Microsoft.SharePoint.Library.SAFEARRAYFLAGS, Microsoft.SharePoint.Library.ISP2DSafeArrayWriter, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Boolean ByRef)

(...) Microsoft.SharePoint.Library.SPRequestInternalClass.GetListItemDataWithCallback2(Microsoft.SharePoint.Library.IListItemSqlClient, System.String, System.String, System.String, System.String, Microsoft.SharePoint.Library.SAFEARRAYFLAGS, Microsoft.SharePoint.Library.ISP2DSafeArrayWriter, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Boolean ByRef)

(...) Microsoft.SharePoint.Library.SPRequest.GetListItemDataWithCallback2(Microsoft.SharePoint.Library.IListItemSqlClient, System.String, System.String, System.String, System.String, Microsoft.SharePoint.Library.SAFEARRAYFLAGS, Microsoft.SharePoint.Library.ISP2DSafeArrayWriter, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Boolean ByRef) 

(...) Microsoft.SharePoint.SPListItemCollection.EnsureListItemsData() 

(...) Microsoft.SharePoint.SPListItemCollection.GetDataTableCore(Microsoft.SharePoint.DataTableFetchOptions) 

(...) Contoso.WebParts.Weather.CreateChildControls()

(...) System.Web.UI.Control.EnsureChildControls() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean) 

(...) System.Web.UI.Page.ProcessRequest(Boolean, Boolean) 

(...) System.Web.UI.Page.ProcessRequest() 

(...) System.Web.UI.Page.ProcessRequest(System.Web.HttpContext) 

(...) Microsoft.SharePoint.Publishing.TemplateRedirectionPage.ProcessRequest(System.Web.HttpContext) 

(...) System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 

(...) System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef) 

(...) System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception) 

(...) System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, System.AsyncCallback) 

(...) System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext) 

(...) System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32) 

(...) System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32) 

(...) DomainBoundILStubClass.IL_STUB_ReversePInvoke(Int64, Int64, Int64, Int32)

(...) System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef)

(...) System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef)

(...) DomainBoundILStubClass.IL_STUB_PInvoke(IntPtr, System.Web.RequestNotificationStatus ByRef)

(...) System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32) 

(...) System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32) 

(...) DomainBoundILStubClass.IL_STUB_ReversePInvoke(Int64, Int64, Int64, Int32)

(...) [ContextTransitionFrame: 0000006d042fe618] 

 

Notice the custom control Contoso.WebParts.Weather is trying to access a list (which requires valid credentials). The custom control is easy to spot, it is the only one not from Microsoft. So you check the version using lmv m Contoso.

0:072> lmv m Contoso

start             end                 module name

0000006d`2ced0000 0000006d`2ceda000   Contoso   (no symbols)           

    Loaded symbol image file: Contoso.dll

    Image path: C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Contoso\v4.0_1.0.0.0__7fe4f23318698e3d\Contoso.dll

    Image name: Contoso.dll

    Timestamp:        Wed Aug  5 14:30:09 2011 (55C26441)

    File version:     1.0.0.0

    Product version:  1.0.0.0

    File flags:       0 (Mask 3F)

    File OS:          4 Unknown Win32

    CompanyName:      Contoso The MOSS 2007 King

    ProductName:      Contoso

    InternalName:     Contoso.dll

    OriginalFilename: Contoso.dll

    ProductVersion:   1.0.0.0

    FileVersion:      1.0.0.0

    FileDescription:  Contoso

    LegalCopyright:   Contoso The MOSS 2007 King © 2011

You notice it is an old DLL, thus most likely not claims enabled. Looking at the source code there is the misbehaving part:

   1: namespace Contoso.WebParts

   2: {

   3:  

   4:     public class Weather : WebPart

   5:     {

   6:         public override void CreateChildControls()

   7:         {

   8:             // The full code below should run in elevated privileges to impersonate the app pool account (SPSecurity.RunWithElevatedPrivileges)

   9:             SPWeb rootWeb = SPContext.Current.Site.RootWeb;

  10:             SPList sPList = rootWeb.Lists["WeatherConfig"];

  11:             SPListItemCollection items = sPList.GetItems(new SPQuery

  12:             {

  13:                 Query = "<Where><Eq><FieldRef Name='Title' /><Value Type='Text'>Weather</Value></Eq></Where>"

  14:             });

  15:             DataTable dataTable = items.GetDataTable(); // <-- Here is doing something that requires impersonating caller

  16:             (... removed for clarity ...)

  17:         }

  18:  

  19:     }

  20: }

 

Line 15 is requesting data from a list. To do this it is necessary to impersonate the caller. In attempt to do so, SharePoint will try to impersonate the caller. In some situations if the list requires NTLM/Kerberos authentication, SharePoint will leverage c2WTS to fetch a valid token. The correct way to do that is to run the code in elevated privileges using SPSecurity.RunWithElevatedPrivileges. The code should look like this:

   1: namespace Contoso.WebParts

   2: {

   3:  

   4:     public class Weather : WebPart

   5:     {

   6:         public override void CreateChildControls()

   7:         {

   8:             SPSecurity.RunWithElevatedPrivileges(delegate()

   9:             {

  10:                 SPWeb rootWeb = SPContext.Current.Site.RootWeb;

  11:                 SPList sPList = rootWeb.Lists["WeatherConfig"];

  12:                 SPListItemCollection items = sPList.GetItems(new SPQuery

  13:             (... removed for clarity ...)

  14:  

  15:             

  16:             });

  17:         }

  18:  

  19:     }

  20: }

 

Method 2 – Changing DebugDiag 2 rule to log the user credential and token when bz7l happens

 

Capturing data

The command !token requires the Windows Debugger extension exts.dll. If you do not have Windows Debugger installed, follow instructions here. You can install Debugger in any machine, it does not need to be in the SharePoint server. Copy file exts.dll from the winxp folder under the Windows Debugger installation folder. It is something that looks like: C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\winxp\exts.dll. If you not sure you can always open WinDbg, open Task Manager, select process Windows GUI symbolic debugger, right-click and choose Open File Location. Copy exts.dll to your SharePoint machine that you have DebugDiag installed. Place in this folder on the server: C:\Program Files\DebugDiag\Exts. NOTE: Make sure you copy exts.dll from the 64-bits version of the Debugger. If you copy from the 32-bits version IT WILL not work.

Follow instructions here to log user and stack without generating a dump file. The tag of interest is bz7l. Follow instructions in the previous post (click here) and make the following changes:

Step 10:

Use this code instead:

Dim Tag1

Dim TargetTag1

TargetTag1 = "bz7l"

Dim PartialText1

PartialText1 = "" 

Tag1 = Debugger.Execute("r @$t1=@ecx;.if (@$t1 >> 18 < 24) { r @$t2=@$t1>>18 & 3f; r @$t3=@$t1>>12 & 3f; r@$t4=@$t1>>0c & 3f; r @$t5=@$t1>>6 & 3f;r @$t6=@$t1 & 3f;.printf ""%C%C%C%C%C"",@@c++(@$t2 > 0x19 ? @$t2 + 0x16 : @$t2+'a'),@@c++(@$t3 > 0x19 ? @$t3 + 0x16 : @$t3+'a'),@@c++(@$t4 > 0x19 ? @$t4 + 0x16 : @$t4+'a'),@@c++(@$t5 > 0x19 ? @$t5 + 0x16 : @$t5+'a'),@@c++(@$t6 > 0x19 ? @$t6 + 0x16 : @$t6+'a');} .else { .printf ""%C%C%C%C"", @$t1>>18,@$t1>>10,@$t1>>8,@$t1; };") 

' Test if the tag matches

If InStr(Tag1,TargetTag1)>0 Then

'Only fetch message if necessary

Dim Message1

Message1 = ""

If PartialText1 <> "" Then

  Message1 = Debugger.Execute(".printf ""%mu"",@r9")

  'WriteToLog "Message: " & Message1 'Uncomment this line if you wish to log the message

End If

If Message1 = "" Or InStr(Message1,PartialText1) > 0 Then

  WriteToLog "Tag: " & Tag1 

  WriteToLog Debugger.Execute(".load exts\exts;!token –n;!clrstack")

End If

End If 

Step 17:

Use this code instead:

Dim Tag2

Dim TargetTag2

TargetTag2 = "bz7l"

Dim PartialText2

PartialText2 = ""

Tag2 = Debugger.Execute("r @$t1=@ecx;.if (@$t1 >> 18 < 24) { r @$t2=@$t1>>18 & 3f; r @$t3=@$t1>>12 & 3f; r@$t4=@$t1>>0c & 3f; r @$t5=@$t1>>6 & 3f;r @$t6=@$t1 & 3f;.printf ""%C%C%C%C%C"",@@c++(@$t2 > 0x19 ? @$t2 + 0x16 : @$t2+'a'),@@c++(@$t3 > 0x19 ? @$t3 + 0x16 : @$t3+'a'),@@c++(@$t4 > 0x19 ? @$t4 + 0x16 : @$t4+'a'),@@c++(@$t5 > 0x19 ? @$t5 + 0x16 : @$t5+'a'),@@c++(@$t6 > 0x19 ? @$t6 + 0x16 : @$t6+'a');} .else { .printf ""%C%C%C%C"", @$t1>>18,@$t1>>10,@$t1>>8,@$t1; };")

' Test if the tag matches

If InStr(Tag2,TargetTag2)>0 Then

'Only fetch message if necessary

Dim Message2 

Message2 = ""

If PartialText2 <> "" Then

   Message2 = Debugger.Execute(".printf ""%mu"",@r9")

   'WriteToLog "Message: " & Message2 'Uncomment this line if you wish to log the message

End If

If Message2 = "" Or  InStr(Message2,PartialText2) > 0 Then

  WriteToLog "Tag: " & Tag2 

  WriteToLog Debugger.Execute(".load exts\exts;!token –n;!clrstack")

 

End If

End If

After the problem is reproduced you can open the log file and check the output. It will look like this (excerpt):

Breakpoint id 1 at onetnative!ULSSendFormattedTrace caused by System ID: 17812

Tag: bz7l

 

TS Session ID: 0

User: S-1-5-17

Failed to query groups info size

Primary Group: S-1-5-17

Privs: 

 00 0x000000017 SeChangeNotifyPrivilege           Attributes - Enabled Default 

 01 0x00000001d SeImpersonatePrivilege            Attributes - Enabled Default 

 02 0x00000001e SeCreateGlobalPrivilege           Attributes - Enabled Default 

 03 0x000000021 SeIncreaseWorkingSetPrivilege     Attributes - 

Auth ID: 0:3e3

Impersonation Level: Impersonation

TokenType: Impersonation

Is restricted token: no.

 

OS Thread Id: 0x3e80 (72)

(...) Call Site

(...) Microsoft.SharePoint.Diagnostics.ULS+NativeMethods.ULSSendFormattedTrace(UInt32, UInt32, Microsoft.SharePoint.Diagnostics.ULSTraceLevel, System.String, Boolean)

(...) Microsoft.SharePoint.Diagnostics.ULS+NativeMethods.ULSSendFormattedTrace(UInt32, UInt32, Microsoft.SharePoint.Diagnostics.ULSTraceLevel, System.String, Boolean)

(...) DomainBoundILStubClass.IL_STUB_PInvoke(UInt32, UInt32, Microsoft.SharePoint.Diagnostics.ULSTraceLevel, System.String, Boolean)

(...) Microsoft.SharePoint.Diagnostics.ULS.SendTraceImpl(UInt32, Microsoft.SharePoint.Diagnostics.ULSCatBase, Microsoft.SharePoint.Diagnostics.ULSTraceLevel, System.String, System.Object[]) 

(...) Microsoft.SharePoint.Diagnostics.ULS.SendTraceTag(UInt32, Microsoft.SharePoint.Diagnostics.ULSCatBase, Microsoft.SharePoint.Diagnostics.ULSTraceLevel, System.String, System.Object[]) 

(...) Microsoft.SharePoint.SPSecurityContext.GetWindowsIdentity() 

(...) Microsoft.IdentityModel.WindowsTokenService.S4UClient+IS4UService_dup.UpnLogon(System.String, Int32)

(...) Microsoft.IdentityModel.WindowsTokenService.S4UClient.CallService(System.Func`2) 

(...) Microsoft.SharePoint.SPSecurityContext.GetWindowsIdentity() 

(...) Microsoft.SharePoint.Administration.SPFarm.CurrentClaimsUserIsBoxAdministrator(Microsoft.IdentityModel.Claims.IClaimsIdentity) 

(...) Microsoft.SharePoint.Administration.SPFarm.CurrentUserIsBoxAdministrator() 

(...) Microsoft.SharePoint.SPManagedCodeInterop.CanCurrentUserIgnoreThrottle(System.Guid) 

(...) Microsoft.SharePoint.Library.SPRequestInternalClass.GetListItemDataWithCallback2(Microsoft.SharePoint.Library.IListItemSqlClient, System.String, System.String, System.String, System.String, Microsoft.SharePoint.Library.SAFEARRAYFLAGS, Microsoft.SharePoint.Library.ISP2DSafeArrayWriter, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Boolean ByRef)

(...) Microsoft.SharePoint.Library.SPRequestInternalClass.GetListItemDataWithCallback2(Microsoft.SharePoint.Library.IListItemSqlClient, System.String, System.String, System.String, System.String, Microsoft.SharePoint.Library.SAFEARRAYFLAGS, Microsoft.SharePoint.Library.ISP2DSafeArrayWriter, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Boolean ByRef)

(...) Microsoft.SharePoint.Library.SPRequest.GetListItemDataWithCallback2(Microsoft.SharePoint.Library.IListItemSqlClient, System.String, System.String, System.String, System.String, Microsoft.SharePoint.Library.SAFEARRAYFLAGS, Microsoft.SharePoint.Library.ISP2DSafeArrayWriter, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Microsoft.SharePoint.Library.ISPDataCallback, Boolean ByRef) 

(...) Microsoft.SharePoint.SPListItemCollection.EnsureListItemsData() 

(...) Microsoft.SharePoint.SPListItemCollection.GetDataTableCore(Microsoft.SharePoint.DataTableFetchOptions) 

(...) Contoso.WebParts.Weather.CreateChildControls()

(...) System.Web.UI.Control.EnsureChildControls() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Control.PreRenderRecursiveInternal() 

(...) System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean) 

(...) System.Web.UI.Page.ProcessRequest(Boolean, Boolean) 

(...) System.Web.UI.Page.ProcessRequest() 

(...) System.Web.UI.Page.ProcessRequest(System.Web.HttpContext) 

(...) Microsoft.SharePoint.Publishing.TemplateRedirectionPage.ProcessRequest(System.Web.HttpContext) 

(...) System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 

(...) System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef) 

(...) System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception) 

(...) System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, System.AsyncCallback) 

(...) System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext) 

(...) System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32) 

(...) System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32) 

(...) DomainBoundILStubClass.IL_STUB_ReversePInvoke(Int64, Int64, Int64, Int32)

(...) System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef)

(...) System.Web.Hosting.UnsafeIISMethods.MgdIndicateCompletion(IntPtr, System.Web.RequestNotificationStatus ByRef)

(...) DomainBoundILStubClass.IL_STUB_PInvoke(IntPtr, System.Web.RequestNotificationStatus ByRef)

(...) System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32) 

(...) System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32) 

(...) DomainBoundILStubClass.IL_STUB_ReversePInvoke(Int64, Int64, Int64, Int32)

(...) [ContextTransitionFrame: 0000006d042fe618]