本帖最后由 oldmtn 于 2011-02-12 20:40:44 编辑

解决方案 »

  1.   

    LPCTSTR CDialog2::GetProcessUserName(DWORD dwID)  // 进程ID 
    {
       

    HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwID); 
    //Get an open handle to the specified process
    if( hProcess == NULL ) 
    return NULL; 

    HANDLE hToken = NULL; 
    BOOL bResult = FALSE; 
    DWORD dwSize = 0; 

    static TCHAR szUserName[256] = {0}; 
    TCHAR szDomain[256] = {0}; 
    DWORD dwDomainSize = 256; 
    DWORD dwNameSize = 256; 

    SID_NAME_USE  SNU;  //...contains values that specify the type of a security identifier (SID).  PTOKEN_USER pTokenUser = NULL;   //... identifies the user associated with an access token.  __try 

    if( !OpenProcessToken(hProcess, TOKEN_QUERY, &hToken) ) //...opens the access token associated with a process.

    bResult = FALSE; 
    __leave; 


    if( !GetTokenInformation(hToken, TokenUser, pTokenUser, dwSize, &dwSize) ) 

    if( GetLastError() != ERROR_INSUFFICIENT_BUFFER ) 

    bResult = FALSE ; 
    __leave; 



    pTokenUser = NULL; 
    pTokenUser = (PTOKEN_USER)malloc(dwSize); 
    if( pTokenUser == NULL ) 

    bResult = FALSE; 
    __leave; 


    if( !GetTokenInformation(hToken, TokenUser, pTokenUser, dwSize, &dwSize) ) 

    bResult = FALSE; 
    __leave; 


    if( LookupAccountSid(NULL, pTokenUser->User.Sid, szUserName, &dwNameSize, szDomain, &dwDomainSize, &SNU) != 0 ) 

    return szUserName; 


    __finally 

    if( pTokenUser!=NULL ) 
    free(pTokenUser); 


    return NULL; 
    } 这是我网上找的代码,可以实现上图结果。但是还不健全,无法显示NETWORK SERVICE
      

  2.   

    http://blog.csdn.net/zzz3265/archive/2007/11/13/1883208.aspx