首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C编程中使用win32接口获取所有本地用户及其对给定文件的权限的程序

在C编程中,可以使用win32接口来获取所有本地用户及其对给定文件的权限。下面是一个示例程序:

代码语言:txt
复制
#include <stdio.h>
#include <windows.h>
#include <aclapi.h>

void GetFilePermissions(const char* filename) {
    DWORD dwRes;
    PSECURITY_DESCRIPTOR pSD = NULL;
    PACL pDacl = NULL;
    PSID pSidOwner = NULL;
    PSID pSidGroup = NULL;
    BOOL bOwnerDefaulted = FALSE;
    BOOL bGroupDefaulted = FALSE;
    DWORD dwAclSize;
    DWORD dwAceCount;
    LPSTR pszUserName = NULL;

    // 获取文件的安全描述符
    dwRes = GetNamedSecurityInfoA(filename, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION, &pSidOwner, &pSidGroup, &pDacl, NULL, &pSD);
    if (dwRes != ERROR_SUCCESS) {
        printf("获取文件安全描述符失败,错误码:%d\n", dwRes);
        return;
    }

    // 获取DACL的大小和ACE的数量
    dwRes = GetAclInformation(pDacl, (LPVOID)&dwAclSize, sizeof(dwAclSize), AclSizeInformation);
    if (dwRes != ERROR_SUCCESS) {
        printf("获取DACL信息失败,错误码:%d\n", dwRes);
        return;
    }
    dwAceCount = dwAclSize / sizeof(ACCESS_ALLOWED_ACE);

    // 遍历DACL中的ACE,获取用户及其权限
    for (DWORD i = 0; i < dwAceCount; i++) {
        ACCESS_ALLOWED_ACE* pAce;
        SID_NAME_USE sidType;
        DWORD dwUserNameSize = 0;
        DWORD dwDomainNameSize = 0;
        LPSTR pszDomainName = NULL;

        // 获取ACE
        if (!GetAce(pDacl, i, (LPVOID*)&pAce)) {
            printf("获取ACE失败\n");
            return;
        }

        // 获取SID对应的用户名和域名
        LookupAccountSidA(NULL, &(pAce->SidStart), NULL, &dwUserNameSize, NULL, &dwDomainNameSize, &sidType);
        if (dwUserNameSize > 0) {
            pszUserName = (LPSTR)LocalAlloc(LPTR, dwUserNameSize);
        }
        if (dwDomainNameSize > 0) {
            pszDomainName = (LPSTR)LocalAlloc(LPTR, dwDomainNameSize);
        }
        if (!LookupAccountSidA(NULL, &(pAce->SidStart), pszUserName, &dwUserNameSize, pszDomainName, &dwDomainNameSize, &sidType)) {
            printf("获取用户名失败\n");
            return;
        }

        // 打印用户及其权限
        printf("用户:%s\\%s\n", pszDomainName, pszUserName);
        printf("权限:");
        if (pAce->Mask & GENERIC_READ) {
            printf("读取 ");
        }
        if (pAce->Mask & GENERIC_WRITE) {
            printf("写入 ");
        }
        if (pAce->Mask & GENERIC_EXECUTE) {
            printf("执行 ");
        }
        if (pAce->Mask & GENERIC_ALL) {
            printf("全部 ");
        }
        printf("\n");

        // 释放内存
        if (pszUserName != NULL) {
            LocalFree(pszUserName);
            pszUserName = NULL;
        }
        if (pszDomainName != NULL) {
            LocalFree(pszDomainName);
            pszDomainName = NULL;
        }
    }

    // 释放内存
    if (pSD != NULL) {
        LocalFree(pSD);
        pSD = NULL;
    }
}

int main() {
    const char* filename = "C:\\path\\to\\file.txt";
    GetFilePermissions(filename);
    return 0;
}

