windows源码分析(14)-权限管理篇
代码仓库管理规定(3篇)

第1篇第一章总则第一条为规范代码仓库的管理,确保代码质量,提高开发效率,保障信息安全,特制定本规定。
第二条本规定适用于公司内部所有代码仓库,包括但不限于公共仓库、项目仓库和个人仓库。
第三条代码仓库的管理应遵循以下原则:1. 安全性:确保代码仓库的安全性,防止未经授权的访问和篡改。
2. 可靠性:确保代码仓库的稳定运行,保障代码的可靠存储和访问。
3. 一致性:确保代码仓库中代码的一致性,避免版本冲突和错误。
4. 可维护性:确保代码仓库的可维护性,便于代码的更新和维护。
5. 透明性:确保代码仓库的管理透明,便于团队成员之间的协作和监督。
第二章代码仓库分类第四条代码仓库分为以下几类:1. 公共仓库:存放公司公共代码库,如通用工具、库文件等。
2. 项目仓库:存放各个项目的代码,包括源代码、配置文件等。
3. 个人仓库:存放个人开发者的代码,如个人工具、实验性项目等。
第三章代码仓库权限管理第五条代码仓库权限分为以下几级:1. 读取权限:允许用户查看代码仓库中的文件和目录。
2. 写入权限:允许用户向代码仓库中添加、修改、删除文件和目录。
3. 管理权限:允许用户管理代码仓库的权限、备份、恢复等操作。
第六条权限分配原则:1. 公共仓库:默认对所有员工开放读取权限,根据实际需求分配写入和管理权限。
2. 项目仓库:根据项目组成员的职责分配权限,项目负责人拥有最高权限,其他成员根据职责分配读取、写入权限。
3. 个人仓库:默认只有仓库拥有者拥有全部权限,如需共享,可申请权限分配。
第七条权限变更:1. 权限变更需经过相关部门审批,审批通过后方可进行权限调整。
2. 权限调整需及时通知相关成员,确保信息透明。
第四章代码提交规范第八条代码提交应遵循以下规范:1. 提交前应进行代码审查,确保代码质量。
2. 每次提交应包含一个清晰的提交说明,描述提交的内容和目的。
3. 提交应遵循以下命名规范:a. 提交者:姓名或昵称b. 提交日期:格式为YYYY-MM-DDc. 提交内容:简洁明了地描述提交的内容和目的4. 提交代码应遵循编码规范,确保代码可读性和可维护性。
window 获取system权限的方法

window 获取system权限的方法
在Windows操作系统中,获取system权限是一项重要且常见的任务。
系统权限允许用户执行特权操作,并对操作系统的核心组件进行更改。
在本文中,我们将介绍几种常用的方法来获取system权限。
方法一:使用提升的权限运行命令提示符
1. 首先,右击“开始”按钮,在弹出的菜单中选择“命令提示符(管理员)”。
2. 接下来,系统会询问您是否允许此应用进行更改,单击“是”以继续。
3. 弹出的命令提示符窗口将以管理员权限运行,您将拥有更高的权限。
方法二:使用系统配置工具(MSConfig)
1. 按下Windows键+R,打开运行对话框。
2. 在对话框中键入“msconfig”,然后按下回车键,打开系统配置工具。
3. 在工具中,选择“引导”选项卡,然后勾选“安全模式”和“网络”选项。
4. 单击“应用”并重启计算机。
5. 计算机重新启动后,它将进入安全模式。
在安全模式下,系统权限会自动提升。
方法三:使用Windows凭据管理器
1. 按下Windows键+R,打开运行对话框。
2. 在对话框中键入“control keymgr.dll”,然后按下回车键。
3. 弹出的Windows凭据管理器允许您保存和管理登录凭据。
您可以在其中编辑凭据,并将其关联到需要系统权限的账户。
请注意,获取system权限是一项敏感操作,并且应谨慎使用。
在进行任何更改之前,请确保您了解操作的后果,并始终备份重要数据。
源代码安全管理制度范文(3篇)

