尝试使用 ctypes 调用 wincred api

2024-01-03

我正在尝试使用 ctypes API 读取 Windows 凭证库,但我不确定如何将函数结果转换回可用的 ctypes.Structure。

import ctypes
class CREDENTIALS(ctypes.Structure):
    _fields_ = [
        ("Flags", ctypes.c_int),
        ("Type", ctypes.c_int),
        ("TargetName", ctypes.c_wchar_p),
        ("Comment", ctypes.c_wchar_p),
        ("CredentialBlobSize", ctypes.c_int),
        ("CredentialBlob", ctypes.c_wchar_p),
        ("AttributeCount", ctypes.c_int),
        ("Attributes", ctypes.c_wchar_p),
        ("TargetAlias", ctypes.c_wchar_p),
        ("UserName", ctypes.c_wchar_p)
]
advapi32 = ctypes.oledll.LoadLibrary('Advapi32.dll')
advapi32.CredReadW.restype = ctypes.c_bool
advapi32.CredReadW.argtypes = [ctypes.c_wchar_p, ctypes.c_int, ctypes.c_int, ctypes.POINTER(CREDENTIALS)]
target = "login.example.com"
pcred = ctypes.pointer(CREDENTIALS())
ok = advapi32.CredReadW(target,1,0,pcred)
cred = pcred.contents
print ok, pcred, cred.UserName, cred.CredentialBlob

Result:

1 <__main__.LP_CREDENTIALS object at 0x012CECB0> None None

该函数返回 true ,因此它可以工作,但指针内容似乎为空。我究竟做错了什么?


oledll应该windll. oledll用于返回的函数HRESULT.

