2011-01-26 23 views
1

私はtaskmanagerをappのように作っています。ウィンドウのために、私はすべてのシステムプロセスを得ることができる、今私はプロセスのユーザー名を取得したい。私はネットからコードを得た。プロセス名を取得するC++

void enableDebugPrivileges() 
{ 
    HANDLE hcurrent=GetCurrentProcess(); 
    HANDLE hToken; 
    BOOL bret=OpenProcessToken(hcurrent,40,&hToken); 
    LUID luid; 
    bret=LookupPrivilegeValue(NULL,SE_LOAD_DRIVER_NAME, &luid); 
    TOKEN_PRIVILEGES NewState,PreviousState; 
    DWORD ReturnLength; 
    NewState.PrivilegeCount =1; 
    NewState.Privileges[0].Luid =luid; 
    NewState.Privileges[0].Attributes=2; 
    AdjustTokenPrivileges(hToken,FALSE,&NewState,28,&PreviousState,&ReturnLength); 
} 

char *GetProcessUsername(HANDLE *phProcess, BOOL bIncDomain) 
{ 
    static char sname[300]; 
    HANDLE tok = 0; 
    HANDLE hProcess; 
    TOKEN_USER *ptu; 
    DWORD nlen, dlen; 
    char name[300], dom[300], tubuf[300], *pret = 0; 
    int iUse; 

    //if phProcess is NULL we get process handle of this 
    //process. 
    hProcess = phProcess?*phProcess:GetCurrentProcess(); 

    //open the processes token 
    if (!OpenProcessToken(hProcess,TOKEN_QUERY,&tok)) goto ert; 

    //get the SID of the token 
    ptu = (TOKEN_USER*)tubuf; 
    if (!GetTokenInformation(tok,(TOKEN_INFORMATION_CLASS)1,ptu,300,&nlen)) goto ert; 

    //get the account/domain name of the SID 
    dlen = 300; 
    nlen = 300; 
    if (!LookupAccountSidA(0, ptu->User.Sid, name, &nlen, dom, &dlen, (PSID_NAME_USE)&iUse)) goto ert; 


    //copy info to our static buffer 
    if (dlen && bIncDomain) { 
    strcpy(sname,dom); 
    strcat(sname,""); 
    strcat(sname,name); 
    } else { 
    strcpy(sname,name); 
    } 
    //set our return variable 
    pret = sname; 

    ert: 
    if (tok) CloseHandle(tok); 
    return pret; 
} 
int main(){ 
    enableDebugPrivileges(); 
    DWORD dwPID=3436;   
    HANDLE hProcess_i = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, dwPID); 
    printf("%s",GetProcessUsername(&hProcess_i,0)); 
} 

システムとcurrでうまく働いています。ユーザープロセスはネットワークサービスとローカルサービスではなく、null string.pleaseを取得してこれらのプロセスのユーザー名を取得する方法を教えてください。ありがとう。

答えて

2

IIRC LocalServiceと呼ばれる別個の疑似アカウントがありますが、通常のセキュリティシステムにはありません(したがって、ヌル文字列を取得します)。 NetworkServiceアカウントもあります。

+0

はありますか?ソースをお願いします.. .. please? – YAHOOOOO

+0

http://msdn.microsoft.com/en-us/library/ms686005(v=VS.85).aspx –

+0

ありがとうございます。..... :) – YAHOOOOO

関連する問題