ReSharper警告我可能存在NullReferenceException

WindowsIdentity windowsIdentity = new WindowsIdentity(WindowsIdentity.GetCurrent().Token);


我查看了MSDN文档,但没有看到任何提及。另外,这没有意义,因为如果您运行可执行文件,则必须登录。
这仅仅是ReSharper的搜索模式吗?

最佳答案

使用ILSpy,您可以查看GetCurrentGetCurrentInternal的反编译版本,并由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/

10-09 23:20