NTSTATUS
WINAPI
NtQuerySystemInformation(
int SystemInfoClass
PVOID SystemInfoBuffer,
ULONG SystemInfoBufferSize,
PULONG BytesReturned
);
当 SystemInfoClass 等于5时便可获取进程信息了。
关于 NT 系统下的特权(Privilege)及其描述见下表:
Privilege Constant Description
SE_ASSIGNPRIMARYTOKEN_NAME Required to assign the primary token of a process.
SE_AUDIT_NAME Required to generate audit-log entries. Give this privilege to secure servers.
SE_BACKUP_NAME Required to perform backup operations.
SE_CHANGE_NOTIFY_NAME Required to receive notifications of changes to files or directories. This privilege also causes the system to skip all traversal access checks. It is enabled by default for all users.
SE_CREATE_PAGEFILE_NAME Required to create a paging file.
SE_CREATE_PERMANENT_NAME Required to create a permanent object.
SE_CREATE_TOKEN_NAME Required to create a primary token.
SE_DEBUG_NAME Required to debug a process.
SE_INC_BASE_PRIORITY_NAME Required to increase the base priority of a process.
SE_INCREASE_QUOTA_NAME Required to increase the quota assigned to a process.
SE_LOAD_DRIVER_NAME Required to load or unload a device driver.
SE_LOCK_MEMORY_NAME Required to lock physical pages in memory.
SE_PROF_SINGLE_PROCESS_NAME Required to gather profiling information for a single process.
SE_REMOTE_SHUTDOWN_NAME Required to shut down a system using a network request.
SE_RESTORE_NAME Required to perform restore operations. This privilege enables you to set any valid user or group SID as the owner of an object.
SE_SECURITY_NAME Required to perform a number of security-related functions, such as controlling and viewing audit messages. This privilege identifies its holder as a security operator.
SE_SHUTDOWN_NAME Required to shut down a local system.
SE_SYSTEM_ENVIRONMENT_NAME Required to modify the nonvolatile RAM of systems that use this type of memory to store configuration information.
SE_SYSTEM_PROFILE_NAME Required to gather profiling information for the entire system.
SE_SYSTEMTIME_NAME Required to modify the system time.
SE_TAKE_OWNERSHIP_NAME Required to take ownership of an object without being granted discretionary access. This privilege allows the owner value to be set only to those values that the holder may legitimately assign as the owner of an object.
SE_TCB_NAME This privilege identifies its holder as part of the trusted computer base. Some trusted protected subsystems are granted this privilege. This privilege is required to call the LogonUser function.
SE_UNSOLICITED_INPUT_NAME Required to read unsolicited input from a terminal device.
SE_MACHINE_ACCOUNT_NAME Required to create a machine account.
关于定义可见下表,或察看 WINNT.H:
SE_CREATE_TOKEN_NAME SeCreateTokenPrivilege
SE_ASSIGNPRIMARYTOKEN_NAME SeAssignPrimaryTokenPrivilege
SE_LOCK_MEMORY_NAME SeLockMemoryPrivilege
SE_INCREASE_QUOTA_NAME SeIncreaseQuotaPrivilege
SE_UNSOLICITED_INPUT_NAME SeUnsolicitedInputPrivilege
SE_MACHINE_ACCOUNT_NAME SeMachineAccountPrivilege
SE_TCB_NAME SeTcbPrivilege
SE_SECURITY_NAME SeSecurityPrivilege
SE_TAKE_OWNERSHIP_NAME SeTakeOwnershipPrivilege
SE_LOAD_DRIVER_NAME SeLoadDriverPrivilege
SE_SYSTEM_PROFILE_NAME SeSystemProfilePrivilege
SE_SYSTEMTIME_NAME SeSystemtimePrivilege
SE_PROF_SINGLE_PROCESS_NAME SeProfileSingleProcessPrivilege
SE_INC_BASE_PRIORITY_NAME SeIncreaseBasePriorityPrivilege
SE_CREATE_PAGEFILE_NAME SeCreatePagefilePrivilege
SE_CREATE_PERMANENT_NAME SeCreatePermanentPrivilege
SE_BACKUP_NAME SeBackupPrivilege
SE_RESTORE_NAME SeRestorePrivilege
SE_SHUTDOWN_NAME SeShutdownPrivilege
SE_DEBUG_NAME SeDebugPrivilege
SE_AUDIT_NAME SeAuditPrivilege
SE_SYSTEM_ENVIRONMENT_NAME SeSystemEnvironmentPrivilege
SE_CHANGE_NOTIFY_NAME SeChangeNotifyPrivilege
SE_REMOTE_SHUTDOWN_NAME SeRemoteShutdownPrivilege
ADMINISTRATOR 被默认授于以下这16个权限:
SeChangeNotifyPrivilege
SeSecurityPrivilege
SeBackupPrivilege
SeRestorePrivilege
SeSystemtimePrivilege
SeShutdownPrivilege
SeRemoteShutdownPrivilege
SeTakeOwnershipPrivilege
SeDebugPrivilege
SeSystemEnvironmentPrivilege
SeSystemProfilePrivilege
SeProfileSingleProcessPrivilege
SeIncreaseBasePriorityPrivilege
SeLoadDriverPrivilege
SeCreatePagefilePrivilege
SeIncreaseQuotaPrivilege
可以用 OpenProcessToken 和 AdjustTokenPrivileges 这两个函数来提升进程的特权。
讲了那么多,现在回到主题上来。到底使用哪个方法比较好呢?在 win 2000 下有3个方法可供选择,我比较喜欢简单的方法。NtQuerySystemInformation 功能固然强大,但使用比较麻烦。而 win 2000 的 TOOLHELP32 API 其本质还是调用了 NtQuerySystemInformation 函数,由于它发生错误时,可能不能正确返回返回值,所以不是很稳定,使用起来也是很麻烦的,不符合我的懒人本性。还是采用 PSAPI 比较好,简单又方便,只需要三个函数,且没有复杂的结构体参数。
函数原型:
BOOL
WINAPI
EnumProcesses(
DWORD * lpidProcess,//指针指向存放进程ID的数组
DWORD cb, //数组大小
DWORD * cbNeeded //返回的实际大小
);
BOOL
WINAPI
EnumProcessModules(
HANDLE hProcess, //进程句柄
HMODULE *lphModule, //指针指向存放模块句柄的数组
DWORD cb, //数组大小
LPDWORD lpcbNeeded //返回的实际大小
);
DWORD
WINAPI
GetModuleFileNameEx(
HANDLE hProcess, //进程句柄
HMODULE hModule, //模块句柄
LPSTR lpFilename, //存放模块文件名的字符串
DWORD nSize //字符串大小
);
他们的作用分别是:枚举进程,枚举进程模块,获取模块文件名(包含路径)。详细的源代码如下:
// EnumProcess.cpp : Defines the entry point for the console application.
// Code By : tabris17
#include "stdafx.h"
#include "Psapi.h"
#pragma comment (lib,"Psapi.lib")
void PrintFileName(DWORD processID)
{
char fn[MAX_PATH];
HANDLE hProcess=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,processID);
if (hProcess)
{
HMODULE hMod[1024];
DWORD cbNeeded,size;
unsigned int i;
if (EnumProcessModules(hProcess,hMod,sizeof(hMod),&cbNeeded))
{
size=cbNeeded/sizeof(HMODULE);
GetModuleFileNameEx(hProcess,hMod[0],fn,sizeof(fn));
printf("n(%u)t%sn",processID,fn);
for(i=1;i<size;i++)
{
GetModuleFileNameEx(hProcess,hMod[i],fn,sizeof(fn));
printf("t%sn",fn);
}
}
}
CloseHandle(hProcess);
}
int plist()
{
DWORD Processesid[1024], cbNeeded,size;
unsigned int i;
if (!EnumProcesses(Processesid,sizeof(Processesid),&cbNeeded))
return 0;
size=cbNeeded/sizeof(DWORD);
for (i=0;i<size;i++)
PrintFileName(Processesid[i]);
return 0;
}
int main(int argc, char* argv[])
{
plist();
return 0;
}
- 推荐阅讯
- Windows NT安装问答
- Windows变慢原因分析及解决方法
- Windows 2003中轻松实现红外线通信支持
- 微软Windows Server 2003 R2简体中文版发布
- 在Win 2000中使用MSN Messenger7.5
- 给您几点小建议
- Documents and settings文件夹探密
- 巧用Windows NT的多重引导
- Windows Server 2003远程桌面管理
- Windows 2003系统中如何下安装WMP10
- 阅读排行
- 1.win2003最新优化方法大全之二
- 2.Windows 2003系统25招加速大法
- 3.Win2003最新优化方法大全之一
- 4.Win2003组策略和安全模板的应用
- 5.发挥Windows Server 2003远程桌面的作用
- 6.WinServer2003秘笈放送
- 7.图解硬盘低级格式化探密
- 8.系统磁盘碎片整理的技巧
- 9.Windows变慢原因分析及解决方法
- 10.活用大师和兔子 系统更快更安全
- 专题教程
- Windows Server-Windows Server文档-Windows Server新闻-Windows Ser PostgreSQL-PostgreSQL文档-PostgreSQL新闻-PostgreSQL专家
- WebLogic-WebLogic文档-WebLogic新闻-WebLogic专家 FreeBSD-FreeBSD文档-FreeBSD新闻-FreeBSD专家
- Linux-内核 GUI KDE Gnome DNS FTP 安全 安装-Linux专区 Windows-AD IIS ServerCore 虚拟化 安全 HPC-Windows专区
- 大话G游 专题:手机病毒揭密
- ARP攻击防范与解决方案 路由故障处理手册