这个程序使用了GetNamedSecurityInfoA函数来获取文件的安全描述符,然后通过GetAclInformation函数获取DACL的大小和ACE的数量。接着,通过遍历DACL中的ACE,使用LookupAccountSidA函数获取SID对应的用户名和域名,并打印出用户及其权限。

请注意,这只是一个简单的示例程序,实际应用中可能需要进行错误处理、内存管理等更多的工作。此外,该程序只适用于Windows平台上的C编程,不适用于其他操作系统或编程语言。

推荐的腾讯云相关产品:腾讯云服务器(CVM)、腾讯云对象存储(COS)、腾讯云访问管理(CAM)等。你可以通过访问腾讯云官网(https://cloud.tencent.com/)了解更多关于这些产品的详细信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

msfconsole渗透测试一些总结(高级篇)

运行程序 我们还可以使用“execute”命令目标系统执行应用程序。这个命令使用方法如下: execute -f [Options] 运行后它将执行file参数所指定文件。...可选参数如下: -H:创建一个隐藏进程 -a:传递给命令参数 -i:跟进程进行交互 -m:从内存执行 -t:使用当前伪造线程令牌运行进程 -s:在给定会话执行进程 创建一个新账号 接下来,我们可以目标系统创建一个新用户账号...(getgui脚本,使用-u和-p参数),并给它分配管理员权限使用),然后将其添加到”远程桌面用户”组。...) search(目标机文件进行搜索) 3、网络命令(查看目标网络状况、连接信息,进行端口转发等) ipconfig(获取目标主机上网络接口信息) portfwd(端口转发:将目标主机开放但不允许访问端口进行转发...) execute(目标机上执行文件) getpid(当前会话所在进程pid值) kill(终结指定pid程序) getuid(获取当前会话用户名) sysinfo(获取系统信息) shutdown

1K10

OPC DCOM详细配置方法 - 不关防火墙不换登陆用户

第二步,OPC Client获取已注册OPC服务器信息后,确定需要连接OPC服务器,并通过ConnectionPoint接口及AdviseSink接口获取服务器各种配置信息、数据项(Tag)实时数据及其它通知...第二步,OPC Client获取已注册OPC服务器信息后,确定需要连接OPC服务器,并通过ConnectionPoint接口及AdviseSink接口获取服务器各种配置信息、数据项(Tag)实时数据及其它通知...点击Windows开始按钮,“搜索程序文件”对话框输入:dcomcnfg,并回车。   2. 弹出“组件服务”对话框。展开左侧“控制台根节点”,展开到“我电脑”。...3.4.3 OPC ServerDCOM 设置   点击Windows开始按钮,“搜索程序文件”对话框输入:dcomcnfg,并回车。   弹出“组件服务”对话框。...,如ERP等,可能会有同样登录账户需求,而在企业所有的网络计算机上设置并使用相同用户账户登录是不现实,同时也会有潜在安全问题。

