S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

应用层的代码,与之前的代码不同之前,并没有直接使用 ZwQuerySystemInformation() 而是公开的API EnumProcess

#include  < windows.h >
#include 
< stdio.h >
#include 
" psapi.h "
#pragma comment(lib, 
" psapi.lib " )

void  PrintModules( DWORD processID )
{
    HMODULE hMods[
1024 ];
    HANDLE hProcess;
    DWORD cbNeeded;
    unsigned 
int  i;
    
//  Print the process identifier.
    printf(  " Process ID: %u\n " , processID );
    
//  Get a list of all the modules in this process.
    
    hProcess 
=  OpenProcess( PROCESS_QUERY_INFORMATION  |
        PROCESS_VM_READ,
        FALSE, processID );
    
if  (NULL  ==  hProcess)
        
return ;
    
if ( EnumProcessModules(hProcess, hMods,  sizeof (hMods),  & cbNeeded))
    {
        
for  ( i  =   0 ; i  <  (cbNeeded  /   sizeof (HMODULE)); i ++  )
        {
            
char  szModName[MAX_PATH];
            
//  Get the full path to the module's file.
             if  ( GetModuleFileNameEx( hProcess, hMods[i], szModName,  sizeof (szModName)))
            {
                
//  Print the module name and handle value.
                printf( " \t%s (0x%08X)\n " , szModName, hMods );
            }
        }
                }
    CloseHandle( hProcess );
}
void  main( )
{
    
//  Get the list of process identifiers.
    DWORD aProcesses[ 1024 ], cbNeeded, cProcesses;
    unsigned 
int  i;
    
if  (  ! EnumProcesses( aProcesses,  sizeof (aProcesses),  & cbNeeded ) )
        
return ;
    
//  Calculate how many process identifiers were returned.
    cProcesses  =  cbNeeded  /   sizeof (DWORD);
    
//  Print the name of the modules for each process.
     for  ( i  =   0 ; i  <  cProcesses; i ++  )
        PrintModules( aProcesses[i] );
}


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理