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;
}
推荐阅读
- 云南省c证律师巿辖区内转所怎么规定的
- iPhone来电不响铃怎么办?iPhone来电不响铃的解决方法
- 将进酒元琢怎么死的
- 我的世界f3怎么看
- 设计服务属于印花税的哪一类
- 幼儿园如何举行六一的活动
- 躺椅折叠椅有什么材质的
- 春夜洛城闻笛译文 春夜洛城闻笛的译文
- 3 windows 2000 server和Vista组策略的新特性
- 升字的组词