源代码安全管理制度范文1. 目的与背景源代码是软件开发的核心资产,对源代码的安全管理是确保软件系统的可靠性、可持续发展的重要保障。
本制度的目的是建立一套完善的源代码安全管理制度,保障源代码的安全性、保密性和完整性,提高软件系统安全等级。
2. 适用范围本制度适用于所有涉及到开发、维护和管理源代码的组织或个人,包括但不限于开发团队、项目管理人员和源代码管理人员等。
3. 定义3.1 源代码:指软件系统开发过程中的所有程序文件、配置文件、文档文件等,包括代码、注释、变量名、函数名等。
3.2 源代码管理:指对源代码进行版本控制、备份、权限控制、审计等操作。
3.3 源代码安全:指源代码在传输、存储和使用过程中不被未经授权的人员获取、篡改或破坏的状态。
4. 源代码安全管理制度4.1 源代码的访问控制4.1.1 源代码仅限授权人员访问,禁止未经授权的人员查看、修改或复制源代码。
4.1.2 管理员应当按照权限分级原则,对不同级别的人员进行源代码的访问控制。
4.1.3 禁止将源代码以任何形式发送至非安全的通信渠道,包括但不限于公共邮箱和社交媒体平台。
4.2 版本控制4.2.1 源代码应当采用版本控制系统进行管理,确保代码的变更历史可追溯、可审计。
4.2.2 禁止将代码以非法拷贝、合并或挪用的方式进行版本控制操作。
4.2.3 每一次代码变更都应当附带合理的变更说明,并记录在版本控制系统中。
4.3 安全传输与存储4.3.1 源代码在传输过程中应当采用安全的加密协议和通道,禁止明文传输。
4.3.2 源代码应当定期进行备份,并将备份数据存储在安全可靠的物理或虚拟环境中。
4.3.3 外部承包商或合作伙伴在存储源代码时,应当遵守与组织签订的保密协议和安全要求。
4.4 审计与监控4.4.1 源代码管理系统应当具备审计功能,记录源代码的访问、修改、备份和恢复等操作。
4.4.2 审计日志应当保存在安全可靠的位置,并根据需要进行定期审计。
9.windows权限提升

9.windows权限提升0x01. windows提权介绍1. Windows提权介绍提权可分为纵向提权与横向提权 :纵向提权 : 低权限⾓⾊获得⾼权限⾓⾊的权限普通⽤户权限提升为system权限域⽤户权限提升为域控权限横向提权 : 获取同级别⾓⾊的权限普通⽤户到普通⽤户,域⽤户到域⽤户Windows常⽤的提权⽅法有:系统内核溢出漏洞提权、数据库提权、错误的系统配置提权、组策略⾸选项提权、WEB中间件漏洞提权、DLL劫持提权、滥⽤⾼危权限令牌提权、第三⽅软件/服务提权等。
C:\Windows\\Framework64\v4.0.30319>csc.exe /unsafe /platform:x86 /out:C:\\Windows\\Temp\\ctcse.exe C:\\Windows\\Temp\\InstallUtil-ShellCode.cs InstallUtil.exe /logfile= /LogToConsole=false /U C:\\Windows\\Temp\\ctcse.exe2. 安全标识符(SID)安全标识符在 windows 中,系统是通过SID对⽤户进⾏识别的,⽽不是很多⽤户认为的 "⽤户名称"。
SID可以应⽤于系统内的所有⽤户、组、服务或计算机,因为SID是⼀个具有惟⼀性、绝对不会重复产⽣的数值,所以,在删除了⼀个账户(如名为"A"的账户)后,再次创建这个"A"账户时,前⼀个A与后⼀个A账户的SID是不相同的。
这种设计使得账户的权限得到了最基础的保护,盗⽤权限的情况也就彻底杜绝了。
查看⽤户、组、服务或计算机的SID值,可以使⽤ " Whoami /all " 命令来执⾏。
3. UACUAC (User Account Control),中⽂翻译为⽤户帐户控制,是微软在Windows Vista和Windows7中引⽤的新技术,主要功能是进⾏⼀些会影响系统安全的操作时,会⾃动触发UAC⽤户确认后才能执⾏。
Windows之权限讲解

