请问:为何我用OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwProcID)获取外部进程的handle的时候会失败? 我用OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwProcID)获取外部进程的handle的时候,会失败,用GetLastError发现是“拒绝访问”不知为何。我改如何获取外部进程的handle呐? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不要用PROCESS_ALL_ACCESS,换成 PROCESS_VM_WRITE+PROCESS_VM_OPERATION 试试! hProcess=::OpenProcess(PROCESS_ALL_ACCESS|PROCESS_VM_WRITE|PROCESS_VM_OPERATION| //获取所有的权限 PROCESS_VM_READ,TRUE,dwProcessId); 你开始应该得到了进程ID吧,就是dwProcessId. 1.我已经获得了正确的进程ID。2.访问权限的定义: #define PROCESS_TERMINATE (0x0001) #define PROCESS_CREATE_THREAD (0x0002) #define PROCESS_SET_SESSIONID (0x0004) #define PROCESS_VM_OPERATION (0x0008) #define PROCESS_VM_READ (0x0010) #define PROCESS_VM_WRITE (0x0020) #define PROCESS_DUP_HANDLE (0x0040) #define PROCESS_CREATE_PROCESS (0x0080) #define PROCESS_SET_QUOTA (0x0100) #define PROCESS_SET_INFORMATION (0x0200) #define PROCESS_QUERY_INFORMATION (0x0400) #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)这表示 PROCESS_ALL_ACCESS 已经获得了所有的权限,还有什么办法获得更多的权限吗? 在nt系统如果要打开系统进程要先加载调试权限:AddPrivilege(SE_DEBUG_NAME);/*---------------------------------------------------------------------//AddPrivilege.c//Coder: sjdf//E-mail: [email protected]//Create date: 2003.10.6//Last modify date: 2003.10.8//Compiler: LCC 3.8//Test platform: Win2000 Adv Server + sp4---------------------------------------------------------------------*/#ifdef _DEBUG#include <stdio.h>#endif#include <windows.h>//---------------------------------------------------------------------//为当前进程增加指定的特权,Name为特权名,成功返回0,失败返回1int AddPrivilege(const char *Name);//---------------------------------------------------------------------//为当前进程增加指定的特权int AddPrivilege(const char *Name){ HANDLE hToken; TOKEN_PRIVILEGES tp; LUID Luid; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken)) { #ifdef _DEBUG printf("OpenProcessToken error.\n"); #endif return 1; } if (!LookupPrivilegeValue(NULL,Name,&Luid)) { #ifdef _DEBUG printf("LookupPrivilegeValue error.\n"); #endif return 1; } tp.PrivilegeCount = 1; tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; tp.Privileges[0].Luid = Luid; if (!AdjustTokenPrivileges(hToken, 0, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL)) { #ifdef _DEBUG printf("AdjustTokenPrivileges error.\n"); #endif return 1; } return 0;}//--------------------------------------------------------------------- 谁能帮我解释一下WMP组件的OpenStateChange,PlayStateChange和StatusChange之间的区别? 在线等,急救 毕业设计遇到麻烦了 请问iWebOffice2003是用什么做的? 封包截取发送问题 安装驱动程序是,禁止弹出“数字签名”对话框。 100分 关于CSocket的一个小问题,请帮忙解决。 如何用get_onclick()?在现等待! 如何设置一个占全屏的最大化的对话框? 怎么样写出VC6这样的interface? 求正则表达式 什么是DBCS? 怎样重绘主框架!!! 急!!!
//获取所有的权限
PROCESS_VM_READ,TRUE,dwProcessId);
2.访问权限的定义:
#define PROCESS_TERMINATE (0x0001)
#define PROCESS_CREATE_THREAD (0x0002)
#define PROCESS_SET_SESSIONID (0x0004)
#define PROCESS_VM_OPERATION (0x0008)
#define PROCESS_VM_READ (0x0010)
#define PROCESS_VM_WRITE (0x0020)
#define PROCESS_DUP_HANDLE (0x0040)
#define PROCESS_CREATE_PROCESS (0x0080)
#define PROCESS_SET_QUOTA (0x0100)
#define PROCESS_SET_INFORMATION (0x0200)
#define PROCESS_QUERY_INFORMATION (0x0400)
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
这表示 PROCESS_ALL_ACCESS 已经获得了所有的权限,还有什么办法获得更多的权限吗?
//AddPrivilege.c
//Coder: sjdf
//E-mail: [email protected]
//Create date: 2003.10.6
//Last modify date: 2003.10.8
//Compiler: LCC 3.8
//Test platform: Win2000 Adv Server + sp4
---------------------------------------------------------------------*/
#ifdef _DEBUG
#include <stdio.h>
#endif#include <windows.h>
//---------------------------------------------------------------------
//为当前进程增加指定的特权,Name为特权名,成功返回0,失败返回1
int AddPrivilege(const char *Name);
//---------------------------------------------------------------------
//为当前进程增加指定的特权
int AddPrivilege(const char *Name)
{
HANDLE hToken;
TOKEN_PRIVILEGES tp;
LUID Luid; if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,
&hToken))
{
#ifdef _DEBUG
printf("OpenProcessToken error.\n");
#endif
return 1;
} if (!LookupPrivilegeValue(NULL,Name,&Luid))
{
#ifdef _DEBUG
printf("LookupPrivilegeValue error.\n");
#endif
return 1;
} tp.PrivilegeCount = 1;
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
tp.Privileges[0].Luid = Luid; if (!AdjustTokenPrivileges(hToken,
0,
&tp,
sizeof(TOKEN_PRIVILEGES),
NULL,
NULL))
{
#ifdef _DEBUG
printf("AdjustTokenPrivileges error.\n");
#endif
return 1;
} return 0;
}
//---------------------------------------------------------------------