如何检查指定的用户是否是本地计算机上的pipe理员?

我想知道,如果用户是PC上的pipe理员或不是? 我发现了一个代码片段,这是这样的,但我有一个问题。 这个代码的问题是,如果启动该进程的用户具有pipe理权限,则该函数将返回。 但是我想查询一个特定的用户是否有pipe理员权限。 我可以这样做吗? 这很重要,因为我的应用程序将在SYSTEM帐户下运行,所以它将始终返回用户是pipe理员,但是我想知道login的用户是否是admin?

代码片段:

BOOL IsUserAdmin( VOID ) /*++ Routine Description: This routine returns TRUE if the caller's process is a member of the Administrators local group. Caller is NOT expected to be impersonating anyone and is expected to be able to open its own process and process token. Arguments: None. Return Value: TRUE - Caller has Administrators local group. FALSE - Caller does not have Administrators local group. -- */ { BOOL b; SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; PSID AdministratorsGroup; b = AllocateAndInitializeSid( &NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup ); if ( b ) { if ( !CheckTokenMembership( NULL, AdministratorsGroup, &b ) ) { b = FALSE; } FreeSid( AdministratorsGroup ); } return ( b ); } 

你需要采取以下步骤。

  1. 决定要选择哪个登录用户,可能会有多个用户。 我会使用一个进程来识别它们,例如探测器进程。
  2. 调用OpenProcessToken()传递进程句柄。 确保你指定了TOKEN_DUPLICATE
  3. 调用DuplicateToken()来获取模拟令牌。
  4. 像以前一样调用CheckTokenMembership() ,但传递的是令牌而不是NULL
  5. 整理!
  1. 在登录的用户帐户中运行您的用户界面。 这保护特权服务免受破碎攻击。

  2. 使用DCOM将请求从GUI转发到特权服务。 在特权服务中使用模拟来发现用户的权限。

看看这篇关于MSDN的博客文章:

如何确定线程是否在本地管理员帐户的用户环境中运行