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]