Windows之权限讲解windows中,权限指的是不同账户对文件,文件夹,注册表等的访问能力。
在windows中,为不同的账户设置权限很重要,可以防止重要文件被其他人所修改,使系统崩溃。
1权限概念我们可以在控制面板中设置账户时设置权限,使用文件时也可以为文件设置权限。
2权限定义Windows XP提供了非常细致的权限控制项,能够精确定制用户对资源的访问控制能力,大多数的权限从其名称上就可以基本了解其所能实现的内容。
" 权限"(Permission)是针对资源而言的。
也就是说,设置权限只能是以资源为对象,即"设置某个文件夹有哪些用户可以拥有相应的权限",而不能是以用户为主,即"设置某个用户可以对哪些资源拥有权限"。
这就意味着"权限"必须针对"资源"而言,脱离了资源去谈权限毫无意义──在提到权限的具体实施时,"某个资源"是必须存在的。
利用权限可以控制资源被访问的方式,如User组的成员对某个资源拥有"读取"操作权限、Administrators组成员拥有"读取+写入+删除"操作权限等。
值得一提的是,有一些Windows用户往往会将"权利"与"权限"两个非常相似的概念搞混淆,这里做一下简单解释:“权利"(Right)主要是针对用户而言的。
"权力"通常包含"登录权力" (Logon Right)和"特权"(Privilege)两种。
登录权力决定了用户如何登录到计算机,如是否采用本地交互式登录、是否为网络登录等。
特权则是一系列权力的总称,这些权力主要用于帮助用户对系统进行管理,如是否允许用户安装或加载驱动程序等。
显然,权力与权限有本质上的区别。
如何使用权限管理避免系统数据丢失(一)

如何使用权限管理避免系统数据丢失在信息时代,数据已经成为企业最宝贵的资产之一。
然而,数据丢失却是一个常见的问题,给企业带来了重大损失。
为了避免系统数据的丢失,权限管理起着至关重要的作用。
本文将就如何使用权限管理来防止系统数据丢失进行探讨。
一、权限管理的基本概念和原理权限管理是指通过授权,将系统中的访问权限以及操作权限分配给不同的用户或组织,以确保系统安全和数据完整。
权限管理的核心原则是最小权限原则,即用户只能获得执行工作所必需的最低权限,这样可以减少潜在的风险和错误。
二、建立权限策略要有效地使用权限管理来防止系统数据丢失,企业需要建立一套完整的权限策略。
首先,需要对用户的角色和职责进行明确定义,并根据其需要的数据权限进行划分。
其次,根据不同职责和角色,建立相应的权限组,并将用户分配到合适的组中。
最后,制定权限变更和审计措施,确保权限的合规性和可追溯性。
三、数据备份和恢复权限管理不仅仅是对系统中的访问和操作进行控制,还包括对数据进行备份和恢复。
良好的权限管理应当配合定期的数据备份,以防止数据丢失和恢复。
通过备份,即使发生系统故障或数据丢失,也可以迅速恢复数据,避免重大损失。
四、权限的监控与审计权限监控和审计是权限管理的重要环节,可以及时发现和防范潜在的安全威胁。
通过权限监控,可以实时跟踪用户的访问和操作行为,并记录下来,以便于后续审计。
同时,审计可以通过分析权限使用情况,检测潜在的风险和异常行为,提前预防数据丢失的发生。
五、员工培训和意识提高除了建立完善的权限管理体系,企业还需要加强员工的培训和意识提高。
员工是企业信息安全的第一道防线,只有他们具备正确的权限使用和保护意识,才能有效地执行权限管理策略。
因此,企业应当定期开展培训,提高员工对权限管理重要性的认识,并教育他们正确使用权限来保护系统数据。
六、杜绝滥用权限和内部威胁权限管理不仅仅是为了防止系统数据的丢失,还可以防止权限的滥用和内部威胁。
通过权限管理,可以限制某些用户对敏感数据的访问权限,防止信息泄露和滥用。
工程项目管理源代码(3篇)

