酒鬼z

我自将心向明月,独卧沙场醉圆缺

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

#include <windows.h>   

#include <stdio.h>  

BOOL IsAdmin(void);  

int main(int argc, char* argv[])  
{  
   if (IsAdmin())  
       printf("IsAdmin - TRUE");  
   else
       printf("IsAdmin - FALSE");  

   return 0;  
}  


BOOL IsAdmin(void)  
{  
    HANDLE                   hAccessToken;  
    BYTE                     *InfoBuffer;  
    PTOKEN_GROUPS            ptgGroups;  
    DWORD                    dwInfoBufferSize;  
    PSID                     psidAdministrators;  
    SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;  
    UINT                     i;  
    BOOL                     bRet = FALSE;  

    if(!OpenProcessToken(GetCurrentProcess(),TOKEN_QUERY,&hAccessToken))  
       goto cleanup;  
      
    InfoBuffer = new BYTE[1024];  
    if(!InfoBuffer)  
       goto cleanup;  

    bRet = GetTokenInformation(hAccessToken,  
                               TokenGroups,  
                               InfoBuffer,  
                               1024,  
                               &dwInfoBufferSize);  

    CloseHandle( hAccessToken );  

    if(!bRet)  
       goto cleanup;  

    if(!AllocateAndInitializeSid(&siaNtAuthority,  
                                 2,  
                                 SECURITY_BUILTIN_DOMAIN_RID,  
                                 DOMAIN_ALIAS_RID_ADMINS,  
                                 0,0,0,0,0,0,  
                                 &psidAdministrators))  
       goto cleanup;  

    bRet = FALSE;  

    ptgGroups = (PTOKEN_GROUPS)InfoBuffer;  

    for(i=0;i<ptgGroups->GroupCount;i++)  
    {  
        if(EqualSid(psidAdministrators,ptgGroups->Groups[i].Sid))  
        {  
            bRet = TRUE;  
            break;  
        }  
    }  

    FreeSid(psidAdministrators);  

cleanup:  

    if (InfoBuffer)  
        delete InfoBuffer;  

    return bRet;  
}

 

转自:http://hi.baidu.com/logopc/item/6c9f7c15859220f9ddeecaf8

posted on 2013-09-25 09:27  酒鬼z  阅读(139)  评论(0)    收藏  举报