M2TeamArchived/M2TeamCommonLibrary

SuIsLogonSid 函数 Bug

Closed this issue · 2 comments

/*
	SuIsLogonSid函数判断指定的SID是否为登录SID。
	The SuIsLogonSid function determines whether the specified SID is a logon
	SID.
	*/
	static bool WINAPI SuIsLogonSid(
		_In_ PSID pSid)
	{
		// 获取pSid的SID_IDENTIFIER_AUTHORITY结构
		PSID_IDENTIFIER_AUTHORITY pSidAuth = RtlIdentifierAuthoritySid(pSid);

		// 如果不符合SID_IDENTIFIER_AUTHORITY结构长度,则返回false
		if (!memcmp(pSidAuth, &SIA_NT, SIA_Length)) return false;

		// 判断SID是否属于Logon SID
		return (*RtlSubAuthorityCountSid(pSid) == SECURITY_LOGON_IDS_RID_COUNT
			&& *RtlSubAuthoritySid(pSid, 0) == SECURITY_LOGON_IDS_RID);
	}

memcmp 的返回值是 :
相等: 0
小于: < 0
大于: > 0

所以上面代码的 if 逻辑应该是这样, 去掉 !

if (memcmp(pSidAuth, &SIA_NT, SIA_Length)) return false;

嗯,收到了,等我修复

已修复