第1篇摘要:随着我国经济的快速发展,工程项目管理在各个行业中的地位日益凸显。
工程项目管理源代码作为工程项目管理的重要工具,能够有效地提高工程项目的管理效率和质量。
本文将介绍工程项目管理源代码的基本概念、功能特点、实现方法以及在实际应用中的优势。
一、引言工程项目管理源代码是一种基于计算机技术的工程项目管理工具,它能够将工程项目的管理过程、信息、资源等有机地整合在一起,为项目管理人员提供全面、高效、便捷的项目管理服务。
工程项目管理源代码的开发和应用,有助于提高工程项目的管理水平,降低项目成本,缩短项目周期。
二、工程项目管理源代码的基本概念1. 概念工程项目管理源代码是指使用编程语言编写,用于实现工程项目管理功能的计算机程序。
它主要包括项目计划、进度管理、资源管理、成本管理、质量管理、风险管理等模块。
2. 特点(1)模块化设计:工程项目管理源代码采用模块化设计,将项目管理的各个功能模块进行封装,便于用户根据实际需求进行选择和配置。
(2)易于扩展:工程项目管理源代码具有良好的可扩展性,用户可以根据实际需求添加新的功能模块,满足不同类型工程项目的管理需求。
(3)易用性:工程项目管理源代码操作简便,用户界面友好,易于学习和使用。
(4)数据安全性:工程项目管理源代码采用加密技术,确保项目数据的安全性和保密性。
三、工程项目管理源代码的功能特点1. 项目计划管理(1)制定项目计划:工程项目管理源代码可以根据项目需求,制定详细的项目计划,包括项目目标、进度、资源、成本等。
(2)项目进度跟踪:实时跟踪项目进度,确保项目按计划进行。
(3)项目调整:根据实际情况,对项目计划进行调整,确保项目目标的实现。
2. 资源管理(1)资源分配:合理分配项目资源,包括人力、设备、材料等。
(2)资源调度:根据项目进度,实时调整资源分配,确保项目顺利进行。
(3)资源利用率分析:分析项目资源利用率,提高资源利用效率。
3. 成本管理(1)成本估算:根据项目需求,估算项目成本。
Windows系统权限详解