65710
  • 从转储lsass学习Windows安全

    安全描述符由SECURITY_DESCRIPTOR结构及其关联安全信息组成。安全描述符可以包括以下安全信息: 对象所有者和主要组安全标识符(SID)。...当进程试图访问安全对象时,系统会检查对象 DACL ACE,以确定是否授予访问权限。如果对象没有 DACL,系统会授予每个人Full Access权限。...每个 ACE 指定特定受托者进行访问尝试类型,这些访问尝试会导致系统安全事件日志中生成记录。SACL ACE 可以访问尝试失败和/或成功时生成审计记录。...当用户登陆计算机,凭证验证通过后便会拿到一份访问令牌(Access Token),该Token我们创建进程或线程时会被使用,拷贝explorer.exe该用户访问令牌到新进程/线程当中用以权限分配...当程序访问安全对象时,安全对象会检测自身DACL,若DACL不存在,则所有程序开放访问权限;若DACL存在,会按顺序查找DACL内ACL与程序访问令牌比较判断,判断其是否具有访问权限

    95120

    网管面试题3-windows

    当一个用户某个NTFS文件文件夹拥有完全控制权限时,该用户就文件文件夹拥有了所有的管理权利,比如,修改文件文件权限、共享文件夹,以及获得文件文件所有权。...当一个用户某个NTFS文件文件夹拥有读取和运行权限时,该用户就可以查看该文件及其文件夹内子文件夹和文件内容、属性和权限,还可以运行文件应用程序。...当一个用户某个NTFS文件夹拥有列出文件夹内容权限时,该用户就可以查看该文件及其文件夹内子文件夹和文件内容、属性和权限,但不能修改、删除文件。...65:Windows Server 2003系统,终端服务客户端软件文件位于Winodws系统文件(system32\clients\tsclient\win32 )。...69:Windows 2000,终端服务通信时使用协议及默认端口号为.

    1.4K10

    以最复杂方式绕过 UAC

    如果我是慈善家,我会说这种行为也确保了一定程度安全。如果您没有以管理员令牌身份运行,那么访问 SMB 环回接口不应突然授予您管理员权限,通过该权限您可能会意外破坏您系统。...当该票证用于同一系统进行身份验证时,Kerberos可以提取信息并查看它是否与它知道信息匹配。如果是这样,它将获取该信息并意识到用户没有被提升并适当地过滤令牌。...将 base64 票证复制到文件。...请注意,SCM Win32 API 始终使用Negotiate身份验证,这会在工作引发扳手,但还有其他 RPC 客户端;-) 虽然 LSASS 将在 AP-REQ 身份验证器添加一个有效限制条目...更新:这个简单 C++ 文件可用于修改 Win32 SCM API 以使用 Kerberos 进行本地身份验证。

    1.8K30

    Android安全之系统构建解析篇(一)

    使用 JNI 接口系统服务可以与本地用户空间层守护进程,工具箱二进制文件和本地库进行交互。 公共 API 到系统服务都是通过 Android 框架库提供。...因此,由于 Linux 实现进程隔离,默认情况下,应用程序不能相互干扰,并且操作系统提供设施具有有限访问。...为了使用受保护功能,应用程序开发者必须在文件AndroidManifest.xml请求相应权限。...安装应用程序期间,Android 操作系统将解析此文件,并向用户提供此文件声明权限列表。 应用程序安装根据“全有或全无"原则进行,这意味着仅当接受所有权限时才安装应用程序。...应用程序尝试使用某个功能,并且该功能尚未在 Android 清单文件声明,通常会产生安全性异常。 在下面几节我们会讲解权限实现机制细节。

    81920

    牛人整理分享面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结

    MVC模式 提高篇:WIN32、MFC与Linux 一: WIN32 1. Win32应用程序基本类型. 2. 创建win32窗口程序几个步骤,及使用函数。...Win32消息机制获取消息过程(先查看什么消息?再查看什么消息?) 14. 知道有哪几类主要消息。...动态库与静态库区别。 27. Win32里面怎样用静态库? C++程序引用c静态库时,需要注意什么? 28. Win32里面动态库有哪几种导出方式,有哪几种导入方式?...如何查找不含该串行? 17. Linux中进程有哪几种状态?ps显示出来信息,分别用什么符号表示? 18. 怎么使一个命令在后台运行? 19. 利用ps怎么显示所有的进程?...查找命令可执行文件是去哪查找? 怎么其进行设置及添加? 33. 通过什么命令查找执行命令?34. 怎么命令进行取别名? 四:Linux编程 1.

    2.4K41

    c比python快多少倍_python和c++哪个简单

    大型工程项目中,经常会遇到多语言联合编程情况,举个例子: 一个远端控制系统,前端Web使用html+css+js;后端采用python-flask作为服务端,底层控制采用C/C++ 这是因为不同编程语言有各自适用场景和语法特性...因此Python不适合用于底层算法开发,应用在上层应用作粘合剂或进行智能领域研究比较占优;C/C++则适合用于底层控制算法编程。...2 Python调用C++主要方式 主要介绍三种C++/Python联合编程方式: 2.1 SWIG 支持Python、Java、Ruby等语言调用C接口 文档全面,易于学习 绑定性能欠佳, 不支持属性和内部类封装...address-model:指定编译版本,可选32 | 64,该参数必须和本地安装Python位数相对应,否则会编译出错 user-config:使用本地用户配置文件路径 补充一下编译库文件命名格式...4 测试实例:python继承C++接口 新建工程文件夹,包含三个文件helloworld.cpp、helloworld.py与CMakeLists.txt helloworld.cpp编写: //

    1.9K30

    浅入浅出 Android 安全:第一章 Android

    使用 JNI 接口系统服务可以与本地用户空间层守护进程,工具箱二进制文件和本地库进行交互。 公共 API 到系统服务都是通过 Android 框架库提供。...还有一部分受保护系统功能(例如,摄像头,电话或 GPS 功能),其访问权限应该提供给第三方应用程序。 然而,这种访问应以受控方式提供。 Android ,这种控制使用权限来实现。...为了使用受保护功能,应用程序开发者必须在文件AndroidManifest.xml请求相应权限。...安装应用程序期间,Android 操作系统将解析此文件,并向用户提供此文件声明权限列表。 应用程序安装根据“全有或全无”原则进行,这意味着仅当接受所有权限时才安装应用程序。...应用程序尝试使用某个功能,并且该功能尚未在 Android 清单文件声明,通常会产生安全性异常。 在下面几节我们会讲解权限实现机制细节。

    53820

    看我如何破解OpenNMS哈希密码?

    背景 最近一次渗透测试,我拿下了一台运行OpenNMS服务器,并获取了该服务器root访问权限。...散列识别 大多数密码破解程序都会使用十六进制来表示哈希,因此我将XMLbase64值转换为十六进制: ?...我首先想到是,盐可能被存储OpenNMS使用PostgresQL数据库。由于我当前权限为root,因此我可以连接数据库并查看表数据。经过一番查找并没有发现任何与密码或盐有关数据。...据此我断定,它一定被存储应用程序某个位置。 OpenNMS是一个开源系统,因此我来到了它Github页面并搜索了关键字“salt”。我获取到了一些用于测试users.xml文件示例。...你可以通过以下链接获取到: https://github.com/ropnop/opennms_hash_cracker 该脚本首先会提取users.xml文件哈希值,然后使用我们提供字典散列进行爆破

    1.7K60

    攻击本地主机漏洞(上)

    实施漏洞利用 渗透式测试期间,一旦您获得目标操作系统初始访问权,您将希望更好地了解目标及其运行网络,以进一步帮助利用。...Windows应用程序可以使用Windows应用程序编程接口(API)访问剪贴板数据。MacOS X提供了一个本机命令pbpaste来抓取剪贴板内容。...无权限本地用户可以利用此弱点获得只读内存映射写访问权限,并在操作系统上获得更高权限。自2007年内核版本2.6.22开始,这个特定bug就一直存在。...您可以命令提示符下使用WMIC实用程序目标操作系统上搜索修补程序及其安装日期,如图10-5所示。...默认Windows配置本地用户可以读取和写入他们创建任务文件。由于CRC-32不是加密算法,用户可以修改新或现有的任务文件,以创建潜在哈希冲突,并使用系统权限执行任意命令。

    1.1K10

    COM开发Win32 SDK头文件、宏定义和HRESULT

    组件对象模型(COM)开发Win32 SDK头文件、宏定义和HRESULT扮演着至关重要角色。...COM开发,以下几个头文件尤为重要: Unknwn.h:定义了IUnknown接口和相关宏。 Wtypes.h:包含了COM使用数据结构。...Objidl.h:定义了所有标准接口,支持CC++两种语言风格。 Comdef.h:定义了所有标准接口及COM和OLE内部对象CLSID。...ObjBase.h:包含了所有的COM API函数声明。 Ole2.h:包含了所有经过封装OLE辅助函数。 使用这些头文件时,通常需要在源代码文件顶部包含它们,以便使用其中定义接口和函数。...例如,当你定义一个COM接口时,需要包含Unknwn.h以获取IUnknown接口定义。 宏定义 Win32 SDK,宏定义用于条件编译和配置应用程序行为。

    66800

    windows用户和组

    安全主体类型 用户账号 本地用户 域用户 组账号 用户账号 用户账号认证 用户账号是计算机用户身份标识,。每个使用计算机的人,必须凭借他用户账号密码才能够进入计算机,进而访问计算机里面的资源。...计算机存有一个叫SAM数据库,当用户输入账号密码之后会与SAM数据密码进行验证,SAM路径为: C:\Windows\System32\config\SAM 对应进程:lsass.exe...但是不可以更改Administrators,无法夺取文件所有权、无法备份与还原文件、无法安装删除与删除设备驱动程序、无法管理安全与审核日志。...Users 组内成员只拥有一些基本权利,例如运行应用程序,但是他们不能修改操作系统设置、不能更改其它用户数据、不能关闭服务器级计算机。所有添加本地用户帐户者自动属于Users组。...如果用户被允许访问该对象,Windows NT将会分配给用户适当访问权限。 访问令牌是用户通过验证时候有登陆进程所提供,所以改变用户权限需要注销后重新登陆,重新获取访问令牌。

    2.9K20

    JavaIO之File详解 以及FileSystem WinNTFileSystem简介

    使用给定前缀和后缀字符串生成其名称。...否则返回一个字符串数组,每个数组元素对应目录每个文件或目录。 表示目录本身及其父目录名称不包括结果。每个字符串是一个文件名,而不是一条完整路径。...否则返回一个 File 对象数组,每个数组元素对应目录每个文件或目录。表示目录本身及其父目录名称不包括结果。不保证所得数组相同字符串将以特定顺序出现,特别是不保证它们按字母顺序出现。...如果底层文件系统不能区分所有者执行权限与其他执行权限,那么无论该参数为何值,执行权限将适用于所有用户。  ...先根据驱动盘获取对应驱动盘索引 然后尝试从缓存读取,如果读取得到直接返回 如果获取不到, 使用本地方法获取,然后缓存起来 fromURIPath主要是完成了路径格式化看代码注释,注释就是示例程序

    2.5K40

    linux进程间通信方式最常用_linux进程调度

    UNIX Environment》,它中文译本《UNIX环境高级编程》已有机械工业出版社出版,原文精彩,译文同样地道,如果你的确Linux下编程有浓 厚兴趣,那么赶紧将这本书摆到你书桌上或计算机旁边来...首先,进程间通信至少可以通过传送打开文件来实现,不同进程通过一个或多个文件来传递信息,事实上,很多应用系统里,都使用了这种方法。...,就可以使用一般文件I/O函数如open、close、read、write等来它进行操作。...系统调用msgctl,最后一个参数是指向内核中使用数据结构指针。我们使用此数据结构来取得有关消息队列一些信息,以及设置或者改变队列存取权限使用者。...我们熟知WWW服务、FTP服务、TELNET服务 等都是基于套接口编程来实现。除了异地计算机进程间以外,套接口同样适用于本地同一台计算机内部进程间通信。

    2.1K20

    基于WDM专用USB设备驱动程序开发

    2 Win32驱动程序模型 USB设备驱动程序必须符合由Microsoft为Windows 98及其后版本所定义Win32驱动程序模型(Win32 Driver Model,WDM)规格。...例如,USB类驱动程序所有USB 设备提供了一个抽象模型,并具有由所有客户驱动程序使用定义好接口。...有了所有设备类型共同核心驱动程序模型,使驱动程序开发人员更容易从一种类型设备移动到另外一种类型设备上去。而且它也意味着驱动程序模型内核实现尽可能是固定。...USBD.sys就是Windows系统USB类驱动程序,它使用UHCD.sys来访问通用主控制器接口设备,或者使用OpenHCI.sys访问开放式主控制器接口设备。...本文就是Windows 2000下使用DDK来进行相应驱动程序开发。并且使用Visual C++作为编程工具。

    1.7K20

    这些操作系统概念,保你没听过!

    进程和文件权限保护方面也是有区别的。一般来说,父进程能控制和访问子进程,而在文件和目录通常存在一种机制,使文件所有者之外其他用户也能访问该文件。...就像几乎所有系统调用一样,它通过使用与系统调用相同名称来调用一个函数库,从而从C程序调用:read。...微软定义了一系列过程,称为 Win32应用编程接口(Application Programming Interface),程序员通过这套标准接口来实现系统调用。...这个接口支持从 Windows 95 版本以来所有的 Windows 版本。 Win32 API 调用数量是非常巨大,有数千个多。...Win32 接口中没有文件链接、文件系统 mount、umount 和 stat ,当然, Win32 也有大量 UNIX 没有的系统调用,特别是 GUI 管理和调用。

    35810

    内网渗透基石篇--权限提升

    “Everyone”用户这个文件有完全控制权,就是说所有用户都具有全部权限修改这个文件夹。...如果黑客以高权限运行任务,所在目录具有写权限,那么就可以使用恶意程序覆盖原有的程序。这样,计划任务下次执行时候,就会以高权限运行恶意程序。...为方便所有机器进行操作,网络管理员会使用域策略进行统一配置和管理,那么所有机器本地管理员密码就是一样,黑客就是利用这一点。 ?...3.获取组策略凭据 1.手动查找 浏览SysVQL文件夹,获取相关文件 ? 也可以使用type命令搜索。...SYSVOL是所有经过身份验证用户具有读访问权限Active Directory域范围共享 SYSVOL是指存储域公共文件服务器副本共享文件夹,它们域中所有的域控制器之间复制。

    1.7K60

    Cloudera访问授权概述

    理想情况下,授权机制可以利用身份验证机制,以便当用户登录系统(例如集群)时,将根据他们系统对应用程序,数据和其他资源授权,他们进行透明授权。。...每个目录和文件都有一个具有基本权限所有者和组,可以将其设置为读取,写入和执行(文件级别)。目录具有附加权限,该权限允许访问子目录。 访问控制列表(ACL),用于管理服务和资源。...POSIX权限 Hadoop集群上运行大多数服务,例如命令行界面(CLI)或使用Hadoop API客户端应用程序,都可以直接访问HDFS存储数据。...HDFS目录和文件使用POSIX样式权限;每个目录和文件都分配有一个所有者和组。每个分配都有一组基本可用权限文件权限被读取,写入和执行,并且目录具有附加权限来确定对子目录访问。...类似于HDFS权限本地用户帐户是正确授权所必需。 Apache ZooKeeper还维护存储ZooKeeper数据树DataNodes信息ACL。

    1.4K10

    这些操作系统概念,保你都听过!

    进程和文件权限保护方面也是有区别的。一般来说,父进程能控制和访问子进程,而在文件和目录通常存在一种机制,使文件所有者之外其他用户也能访问该文件。...就像几乎所有系统调用一样,它通过使用与系统调用相同名称来调用一个函数库,从而从C程序调用:read。...微软定义了一系列过程,称为 Win32应用编程接口(Application Programming Interface),程序员通过这套标准接口来实现系统调用。...这个接口支持从 Windows 95 版本以来所有的 Windows 版本。 Win32 API 调用数量是非常巨大,有数千个多。...Win32 接口中没有文件链接、文件系统 mount、umount 和 stat ,当然, Win32 也有大量 UNIX 没有的系统调用,特别是 GUI 管理和调用。

    51610
    领券