ReSharper警告我可能存在NullReferenceException
WindowsIdentity windowsIdentity = new WindowsIdentity(WindowsIdentity.GetCurrent().Token);
我查看了MSDN文档,但没有看到任何提及。另外,这没有意义,因为如果您运行可执行文件,则必须登录。
这仅仅是ReSharper的搜索模式吗?
最佳答案
使用ILSpy,您可以查看GetCurrent
和GetCurrentInternal
的反编译版本,并由GetCurrent
调用。
结果是:
GetCurrent:
public static WindowsIdentity GetCurrent()
{
return WindowsIdentity.GetCurrentInternal(TokenAccessLevels.MaximumAllowed, false);
}
GetCurrentInternal:
internal static WindowsIdentity GetCurrentInternal(TokenAccessLevels desiredAccess, bool threadOnly)
{
int errorCode = 0;
bool flag;
SafeTokenHandle currentToken = WindowsIdentity.GetCurrentToken(desiredAccess, threadOnly, out flag, out errorCode);
if (currentToken != null && !currentToken.IsInvalid)
{
WindowsIdentity windowsIdentity = new WindowsIdentity();
windowsIdentity.m_safeTokenHandle.Dispose();
windowsIdentity.m_safeTokenHandle = currentToken;
return windowsIdentity;
}
if (threadOnly && !flag)
{
return null;
}
throw new SecurityException(Win32Native.GetMessage(errorCode));
}
由于从
threadOnly
调用时GetCurrent
始终为false,并且currentToken
必须对其他return语句有效,因此我认为您没有冒空WindowsIdentity
的危险。关于resharper - WindowsIdentity.GetCurrent()是否可以返回null?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15998381/