“所有人”权限与普通用户组权限差不多,它的存在是为了让用户能访问被标记为“公有”的文件,这也是一些程序正常运行需要的访问权限——任何人都能正常访问被赋予“Everyone”权限的文件,包括来宾组成员。
被标记为“创建者”权限的文件只有建立文件的那个用户才能访问,做到了一定程度的隐私保护。
但是,所有的文件访问权限均可以被管理员组用户和SYSTEM成员忽略,除非用户使用了NTFS加密。
首先,我们要尽量避免平时使用管理员账户登录系统,这样会让一些由IE带来的病毒木马因为得不到相关权限而感染失败,但是国内许多计算机用户并没有意识到这一点,或者说没有接触到相关概念,因而大部分系统都是以管理员账户运行的,这就给病毒传播提供了一个很好的环境。如果用户因为某些工作需要,必须以管理员身份操作系统,那么请降低IE的运行权限,有试验证明,IE运行的用户权限每降低一个级别,受漏洞感染的几率就相应下降一个级别,因为一些病毒在例如像Users组这样的权限级别里是无法对系统环境做出修改的。降低IE运行权限的方法很多,最简单的就是使用微软自家产品“Drop MyRights”对程序的运行权限做出调整。(图.用RunAs功能降低IE运行级别)
2.特殊权限
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
windows源码分析(14)-权限管理篇Windows系统是支持多用户的。
每个文件可以设置一个访问控制表(即ACL),在ACL中规定每个用户、每个组对该文件的访问权限。
不过,只有Ntfs文件系统中的文件才支持ACL。
(Ntfs文件系统中,每个文件的ACL是作为文件的一个附加属性保存在文件中的)。
不仅ntfs文件支持ACL机制,每个内核对象也支持ACL,不过内核对象的ACL保存在对象头部的安全属性字段中,只存在于内存,对象一销毁,ACL就跟着销毁。
因此,内核对象的ACL是临时的,文件的ACL则是永久保存在磁盘上的。
文件的ACL由文件的创建者设置后保存在文件中,以后只有创建者和管理员才可以修改ACL,内核对象的ACL由对象的创建者在创建时指定。
Windows系统中为每个用户、组、机器指定了一个ID,叫SID。
每个用户登录到系统后,每当创建一个进程时,就会为进程创建一个令牌(进程的令牌叫主令牌),该令牌包含了用户、组、特权信息。
由于子进程在创建时会继承父进程的令牌,所以一个用户创建的所有进程的令牌都是一样的,包含着相同的用户、组、特权等其他信息,只是令牌ID不同而已。
换个角度看,令牌实际上相当于用户身份,进程要访问对象时,就出示它的令牌让系统检查,向系统表明自己是谁,在哪几个组中。
这样,当有了令牌和ACL后,当一个进程(准确说是线程)要访问一个对象时,系统就会检查该进程的令牌,申请的访问权限,然后与ACL比较,看看是否满足权限,不满足的话就拒绝访问。
下面我们看看相关的数据结构typedef struct _SID { //用户ID、组ID、机器IDUCHAR Revision;//版本号UCHAR SubAuthorityCount;//RID数组元素个数,即ID级数,最大支持8级SID_IDENTIFIER_AUTHORITY IdentifierAuthority;//该ID的签发机关,6B长ULONG SubAuthority[ANYSIZE_ARRAY];//RID数组,即N级ID} SID, *PISID;一个ID就像一个文件路径一样,由签发机关 + N级ID组成。
Windows中有几种预定义的签发机关#define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0} #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1} //世界签发机关 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2} //本机签发机关 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}#define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4} #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5} //NT域签发机关 #defineSECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}typedef struct _TOKEN{TOKEN_SOURCE TokenSource;LUID TokenId; 令牌IDLUID AuthenticationId;LUID ParentTokenId;LARGE_INTEGER ExpirationTime; 过期时间struct _ERESOURCE *TokenLock;SEP_AUDIT_POLICY AuditPolicy;LUID ModifiedId;ULONG SessionId;ULONG UserAndGroupCount; 含有的用户、组总数ULONG RestrictedSidCount;ULONG PrivilegeCount; 含有的特权数量ULONG VariableLength;ULONG DynamicCharged;ULONG DynamicAvailable;ULONG DefaultOwnerIndex; 令牌的默认拥有者在UserAndGroups数组中的位置PSID_AND_ATTRIBUTES UserAndGroups; 关键。
包含的一个用户、N个组(一个‘数组’)PSID_AND_ATTRIBUTES RestrictedSids;PSID PrimaryGroup; 令牌的基本组ID(即拥有者所属的基本组)PLUID_AND_ATTRIBUTES Privileges; 关键。
包含的特权PULONG DynamicPart;PACL DefaultDacl;TOKEN_TYPE TokenType; 令牌类型(自己的/模拟的)SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; 模拟级别ULONG TokenFlags;BOOLEAN TokenInUse; 是否已被指派成了某个进程的令牌PVOID ProxyData;PVOID AuditData;LUID OriginatingLogonSession;ULONG VariablePart;} TOKEN, *PTOKEN;一个令牌最重要的信息便是它所包含的【特权、用户、组】下面的函数用于创建一个SIDNTSTATUSRtlAllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY IdentifierAuthority,//签发机关UCHAR SubAuthorityCount,//级数ULONG SubAuthority0,ULONG SubAuthority1,ULONG SubAuthority2,ULONG SubAuthority3,ULONG SubAuthority4,ULONG SubAuthority5,ULONG SubAuthority6,ULONG SubAuthority7,PSID *Sid) //返回{PISID pSid;if (SubAuthorityCount > 8)return STATUS_INVALID_SID;pSid =RtlpAllocateMemory(RtlLengthRequiredSid(SubAuthorityCount),TAG_SID);pSid->Revision = SID_REVISION;//固定为1pSid->SubAuthorityCount = SubAuthorityCount;//级数memcpy(&pSid->IdentifierAuthority,IdentifierAuthority,sizeof(SID_IDENTIFIER_AUTHORITY ));switch (SubAuthorityCount){case 8:pSid->SubAuthority[7] = SubAuthority7;case 7:pSid->SubAuthority[6] = SubAuthority6;case 6:pSid->SubAuthority[5] = SubAuthority5;case 5:pSid->SubAuthority[4] = SubAuthority4;case 4:pSid->SubAuthority[3] = SubAuthority3;case 3:pSid->SubAuthority[2] = SubAuthority2;case 2:pSid->SubAuthority[1] = SubAuthority1;case 1:pSid->SubAuthority[0] = SubAuthority0;break;}*Sid = pSid;return STATUS_SUCCESS;}SID本身是一个结构体,但SID还有另外一种通俗的表示法:“S-版本号-签发机关-N级ID”。
如“S-1-5-23223-23422-286-1025”表示系统中的第24个用户,就是一个4级的SID,其中签发机关为5,表示NT域。
Windows中预定义了些常见的组ID,如S-1-1-0表示everyone组S-1-2-0表示Users组S-1-3-0表示Creators组前面说了,一个进程在创建时会继承它父进程的令牌,我们看NTSTATUS PspInitializeProcessSecurity(IN PEPROCESS Process, IN PEPROCESS Parent OPTIONAL){NTSTATUS Status = STATUS_SUCCESS;PTOKEN NewToken, ParentToken;if (Parent){ParentToken = PsReferencePrimaryToken(Parent);//获得父进程的令牌//克隆父进程的令牌(但令牌ID不同)Status = SeSubProcessToken(ParentToken,&NewToken,TRUE,0);ObFastDereferenceObject(&Parent->Token, ParentToken);if (NT_SUCCESS(Status))ObInitializeFastReference(&Process->Token, NewToken);//设置为子进程的令牌}else{ObInitializeFastReference(&Process->Token, NULL);SeAssignPrimaryToken(Process, PspBootAccessToken);//指派令牌}return Status;}这样,同属于一个用户创建的所有进程的令牌都是一样的,本来就应该如此。
但是进程不是行为的主体,具体要去访问对象时,不是由进程去访问,而是由线程去访问。
所以,每个线程也得有令牌。
默认情况下,每个线程的令牌就是其所属进程的令牌。
但是,线程可以模拟使用其他进程的令牌,用来以其他线程的名义去访问对象。
为此,ETHREAD结构中有一个ImpersonationInfo字段,是一个PS_IMPERSONATION_INFORMATION结构指针,记录了该线程使用的模拟令牌信息。
下面的函数用来创建一个令牌(令牌本身也是一种内核对象)NTSTATUSNtCreateToken(OUT PHANDLE TokenHandle,//返回句柄IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes,IN TOKEN_TYPE TokenType,//主令牌/模拟令牌IN PLUID AuthenticationId,IN PLARGE_INTEGER ExpirationTime,//过期时间IN PTOKEN_USER TokenUser,//该令牌代表的用户IN PTOKEN_GROUPS TokenGroups,//该令牌含有的所有组IN PTOKEN_PRIVILEGES TokenPrivileges,//该令牌含有的所有特权IN PTOKEN_OWNER TokenOwner,//令牌的默认拥有者IN PTOKEN_PRIMARY_GROUP TokenPrimaryGroup,//令牌的基本组IN PTOKEN_DEFAULT_DACL TokenDefaultDacl,//默认的ACLIN PTOKEN_SOURCE TokenSource) {HANDLE hToken;KPROCESSOR_MODE PreviousMode;ULONG nTokenPrivileges = 0;LARGE_INTEGER LocalExpirationTime = {{0, 0}};NTSTATUS Status;PreviousMode = ExGetPreviousMode();if (PreviousMode != KernelMode)//if来自用户模式发起的调用{_SEH2_TRY{ProbeForWriteHandle(TokenHandle);ProbeForRead(AuthenticationId,sizeof(LUID),sizeof(ULONG));LocalExpirationTime = ProbeForReadLargeInteger(ExpirationTime);ProbeForRead(TokenUser,sizeof(TOKEN_USER),sizeof(ULONG));ProbeForRead(TokenGroups,sizeof(TOKEN_GROUPS),sizeof(ULONG));ProbeForRead(TokenPrivileges,sizeof(TOKEN_PRIVILEGES),sizeof(ULONG));ProbeForRead(TokenOwner,sizeof(TOKEN_OWNER),sizeof(ULONG));ProbeForRead(TokenPrimaryGroup,sizeof(TOKEN_PRIMARY_GROUP),sizeof(UL ONG));ProbeForRead(TokenDefaultDacl,sizeof(TOKEN_DEFAULT_DACL),sizeof(ULON G));ProbeForRead(TokenSource,sizeof(TOKEN_SOURCE),sizeof(ULONG));nTokenPrivileges = TokenPrivileges->PrivilegeCount;}。