的定义CREDENTIAL缺少一些字段(LastWritten and Persist)。定义 (link http://msdn.microsoft.com/en-us/library/windows/desktop/aa374788(v=vs.85).aspx) is:

typedef struct _CREDENTIAL {
  DWORD                 Flags;
  DWORD                 Type;
  LPTSTR                TargetName;
  LPTSTR                Comment;
  FILETIME              LastWritten;
  DWORD                 CredentialBlobSize;
  LPBYTE                CredentialBlob;
  DWORD                 Persist;
  DWORD                 AttributeCount;
  PCREDENTIAL_ATTRIBUTE Attributes;
  LPTSTR                TargetAlias;
  LPTSTR                UserName;
} CREDENTIAL, *PCREDENTIAL;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试使用 ctypes 调用 wincred api 的相关文章

随机推荐

  • 轻松使用 SecureSocial:在单独的线程池中运行 DB IO

    我有一个 Play 2 2 1 应用程序 使用流畅播放 0 5 0 8 https github com freekh play slick将数据保存到 Postgresql 后端并安全社交 2 1 2 http securesocial
  • 如何在Jmeter中找到准确的“总测试持续时间”?

    我想知道是否有一个 JMeter 监听器可以显示测试运行的总时间 虽然this http code google com p jmeter plugins 插件沿 x 轴显示经过时间 总持续时间 它以秒为单位给出该值 但我想要以毫秒为单位的
  • 自动更新 pandas 中的列?

    在我看来 pandas 为我提供了一个虚拟电子表格 就像 Excel 一样 Excel 电子表格的一件事是您可以将列设置为函数 例如 T c T T r Series 1 1 T T c Series 2 2 T T c 有什么方法可以创建
  • css中*符号的用法

    我发现一些样式表使用 其上的符号 例如 zoom 1 什么是 符号站 有时看起来像 class span 这 谁能帮我解释一下这个符号的用法 in css zoom是一个适用于 ie6 和 ie7 的 hack 是一个通配符 匹配所有元素或
  • 当 WooCommerce 购物车页面上的数量更新时拆分购物车项目

    我想将同一产品的购物车项目拆分为单独的行 当我增加单个产品页面上的数量并添加到购物车时 它显示为单独的购物车项目 我在用着WooCommerce 如果数量超过 1 则将购物车商品分开处理 https stackoverflow com a
  • Enterprise Library 日志记录块的编程配置

    我以前使用过 log4net 但我当前的雇主使用 Enterprise Library 应用程序块 我之前为我的核心日志记录类开发了单元测试 如下所示 并且想知道是否有人知道下面的日志记录应用程序块的 OneTimeSetup 代码的等效项
  • xml到r数据提取

    我需要从 xml 文件中提取数据并绘制以下图表 深度与时间戳 标题应为 IFC 代码 我尝试使用 xmlToList 和 xmlTodataframe 但失败了 我需要帮助 我的 xml 文件看起来像
  • 无需内置方法即可将字符串转换为大写

    我正在尝试在字符串上执行从小写到大写的转换 而不使用任何内置函数 ord 和 char 除外 按照这里不同线程上提出的逻辑 我想出了这个 def uppercase str data ord str data str data str da
  • 如何修复“UnicodeDecodeError:'cp949'编解码器无法解码位置 24 中的字节 0xeb:非法多字节序列”

    我只是用 python3 制作不和谐机器人 client event async def on message message if bot ignore if message author bot return None if messa
  • 如何使用 Perl 将图像上传到 Amazon S3?

    我正在尝试使用 Perl 将文件上传到 S3 根据该模块 http metacpan org pod Amazon S3 Bucket http metacpan org pod Amazon S3 Bucket 以下代码将上传文本文件 c
  • 如何使用 JavaScript 替换 URL 中的数字

    我有一个始终以数字 30 结尾的 URL 我想将其替换为另一个数字 100 我不确定正则表达式是否是最佳选择 如果是 该怎么做 这是我的尝试 但我正在寻找更专业的东西 可以在任何情况下工作 并且只更改 URL 的最后一位 即 30 let
  • 如何在 Intellij IDEA 11 的一个模块中设置 Java 和 Scala?

    我有 IntelliJ 11 我使用 Maven 进行依赖管理 我想创建一个包含 Java 和 Scala 源文件的模块 我已经在项目设置 gt 模块 gt 模块XYZ 下添加了文件夹 src main java 和 src main sc
  • 使用 T-SQL 查询 XML 字段

    如何使用 T SQL 查询 XML 数据中的多个节点并将结果输出到单个逗号分隔的字符串 例如 我想获取以下 XML 中所有目的地名称的列表 如 德国 法国 英国 意大利 西班牙 葡萄牙
  • 单击时突出显示文本框内容

    我有动态生成的用户表单 其中包含标签 复选框和文本框 单击时是否可以选择文本框的内容 这是我用来创建文本框的方法 Set NewTextBox MainFrame Controls Add Forms TextBox 1 With NewT
  • 在asp.net core 2中流式传输视频文件

    我想使用asp net core在浏览器中播放视频 在 html 中我有
  • 抓取大量带有 url 的 Google Scholar 页面

    我正在尝试使用 BeautifulSoup 从 Google 学者的作者那里获取所有出版物的完整作者列表 由于作者的主页只有每篇论文的作者列表 因此我必须打开论文的链接才能获取完整列表 结果 我每隔几次尝试就会遇到验证码 有没有办法避免验证
  • 工具栏中的后退按钮不起作用

    我只有 Activity 它是 ActionBarActivity 类的子级 在方法中我设置OnCreate支持工具栏 为此 我重写了 OnOptionsItemSelected 因此当我按下后退按钮时执行了一些操作 代码如下所示 Acti
  • 为什么 ThreadLocalRandom 的实现如此奇怪?

    这个问题涉及到实施ThreadLocalRandom在 OpenJDK 版本 1 8 0 中 ThreadLocalRandom提供每线程随机数生成器 没有 Random 带来的同步开销 最明显的实现 IMO 是这样的 它似乎保留了向后兼容
  • IE11 上的 XSLT 处理?

    IE11 中的 XSLT 处理发生了什么 在IE8 9 10上 您可以使用 if window ActiveXObject var xslt new ActiveXObject Msxml2 XSLTemplate 在 Chrome Fir
  • 尝试使用 ctypes 调用 wincred api

    我正在尝试使用 ctypes API 读取 Windows 凭证库 但我不确定如何将函数结果转换回可用的 ctypes Structure import ctypes class CREDENTIALS ctypes Structure f