进程中的安全性和访问权限

微软Windows安全模式,使您能够控制访问过程对象。如需有关安全性的详细信息,请参阅访问控制模型。

当用户登录时,系统会收集一组数据的唯一标识用户在认证过程中,它存储在一个访问令牌。这个访问令牌描述与用户关联的所有进程的安全上下文。一个进程的安全上下文是给进程或用户帐户的创建过程的凭据集。

您可以使用为使用CreateProcessWithTokenW功能的过程中指定的当前安全上下文令牌。当你调用CreateProcess,CreateProcessAsUser或CreateProcessWithLogonW函数,你可以指定一个过程的安全描述符。如果指定NULL,这个过程得到了默认的安全描述符。在一个过程中的默认安全描述符ACL得创建默认模拟令牌。
要检索一个进程的安全描述符,调用GetSecurityInfo的功能。要改变一个进程的安全描述符,调用SetSecurityInfo的功能。

过程对象的有效访问权限,包括标准的访问权限和一些特定进程的访问权限。下表列出了所有对象使用标准的访问权利。

DELETE (0x00010000L)要求删除对象。
READ_CONTROL(0x00020000L)阅读对象的安全描述符的信息,不包括SACL中的信息。读或写的SACL,你必须要求的ACCESS_SYSTEM_SECURITY访问权。欲了解更多信息,请参阅SACL的访问权。
SYNCHRONIZE (0x00100000L)使用权,用于同步​​的对象。这使得一个线程等待,直到该对象是在信号状态。
WRITE_DAC(0x00040000L)需要修改为对象的安全描述符中的DACL。
WRITE_OWNER(0x00080000L)需要改变雇主为对象的安全描述符中。

 

下表列出的过程中特定的访问权限。

PROCESS_ALL_ACCESS一个进程对象的所有可能的访问权限。在Windows Server 2008和Windows Vista的Windows Server 2003和Windows XP/2000:PROCESS_ALL_ACCESS的标志大小增加。如果为Windows Server 2008和Windows Vista编写的应用程序运行在WindowsServer2003WindowsXP/2000PROCESS_ALL_ACCESS的标志是太大,并指定此标志的功能与ERROR_ACCESS_DENIED失败。为了避免这个问题,指定一套操作所需的最低访问权限。如果必须使用PROCESS_ALL_ACCESS的,设置_WIN32_WINNT针对您的应用程序的最低操作系统(例如,
#define_WIN32_WINNT _WIN32_WINNT_WINXP。
)。欲了解更多信息,请参阅使用Windows头文件。

PROCESS_CREATE_PROCESS(0x0080)的要求,以创建一个进程。
PROCESS_CREATE_THREAD(0x0002来)要求,以创建一个线程。
PROCESS_DUP_HANDLE(0x0040)需要使用DuplicateHandle复制一个句柄。
PROCESS_QUERY_INFORMATION(0x0400)需要一个过程,如它的所述,退出代码,和优先级(见OpenProcessToken,GetExitCodeProcess,GetPriorityClass,并IsProcessInJob),检索某些信息。
PROCESS_QUERY_LIMITED_INFORMATION(0x1000)需要某些信息检索有关进程(见QueryFullProcessImageName)。句柄具有PROCESS_QUERY_INFORMATION的访问权是自动授予PROCESS_QUERY_LIMITED_INFORMATION。
Windows Server 2003和Windows XP/2000的:不支持这种访问权。
PROCESS_SET_INFORMATION(0x0200)必须设置一个进程的某些信息,例如其的优先级,(见SetPriorityClass)。
PROCESS_SET_QUOTA(0x0100)必须设置内存限制使用SetProcessWorkingSetSize。
PROCESS_SUSPEND_RESUME(为0x0800)要求暂停或恢复过程。
PROCESS_TERMINATE(0x0001)需要终止一个进程使用TerminateProcess。
PROCESS_VM_OPERATION(0x0008处)需要执行一个操作上的一个进程的地址空间(见VirtualProtectEx和WriteProcessMemory)。
PROCESS_VM_READ(0x0010处)须在过程中使用ReadProcessMemory读取内存。
PROCESS_VM_WRITE(0x0020)写入使用WriteProcessMemory过程中的内存。
同步(0x00100000L)需要等待的过程终止使用等待功能。

 

打开一个到另一个进程的句柄,并获得充分的访问权限,您必须启用SeDebugPrivilege特权。欲了解更多信息,请参阅更改令牌的特权。

由CreateProcess函数返回的句柄的进程对象具有PROCESS_ALL_ACCESS的访问。当你调用调用OpenProcess函数,系统会检查请求的访问权限,对进程的安全描述符中的DACL。当你调用的GetCurrentProcess功能,系统返回的最大访问的DACL允许调用者一个pseudohandle。

如果你要读取或写入对象的SACL的,你可以要求一个进程对象有权ACCESS_SYSTEM_SECURITY访问。有关更多信息,请访问控制列表(ACL)和SACL的访问权。

警告的过程中,已注意到这里的一些访问权限可以用它们来获得其他的访问权限。例如,如果进程A有一个句柄处理乙PROCESS_DUP_HANDLE访问,它可以复制过程B的伪句柄,这将创建一个句柄,拥有最大的访问处理B.伪句柄的更多信息,请参阅GetCurrentProcess。

受保护进程
Windows Vista引入了受保护的进程,以加强数字版权管理的支持。该系统限制访问受保护的进程和保护进程中的线程。

以下的标准访问权限不允许从一个过程到受保护的进程:

删除
READ_CONTROL
的WRITE_DAC
WRITE_OWNER
以下具体的访问权限不允许从一个过程到受保护的进程:

PROCESS_ALL_ACCESS的
PROCESS_CREATE_PROCESS
PROCESS_CREATE_THREAD
PROCESS_DUP_HANDLE
PROCESS_QUERY_INFORMATION
PROCESS_SET_INFORMATION
PROCESS_SET_QUOTA
PROCESS_VM_OPERATION
PROCESS_VM_READ
PROCESS_VM_WRITE
PROCESS_QUERY_LIMITED_INFORMATION权利提供信息可通过PROCESS_QUERY_INFORMATION的一个子集的访问。