Win32编程常用函数-advapi32库
某些函数需要特殊 权限 才能正确运行。
在某些情况下,函数只能由某些用户或特定组的成员运行。 最常见的要求是用户是本地管理员。 其他函数要求用户帐户启用特定权限。 为了降低未经授权的代码能够获得控制权的可能性,系统应以所需的最低特权运行。 需要调用需要特殊权限的函数的应用程序可能会使系统保持开放状态,以受到黑客的攻击。 此类应用程序应设计为短时间运行,并应告知用户所涉及的安全隐患。 使用管理员权限运行 确定应用程序需要在哪种类型的帐户下运行的第一步是检查应用程序将使用的资源以及它将调用哪些特权 API。 你可能会发现应用程序或其大部分不需要管理员权限。 Michael Howard 和 David LeBlanc 撰写的安全代码很好地介绍了如何进行此评估,强烈建议使用。 (此资源可能在某些语言和国家/地区不可用。) 可以通过使用以下方法之一来提供应用程序所需的特权,减少受到恶意攻击的风险: 在特权较低的帐户下运行。 执行此操作的一种方法是使用 PrivilegeCheck 来确定令牌中启用了哪些权限。 如果可用权限不足以执行当前操作,则可以禁用该代码,并要求用户使用管理员权限登录到帐户。 闯入需要管理员权限的单独应用程序功能。 可以为用户提供执行 RunAs 命令的快捷方式。 有关如何设置快捷方式的详细说明,请在“帮助”中搜索“runas”。 可以通过编程方式为应用程序配置 AppId Key 注册表项下的 RunAs 命令。 通过调用 CredUIPromptForCredentials (GUI) 或 CredUICmdLinePromptForCredentials (命令行) 对用户进行身份验证,以获取用户名和密码。 模拟用户。 在系统等高特权帐户下启动的进程可以通过调用 ImpersonateLoggedOnUser 或类似的 Impersonate 函数来模拟用户帐户,从而降低特权级别。 但是,如果将对 RevertToSelf 的调用注入到线程中,则进程将返回到原始系统特权。 如果已确定应用程序必须在具有管理员特权的帐户下运行,并且管理员密码必须存储在软件系统中, 请参阅 处理密码 ,了解安全执行此操作的方法。 向用户询问凭据 应用程序可能需要提示用户输入用户名和密码信息,以避免存储管理员密码或验证令牌是否具有适当的权限。 但是,仅提示输入凭据可能会训练用户将这些凭据提供给屏幕上显示的任何随机、未识别的对话框。 建议执行以下过程来降低训练效果。 正确获取用户凭据 通过使用明确属于应用程序的消息通知用户,他们将看到一个对话框,请求其用户名和密码。 还可以在调用 CredUIPromptForCredentials 时使用 CREDUI_INFO 结构来传达标识数据或消息。 调用 CredUIPromptForCredentials。 请注意,为用户名和密码信息指定的最大字符数包括终止 null 字符。 调用 CredUIParseUserName 和 CredUIConfirmCredentials 以验证是否获得了适当的凭据。 以下示例演示如何调用 CredUIPromptForCredentials 以要求用户输入用户名和密码。 首先,使用有关使用提示的信息填充CREDUI_INFO结构。 接下来,代码用零填充两个缓冲区。 这样做是为了确保不会将任何信息传递给可能会向用户显示旧用户名或密码的函数。 调用 CredUIPromptForCredentials 将打开对话框。 出于安全原因,此示例使用 CREDUI_FLAGS_DO_NOT_PERSIST 标志来阻止操作系统存储密码,因为随后可能会公开密码。 如果没有错误, CredUIPromptForCredentials 将填充 pszName 和 pszPwd 变量并返回零。 应用程序使用完凭据后,应在缓冲区中放置零,以防止意外泄露信息。 更改令牌中的特权 可以通过两种方式更改主要令牌或模拟令牌中的特权: 使用 AdjustTokenPrivileges 函数启用或禁用特权。 使用 CreateRestrictedToken 函数限制或删除特权。 AdjustTokenPrivileges 无法添加或删除令牌中的特权。 它只能启用当前已禁用的现有特权或禁用当前启用的现有特权。 若要向用户帐户分配权限,请参阅 向帐户分配特权。 CreateRestrictedToken 具有更广泛的功能,如下所示: 删除权限。 请注意,删除权限与禁用权限不同。 从令牌中删除权限后,无法将其放回。 将仅拒绝属性附加到令牌中的 SID。 这具有禁止特定组或帐户的效果, 例如,拒绝“每个人”组删除对特定文件的访问权限。 有关限制 SID 的详细信息,请参阅 访问令牌中的 SID 属性。 指定令牌中限制 SID 的列表。 有关限制 SID 的信息,请参阅 受限令牌。 可以通过使用本地安全策略 Microsoft 管理控制台 (MMC) 管理单元 (Secpol.msc) 或通过调用 LsaAddAccountRights 函数向帐户分配权限。 向帐户分配权限不会影响现有用户令牌。 用户必须注销,然后重新登录才能使用新分配的权限获取访问令牌。 若要使用本地安全策略 MMC 管理单元分配权限,请编辑 安全设置/本地策略/用户权限分配下列出的每个特权的用户列表。 InitiateSystemShutdown 和 InitiateSystemShutdownEx 函数显示一个对话框,通知用户系统正在关闭。 在关闭超时期间, AbortSystemShutdown 函数可能会阻止系统关闭。 Windows Server 2003 和 Windows XP SP1: 如果要关闭的计算机是终端服务服务器, 系统会向所有本地和远程用户显示一个对话框,警告他们已启动关闭。 如果 AbortSystemShutdown 阻止关闭,系统会向用户显示对话框,告知他们服务器不再关闭。 若要阻止本地计算机关闭,调用进程必须具有SE_SHUTDOWN_NAME特权。 若要阻止远程计算机关闭,调用进程必须在远程计算机上具有SE_REMOTE_SHUTDOWN_NAME特权。 默认情况下,用户可以在登录的计算机上启用SE_SHUTDOWN_NAME特权, 管理员可以在远程计算机上启用SE_REMOTE_SHUTDOWN_NAME特权。 失败的常见原因包括计算机名称无效、计算机不可访问或权限不足。 若要关闭本地计算机,调用线程必须具有 SE_SHUTDOWN_NAME 特权。 若要关闭远程计算机,调用线程必须在远程计算机上具有 SE_REMOTE_SHUTDOWN_NAME 特权。 默认情况下,用户可以在登录的计算机上启用 SE_SHUTDOWN_NAME 特权, 管理员可以在远程计算机上启用 SE_REMOTE_SHUTDOWN_NAME 特权。 有关详细信息,请参阅使用特殊特权运行。 失败的常见原因包括计算机名无效或不可访问或权限不足。 如果指定的计算机上正在进行关闭,则返回错误 ERROR_SHUTDOWN_IN_PROGRESS 。 如果启用了快速用户切换,但没有用户登录,则可能会返回错误 ERROR_NOT_READY 。 非零返回值并不意味着注销已成功或将成功。 关闭是一个异步过程,它可能在 API 调用已返回后很长时间发生, 也可能根本不发生。 即使超时值为零,应用程序、服务甚至系统仍可能中止关闭。 非零返回值指示权限和参数验证成功,并且系统已接受关闭请求。 调用此函数时,调用方必须指定是否应强制关闭具有未保存更改的应用程序。 如果调用方选择不强制关闭这些应用程序,并且具有未保存更改的应用程序正在控制台会话上运行,则关闭将保持进行状态, 直到登录到控制台会话的用户中止关闭、保存更改、关闭应用程序或强制关闭应用程序。 在此期间,除主机用户外,关闭可能不会中止,并且可能不会启动另一个关闭。 请注意,使用 bForceAppsClosed 参数的值设置为 TRUE 调用此函数可避免这种情况。请记住,这样做可能会导致数据丢失。 Windows Server 2003 和 Windows XP: 如果计算机已锁定,并且 bForceAppsClosed 参数为 FALSE, 则 最后一个错误代码ERROR_MACHINE_LOCKED。 如果系统尚未准备好处理请求,则会 ERROR_NOT_READY最后一个错误代码。 应用程序应稍等片刻,然后重试调用。 例如,如果用户尝试登录系统的同时发出关闭请求,系统可能未准备启动关闭并返回 ERROR_NOT_READY。 在这种情况下,应用程序应稍等片刻,然后重试调用。 特权常量(授权) 权限决定了用户帐户可以执行的系统操作的类型。管理员为用户帐户和组帐户分配权限。 每个用户的权限包括授予用户和用户所属组的权限。 获取和调整访问令牌中的特权的函数使用本地唯一标识符 (LUID) 类型来标识特权。 使用 LookupPrivilegeValue 函数确定本地系统上与特权常量对应的 LUID。 使用 LookupPrivilegeName 函数将 LUID 转换为其相应的字符串常量。 操作系统使用下表的“说明”列中“用户权限”后面的字符串表示特权。 操作系统在本地安全设置 Microsoft 管理控制台 (MMC) 管理单元的“用户权限分配”节点的“策略”列中显示用户权限字符串。关机错误
英文名称 | 常量 | 作用解释 | 用户权限 |
SE_ASSIGNPRIMARYTOKEN_NAME | "SeAssignPrimaryTokenPrivilege" | 需要分配进程的主令牌。 | 替换进程级令牌。 |
SE_AUDIT_NAME | "SeAuditPrivilege" | 需要生成审核日志条目。将此权限授予安全服务器。 | 生成安全审核。 |
SE_BACKUP_NAME | "SeBackupPrivilege" | 需要执行备份操作。此权限使系统授予对任何文件的 所有读取访问控制权,而不考虑为文件指定的访问控制列表 (ACL)。除读取以外的任何访问请求仍使用 ACL 进行评估。RegSaveKey 和 RegSaveKeyEx函数需要此权限。如果持有此权限,则授予以下访问权限 READ_CONTROL,ACCESS_SYSTEM_SECURITY, FILE_GENERIC_READ,FILE_TRAVERSE;如果文件位于可移动驱动器上,并且启用了“审核可移动存储”,则SE_SECURITY_NAME需要具有ACCESS_SYSTEM_SECURITY。 | 备份文件和目录。 |
SE_CHANGE_NOTIFY_NAME | "SeChangeNotifyPrivilege" | 需要接收文件或目录更改的通知。 此权限还会导致系统跳过所有遍历访问检查。 默认情况下,它对所有用户启用。 | 绕过遍历检查。 |
SE_CREATE_GLOBAL_NAME | "SeCreateGlobalPrivilege" | 在终端服务会话期间,需要在全局命名空间中创建命名文件映射对象。默认情况下,为管理员、服务和本地系统帐户启用此权限。 | 创建全局对象。 |
SE_CREATE_PAGEFILE_NAME | "SeCreatePagefilePrivilege" | 创建分页文件是必需的。 | 创建页面文件。 |
SE_CREATE_PERMANENT_NAME | "SeCreatePermanentPrivilege" | 创建永久对象是必需的。 | 创建永久共享对象。 |
SE_CREATE_SYMBOLIC_LINK_NAME | "SeCreateSymbolicLinkPrivilege" | 需要创建符号链接。 | 创建符号链接。 |
SE_CREATE_TOKEN_NAME | "SeCreateTokenPrivilege" | 创建主令牌是必需的。您无法将此权限添加到具有“创建令牌对象”策略的用户帐户。此外,不能使用 Windows API 将此权限添加到拥有的进程。Windows XP SP1 及更早版本:API 可以将此权限添加到拥有的进程。 | 创建令牌对象。 |
SE_DEBUG_NAME | "SeDebugPrivilege" | 需要调试和调整另一个帐户拥有的进程的内存。 | 调试程序。 |
SE_DELEGATE_SESSION_USER_ IMPERSONATE_NAME | "SeDelegateSessionUser ImpersonatePrivilege" | 需要获取同一会话中其他用户的模拟令牌。 | 模拟其他用户。 |
SE_ENABLE_DELEGATION_NAME | "SeEnableDelegationPrivilege" | 需要将用户和计算机帐户标记为受信任的委派。 | 允许信任计算机和用户帐户进行委派。 |
SE_IMPERSONATE_NAME | "SeImpersonatePrivilege" | 需要模拟。 | 身份验证后模拟客户端。 |
SE_INC_BASE_PRIORITY_NAME | "SeIncreaseBasePriorityPrivilege" | 需要提高进程的基本优先级。 | 提高调度优先级。 |
SE_INCREASE_QUOTA_NAME | "SeIncreaseQuotaPrivilege" | 需要增加分配给进程的配额。 | 调整进程的内存配额。 |
SE_INC_WORKING_SET_NAME | "SeIncreaseWorkingSetPrivilege" | 需要为在用户上下文中运行的应用程序分配更多内存。 | 增加进程工作集。 |
SE_LOAD_DRIVER_NAME | "SeLoadDriverPrivilege" | 加载或卸载设备驱动程序时需要。 | 加载和卸载设备驱动程序。 |
SE_LOCK_MEMORY_NAME | "SeLockMemoryPrivilege" | 需要锁定内存中的物理页。 | 锁定内存中的页面。 |
SE_MACHINE_ACCOUNT_NAME | "SeMachineAccountPrivilege" | 需要创建计算机帐户。 | 将工作站添加到域。 |
SE_MANAGE_VOLUME_NAME | "SeManageVolumePrivilege" | 需要启用卷管理权限。 | 管理卷上的文件。 |
SE_PROF_SINGLE_PROCESS_NAME | "SeProfileSingleProcessPrivilege" | 需要收集单个进程的分析信息。 | 分析单个进程。 |
SE_RELABEL_NAME | "SeRelabelPrivilege" | 需要修改对象的强制完整性级别。 | 修改对象标签。 |
SE_REMOTE_SHUTDOWN_NAME | "SeRemoteShutdownPrivilege" | 使用网络请求关闭系统时需要。 | 从远程系统强制关闭。 |
SE_RESTORE_NAME | "SeRestorePrivilege" | 执行还原操作所必需的。此权限使系统授予对任何文件的所有写入访问控制权,而不考虑为该文件指定的 ACL。除写入以外的任何访问请求仍使用 ACL 进行评估。此外,此权限允许您将任何有效的用户或组 SID 设置为文件的所有者。RegLoadKey 函数需要此权限。如果持有此权限,则授予以下访问权限: WRITE_DAC,WRITE_OWNER, ACCESS_SYSTEM_SECURITY, FILE_GENERIC_WRITE, FILE_ADD_FILE, FILE_ADD_SUBDIRECTORY,DELETE。 如果文件位于可移动驱动器上,并且启用了“审核可移动存储”,则SE_SECURITY_NAME需要具有ACCESS_SYSTEM_SECURITY。 | 恢复文件和目录。 |
SE_SECURITY_NAME | "SeSecurityPrivilege" | 需要执行许多与安全相关的功能,例如控制和查看审核消息。此权限将其持有者标识为安全操作员。 | 管理审核和安全日志。 |
SE_SHUTDOWN_NAME | "SeShutdownPrivilege" | 需要关闭本地系统。 | 关闭系统。 |
SE_SYNC_AGENT_NAME | "SeSyncAgentPrivilege" | 域控制器使用轻型目录访问协议目录同步服务是必需的。此权限使持有者能够读取目录中的所有对象和属性,而不管对象和属性的保护情况如何。默认情况下,它分配给域控制器上的管理员和 LocalSystem 帐户。 | 同步目录服务数据。 |
SE_SYSTEM_ENVIRONMENT_NAME | "SeSystemEnvironmentPrivilege" | 需要修改使用此类型存储器来存储配置信息的系统的非易失性 RAM。 | 修改固件环境值。 |
SE_SYSTEM_PROFILE_NAME | "SeSystemProfilePrivilege" | 需要收集整个系统的性能分析信息。 | 分析系统性能。 |
SE_SYSTEMTIME_NAME | "SeSystemtimePrivilege" | 需要修改系统时间。 | 更改系统时间。 |
SE_TAKE_OWNERSHIP_NAME | "SeTakeOwnershipPrivilege" | 需要在不被授予自由裁量访问权限的情况下取得对象的所有权。此权限仅允许将所有者值设置为持有者可以合法地分配为对象所有者的那些值。 | 获取文件或其他对象的所有权。 |
SE_TCB_NAME | "SeTcbPrivilege" | 此权限将其持有者标识为受信任计算机库的一部分。某些受信任的受保护子系统被授予此权限。 | 作为操作系统的一部分。 |
SE_TIME_ZONE_NAME | "SeTimeZonePrivilege" | 需要调整与计算机内部时钟关联的时区。 | 更改时区。 |
SE_TRUSTED_CREDMAN _ACCESS_NAME | "SeTrustedCredManAccessPrivilege" | 需要以受信任的调用方身份访问凭据管理器。 | 以受信任的调用方身份访问 Credential Manager。 |
SE_UNDOCK_NAME | "SeUndockPrivilege" | 需要拔出笔记本电脑。 | 从坞站中取出计算机。 |
SE_UNSOLICITED_INPUT_NAME | "SeUnsolicitedInputPrivilege" | 需要读取来自终端设备的未经请求的输入。 | 不适用。 |
关机原因
英文名称 | 数值 | 作用 |
SHTDN_REASON_MAJOR_APPLICATION | 0x00040000 | 应用程序问题。 |
SHTDN_REASON_MAJOR_HARDWARE | 0x00010000 | 硬件问题。 |
SHTDN_REASON_MAJOR_LEGACY_API | 0x00070000 | 使用 InitiateSystemShutdown 函数而不是 InitiateSystemShutdownEx。 |
SHTDN_REASON_MAJOR_OPERATINGSYSTEM | 0x00020000 | 操作系统问题。 |
SHTDN_REASON_MAJOR_OTHER | 0x00000000 | 其他问题。 |
SHTDN_REASON_MAJOR_POWER | 0x00060000 | 电源故障。 |
SHTDN_REASON_MAJOR_SOFTWARE | 0x00030000 | 软件问题。 |
SHTDN_REASON_MAJOR_SYSTEM | 0x00050000 | 系统故障。 |
SHTDN_REASON_MINOR_BLUESCREEN | 0x0000000F | 蓝屏崩溃事件。 |
SHTDN_REASON_MINOR_CORDUNPLUGGED | 0x0000000b | 拔出。 |
SHTDN_REASON_MINOR_DISK | 0x00000007 | 。 |
SHTDN_REASON_MINOR_ENVIRONMENT | 0x0000000c | 环境。 |
SHTDN_REASON_MINOR_HARDWARE_DRIVER | 0x0000000d | 司机。 |
SHTDN_REASON_MINOR_HOTFIX | 0x00000011 | 热修复。 |
SHTDN_REASON_MINOR_HOTFIX_UNINSTALL | 0x00000017 | 热修复卸载。 |
SHTDN_REASON_MINOR_HUNG | 0x00000005 | 反应 迟钝。 |
SHTDN_REASON_MINOR_INSTALLATION | 0x00000002 | 安装。 |
SHTDN_REASON_MINOR_MAINTENANCE | 0x00000001 | 维护。 |
SHTDN_REASON_MINOR_MMC | 0x00000019 | MMC 问题。 |
SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY | 0x00000014 | 网络连接。 |
SHTDN_REASON_MINOR_NETWORKCARD | 0x00000009 | 网络卡。 |
SHTDN_REASON_MINOR_OTHER | 0x00000000 | 其他问题。 |
SHTDN_REASON_MINOR_OTHERDRIVER | 0x0000000e | 其他驱动程序事件。 |
SHTDN_REASON_MINOR_POWER_SUPPLY | 0x0000000a | 电源。 |
SHTDN_REASON_MINOR_PROCESSOR | 0x00000008 | 处理器。 |
SHTDN_REASON_MINOR_RECONFIG | 0x00000004 | 配置。 |
SHTDN_REASON_MINOR_SECURITY | 0x00000013 | 安全问题。 |
SHTDN_REASON_MINOR_SECURITYFIX | 0x00000012 | 安全修补程序。 |
SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL | 0x00000018 | 安全修补程序卸载。 |
SHTDN_REASON_MINOR_SERVICEPACK | 0x00000010 | Service Pack。 |
SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL | 0x00000016 | Service Pack 卸载。 |
SHTDN_REASON_MINOR_TERMSRV | 0x00000020 | 终端服务。 |
SHTDN_REASON_MINOR_UNSTABLE | 0x00000006 | 稳定。 |
SHTDN_REASON_MINOR_UPGRADE | 0x00000003 | 升级。 |
SHTDN_REASON_MINOR_WMI | 0x00000015 | WMI 问题。 |
SHTDN_REASON_FLAG_USER_DEFINED | 0x40000000 | 原因代码由用户定义。 |
SHTDN_REASON_FLAG_PLANNED | 0x80000000 | 计划关闭。 系统 (SSD) 文件生成系统状态数据。 |
中文名称 | 英文名称 | 示例 | 作用 |
关计算机 | AbortSystemShutdownA | 关计算机(机名) | 停止已启动的系统。机名为0关闭本地计算机 |
开启关机 | InitiateShutdownA | 开启关机(机名,提示,秒数,标志,原因) | 启动指定计算机的关闭和重启,并重启已注册重启的任何应用程序。标志原因 |
直接关机 | InitiateSystemShutdownA | 直接关机(机名,提示,秒数,强制,重启) | 启动指定计算机的关闭和可选重启。秒数不过10年(315360000)强制和重启是真和假 |
关机重启 | InitiateSystemShutdownExA | 关机重启(机名,提示,秒数,强制,重启,原因) | 启动指定计算机的关闭和可选重启。秒数不过10年(315360000)强制和重启是真和假;原因 |
访问检查 | AccessCheck | 访问检查(安全,令牌,掩码,映射,权集,权长,授权,权限) | 检查客户端对对象的访问权限。 |
访问授权 | AddAccessAllowedAce | 访问授权(访问,级别,掩码,用户) | 将允许访问的访问控制项添加到访问控制列表(ACL)中。访问权限被授予指定的安全标识符 (SID)。 |
访问加权 | AddAccessAllowedAceEx | 访问加权(访问,级别,标志,掩码,用户) | 允许访问的访问控制项添加到(DACL)任意访问控制列表的末尾。 |
访问对象 | AddAccessAllowedObjectAce | 访问对象(访问,级别,标志,掩码,新类,继承,用户) | 添加新的ACE可以授予对对象的访问权限,或者授予对对象的属性集或属性的访问权限。 |
访问拒绝 | AddAccessDeniedAce | 访问拒绝(访问,级别,掩码,用户) | 拒绝访问访问控制项添加到访问控制列表。 |
访问拒加 | AddAccessDeniedAceEx | 访问拒加(访问,级别,标志,掩码,用户) | 拒绝访问访问控制项添加到任意访问控制列表末尾。 |
拒绝对象 | AddAccessDeniedObjectAce | 拒绝对象(访问,级别,标志,掩码,新类,继承,用户) | 拒绝对对象或对象的属性集或属性的访问。 |
访问控制 | AddAce | 访问控制(访问,级别,位置,表组,长度) | 将一个或多个访问控制项添加到指定的访问控制列表。 |
访问审核 | AddAuditAccessAce | 访问审核(访问,级别,掩码,新类,继承,用户,成功,失败) | 将系统审核访问控制项(ACE)添加到系统访问控制列表(ACL) 。审核指定安全标识符 (SID) 的访问。 |
访问加审 | AddAuditAccessAceEx | 访问加审(访问,级别,标志,掩码,进程号,成功,失败) | 系统审核访问控制项添加到系统访问控制列表的末尾, (SACL) 。 |
审核对象 | AddAuditAccessObjectAce | 审核对象(访问,级别,标志,掩码,新类,继承,用户,成功,失败) | 新的 ACE 可以审核对对象或对象上属性集或属性的访问。 |
安全标识 | AllocateAndInitializeSid | 安全标识(机构,数量,子权0,子权1,2,3,4,5,6,7,@SID) | 分配和初始化一个安全标识符, (SID) 最多八个子授权。 |
本地标识 | AllocateLocallyUniqueId | 本地标识(LUID) | 分配本地唯一标识符 (LUID)。 |
已授全权 | AreAllAccessesGranted | 已授全权(授权,请求) | 检查是否已授予一组请求的访问权限。 |
已授权限 | AreAnyAccessesGranted | 已授权限(授权,请求) | 测试是否已授予一组请求的访问权限中的任何一项。 |
已授权限 | AreAnyAccessesGranted | 已授权限(授权,请求) | 使用调用方指定的数据初始化EXPLICIT_ACCESS结构。 受信人由名称字符串标识。 |
复制标识 | CopySid | 复制标识(长度,@数据,SID) | 将安全标识符 (SID) 复制到缓冲区。 |
私对象号 | CreatePrivateObjectSecurity | 私对象号(父目录,描述,@新描述,容器,令牌,映射) | 为新的私有对象分配和初始化自相对安全描述符。 |
私分对象 | CreatePrivateObjectSecurityEx | 私分对象(父目录,描述,@新描述,类号,容器,标志,令牌,映射) | 分配和初始化由资源管理器调用此函数创建的新私有对象的自相对安全描述符。 |
删除访问 | DeleteAce | 删除访问(访问,序号) | 从访问控制列表 (ACL) 中删除访问控制项 (ACE) 。 |
销毁私号 | DestroyPrivateObjectSecurity | 销毁私号(描述) | 删除私有对象的安全描述符。 |
安全同域 | EqualDomainSid | 安全同域(SID1,SID2,@真假) | 确定两个 SID 是否来自同一个域。 |
安全同姓 | EqualPrefixSid | 安全同姓(SID1,SID2) | 测试两个安全标识符 (SID) 前缀值是否相等。 |
安全同值 | EqualSid | 安全同值(SID1,SID2) | 测试两个安全标识符 (SID) 值是否相等。 两个 SID 必须完全匹配才能被视为相等。 |
访问首字 | EqualPrefixSid | 访问首字(访问,@指针) | 检索指向访问控制列表中的第一个自由字节的指针 (ACL) 。 |
安全释放 | FreeSid | 安全释放(SID) | 释放以前使用 安全标识 函数分配 (SID) 安全标识符。 |
安全长度 | GetLengthSid | 安全长度(SID) | 返回有效安全标识符的长度(以字节为单位)。 |
取访问项 | GetAce | 取访问项(访问,序号,@项目) | 访问控制列表中的访问控制项 。 |
取访问表 | GetAclInformation | 取访问表(访问,@数据,大小,信息类) | 检索有关访问控制列表的信息。 |
改访问表 | SetAclInformation | 改访问表(访问,数据,大小,信息类) | 设置有关访问控制列表的信息。 |
取件安全 | GetFileSecurityA | 取件安全(文件名,信息,@描述,大小,@已收) | 获取有关文件或目录安全性的指定信息。 |
改件安全 | SetFileSecurityA | 改件安全(文件名,信息,描述) | 获取有关文件或目录安全性的指定信息。 |
取内对象 | GetKernelObjectSecurity | 取内对象(对象,信息,@描述,大小,@已收) | 检索保护内核对象的安全描述符的副本。 |
改内对象 | SetKernelObjectSecurity | 改内对象(对象,信息,描述) | 设置保护内核对象的安全描述符的副本。 |
取名安全 | GetNamedSecurityInfoA | 取名安全(名称,类型,@持有,@主组,@任意,@系统,@数据) | 检索由名称指定的对象的安全描述符的副本。 |
改名安全 | SetNamedSecurityInfoA | 改名安全(名称,类型,信息,持有,主组,任意,系统) | 按名称标识对象的安全描述符中设置指定的安全信息。 |
取私对象 | GetPrivateObjectSecurity | 取私对象(描述,部件,@描述,大小,@剩余) | 从私有对象的安全描述符检索信息。 |
改私对象 | SetPrivateObjectSecurity | 改私对象(描述,部件,@描述,映射,令牌) | 从私有对象的安全描述符检索信息。 |
取安全符 | GetSecurityInfo | 取安全符(对象,类型,@持有,@主组,@任意,@系统,@数据) | 检索句柄指定的对象的安全描述符的副本。 |
改安全符 | SetSecurityInfo | 改安全符(对象,类型,信息,持有,主组,任意,系统) | 在句柄标识对象的安全描述符中设置指定的安全信息。 |
名称委托 | BuildExplicitAccessWithNameA | 名称委托(委托,名称,权限,模式,继承) | 指定的数据初始化访问委托类结构。受信人由名称字符串标识。 |
模拟登陆 | ImpersonateLoggedOnUser | 模拟登陆(令牌) | 允许调用线程模拟登录用户的安全上下文。 |
访问委托类
中文名字 | 英文名称 | 长度 | 作用解释 |
访问委托类 | EXPLICIT_ACCESS_A | 32 | 定义指定受托人的访问控制信息。 |
安全描述类 成员表 | |||
---|---|---|---|
中文 | 英文 | 类型 | 作用解释 |
权限 | grfAccessPermissions | 整数 | 使用访问掩码指定 ACE 允许、拒绝或审核受托人的访问权限。 |
模式 | grfAccessMode | 整数 | 指示访问控制列表的访问模式。 |
继承 | grfInheritance | 整数 | 用于确定其他容器或对象是否可以从附加 ACL 的主对象继承 ACE。 |
委托 | Trustee | 整数 | 用于标识用户、组或程序 的 TRUSTEE 结构。 |
访问继承标志
英文名称 | 数值 | 作用 |
NO_INHERITANCE | 0 | 不继承。 |
OBJECT_INHERIT_ACE | 1 | 主对象包含的非容器对象继承 ACE。 |
CONTAINER_INHERIT_ACE | 2 | 主对象包含的其他容器继承 ACE。 |
NO_PROPAGATE_INHERIT_ACE | 4 | OBJECT_INHERIT_ACE和CONTAINER_INHERIT_ACE标志不会传播到继承的 ACE。 |
INHERIT_ONLY_ACE | 8 | ACE 不适用于附加 ACL 的主对象,但主对象包含的对象将继承 ACE。 |
SUB_OBJECTS_ONLY_INHERIT | 1 | 主对象包含的非容器对象继承 ACE。 此标志对应于OBJECT_INHERIT_ACE标志。 |
SUB_CONTAINERS_ONLY_INHERIT | 2 | 主对象包含的其他容器继承 ACE。 此标志对应于CONTAINER_INHERIT_ACE标志。 |
SUB_CONTAINERS_AND_OBJECTS_INHERIT | 3 | 主对象包含的容器和非容器对象都继承 ACE。 此标志对应于CONTAINER_INHERIT_ACE和OBJECT_INHERIT_ACE标志的组合。 |
INHERIT_NO_PROPAGATE | 4 | 继承但不传播。 |
INHERIT_ONLY | 8 | 仅继承。 |
安全访问模式
指示EXPLICIT_ACCESS结构中的访问权限如何应用于受托人。
英文名称 | 数值 | 作用 |
NOT_USED_ACCESS | 0 | 未使用值。 |
GRANT_ACCESS | 1 | 指示ACCESS_ALLOWED_ACE 结构。 新的 ACE 将指定权限与受托人的任何现有允许或拒绝权限组合在一起。 |
SET_ACCESS | 2 | 指示允许指定权限 的ACCESS_ALLOWED_ACE 结构。输入时,此值将放弃受托人的任何现有访问控制信息。 |
DENY_ACCESS | 3 | 指示ACCESS_DENIED_ACE 拒绝指定权限的结构。输入时,除受托人当前拒绝的任何权利外,此值还会拒绝指定权限。 |
REVOKE_ACCESS | 4 | 指示所有现有 ACCESS_ALLOWED_ACE 或删除 指定受托人的SYSTEM_AUDIT_ACE结构。 |
SET_AUDIT_SUCCESS | 5 | 指示一个 SYSTEM_AUDIT_ACE 结构,该结构为成功尝试使用指定访问权限生成审核消息。输入时,此值将指定权限与受托人的任何现有审核访问权限组合在一起。 |
SET_AUDIT_FAILURE | 6 | 指示SYSTEM_AUDIT_ACE 结构,为使用指定访问权限的失败尝试生成审核消息。输入时,此值将指定权限与受托人的任何现有审核访问权限组合在一起。 |
关机标志
英文名称 | 数值 | 作用 |
SHUTDOWN_FORCE_OTHERS | 1 | 强制注销所有会话。 如果未设置此标志,并且当前用户以外的用户登录到 由 机名 参数指定的计算机,则此函数将失败,返回值 ERROR_SHUTDOWN_USERS_LOGGED_ON。 |
SHUTDOWN_FORCE_SELF | 2 | 指定强制注销原始会话。 如果未设置此标志,则会以交互方式关闭原始会话,因此即使函数成功返回,也不能保证关闭。 |
SHUTDOWN_GRACE_OVERRIDE | 0x20 | 替代宽限期,以便立即关闭计算机。 |
SHUTDOWN_HYBRID | 0x200 | 从在 Windows 8 上运行的 InitiateShutdown 开始,必须包含此表中的一个或多个标志的 SHUTDOWN_HYBRID 标志,以指定关机选项。从 Windows 8 开始,如果缺少SHUTDOWN_HYBRID标志,则 InitiateShutdown 始终启动完全系统关闭。 |
SHUTDOWN_INSTALL_UPDATES | 0x00000040 (0x40) | 计算机在开始关闭之前安装任何更新。 |
SHUTDOWN_NOREBOOT | 0x00000010 (0x10) | 计算机已关闭,但未关闭或重新启动。 |
SHUTDOWN_POWEROFF | 0x00000008 (0x8) | 计算机已关闭并关机。 |
SHUTDOWN_RESTART | 0x00000004 (0x4) | 计算机已关闭并重新启动。 |
SHUTDOWN_RESTARTAPPS | 0x00000080 (0x80) | 使用带有 EWX_RESTARTAPPS 标志的 ExitWindowsEx 函数重新启动系统。 这会使用 RegisterApplicationRestart 函数重启已注册重启的任何应用程序。 |
关机错误
英文名称 | 数值 | 作用 |
ERROR_ACCESS_DENIED | 5 | 调用方没有执行此操作所需的权限 (SE_SHUTDOWN_PRIVILEGE 或SE_REMOTE_SHUTDOWN_PRIVILEGE) 。 |
ERROR_BAD_NETPATH | 53 | 指定的计算机不存在或无法访问。 |
ERROR_INVALID_COMPUTERNAME | 1210 | 指定的计算机名称不是有效的计算机名称。 |
ERROR_INVALID_FUNCTION | 1 | 指定的计算机不支持关闭接口。 |
ERROR_INVALID_PARAMETER | 87 | 传递的参数集无效。 |
ERROR_SHUTDOWN_IN_PROGRESS | 1115 | 已在指定的计算机上启动关闭。 |
ERROR_SHUTDOWN_IS_SCHEDULED | 1190 | 已计划关闭指定的计算机,但未启动。 要使此函数成功,必须设置 0x20 标志。 |
ERROR_SHUTDOWN_USERS_LOGGED_ON | 1191 | 当前用户以外的一个或多个用户登录到指定的计算机上,并且未设置 1 标志。 |
安全对象类型
SE_OBJECT_TYPE 枚举包含的值对应于支持安全性的 Windows 对象类型。
英文名称 | 数值 | 作用 |
SE_UNKNOWN_OBJECT_TYPE | 0 | 未知的对象类型。 |
SE_FILE_OBJECT | 1 | 指示文件或目录。 ..\FileName 或 FileName.dat、d:\sec\sec.dat 或 \\ComputerName\ShareName\FileName.dat。 |
SE_SERVICE | 2 | 指示 Windows 服务。 服务对象可以是本地服务(如 ServiceName)或远程服务(如 \\ComputerName\ServiceName)。 |
SE_PRINTER | 3 | 指示打印机。 打印机对象可以是本地打印机(如 PrinterName)或远程打印机(如 \\ComputerName\PrinterName)。 |
SE_REGISTRY_KEY | 4 | 指示注册表项。 本地注册表(如 CLASSES_ROOT\SomePath )远程注册表中,如 \\ComputerName\CLASSES_ROOT\SomePath。 |
SE_LMSHARE | 5 | 指示网络共享。 共享对象可以是本地对象(如 ShareName)或远程对象(如 \\ComputerName\ShareName)。 |
SE_KERNEL_OBJECT | 6 | 指示本地内核对象。取/改名安全:信号灯、事件、互斥体、计时器和文件映射。取/改安全符支持所有 |
SE_WINDOW_OBJECT | 7 | 指示本地计算机上的窗口工作站或桌面对象。 |
SE_DS_OBJECT | 8 | 指示目录服务对象或目录服务对象的属性集或属性。例如:CN=SomeObject,OU=ou2,OU=ou1,DC=DomainName,DC=CompanyName,DC=com,O=internet |
SE_DS_OBJECT_ALL | 9 | 指示目录服务对象及其所有属性集和属性。 |
SE_PROVIDER_DEFINED_OBJECT | 10 | 指示提供程序定义的 对象。 |
SE_WMIGUID_OBJECT | 11 | 指示 WMI 对象。 |
SE_REGISTRY_WOW64_32KEY | 12 | 指示 WOW64 下的注册表项的对象。 |
SE_REGISTRY_WOW64_64KEY | 13 | 指示 WOW64 下的注册表项的对象。 |