小编ixe*_*013的帖子

如何通过ntsd -d在windbg中显示源代码?

当我ntsd -d通过管道传输时,我无法在windbg中显示源代码windbg -k,但是当我在本地调试时它可以工作.

我想调试Winlogon.exe和LSASS.exe的第一个代码执行.但为了便于重现问题,我编写了这个设置:

  • 我使用CrashMe示例应用程序,预先构建了源代码和符号,并在目标和主机上复制到C:\ CrashMe
  • 我到处都使用适用于Windows的Windows调试工具(DTW)版本6.12.0002.633.
  • 目标是运行Windows XP SP3,主机Windows 7终极版.
  • 两台机器上的每个路径和设置都是相同的:DTW路径和crashme路径.
  • 我总是使用完全限定的路径(如c:\ dtw \ntsd.exe).
  • 我在VM中运行XP,启动时使用 /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200

我可以使用此命令在本地进行调试,从C:\ CrashMe启动:

windbg -g -G -srcpath C:\CrashMe -y C:\CrashMe debug\CrashMe.exe
Run Code Online (Sandbox Code Playgroud)

我可以启动Windows XP虚拟机并使用以下命令连接到它:

windbg -n -k com:pipe,port=\\.\pipe\com_1,reconnect -srcpath SRV*;C:\CrashMe -y   
c:\windows\system32;c:\windows\symbols;C:\CrashMe\debug  
Run Code Online (Sandbox Code Playgroud)

但我需要调试远程机器.在目标上,我有这些选择:

  1. 通过-server和调试-remote
  2. 打破正在运行的过程
  3. 使用图像文件执行选项(IFEO).

在每个选项中,我都可以看到符号(x crashme!*作品).

我不能使用#1(-server)或#2(breakin.exe <pid>),因为我想调试身份验证提供程序的启动代码,所以我需要LSASS.exe从下开始ntsd -d.我不能让它运行并在以后附加.

我的理解是我需要使用IFEO.使用gflags.exe而不是手动修改注册表,我将可执行选项设置为

c:\dtw\ntsd -d -G -lines -x -y c:\symcache;c:\windows\system32 -n -srcpath C:\CrashMe\ …
Run Code Online (Sandbox Code Playgroud)

dll windbg remote-debugging

28
推荐指数
1
解决办法
3850
查看次数

Windows7凭据提供程序,用于在硬件事件上自动登录用户

我正在为Windows 7开发自定义凭据提供程序.我的目标是在发生某个硬件事件时自动登录用户.我已经阅读了与此相关的所有MSDN文章,并实现了一个简单的凭据提供程序,它与外部设备连接以获取用户名和密码并将其传递给WinLogon.

但是,我仍然坚持最后一块拼图.目前,用户仍然必须按登录按钮才能登录.自动执行此操作的最佳方法是什么?

windows-7 credential-providers

6
推荐指数
1
解决办法
3805
查看次数

是什么让SwitchDesktop在用户解锁会话后无法正常工作?

我有一个程序可以切换桌面并在其上启动一个新进程.进程退出时,父进程将还原原始桌面.

出于测试目的,我在一个触发切换的普通win32应用程序中放了一个按钮.它工作,并关闭启动的进程(记事本),我回到原来的桌面.

在同一个程序中,我调用了WTSRegisterSessionNotification以在会话解锁时接收通知(WTS_SESSION_UNLOCK).我收到了

但是当我尝试在WTS_SESSION_UNLOCK消息处理程序中切换桌面时,SwitchDesktop失败并且GetLastError为0.文档说最后一个错误通常不是由SwitchDesktop设置的.

有趣的是,如果我在for循环中调用切换桌面,它将在第5次迭代时工作.

简而言之,这不起作用:

    case WM_WTSSESSION_CHANGE:
      if(wParam == WTS_SESSION_UNLOCK)          
      {
          SwitchDesktop(a_valid_desktop_handle);
      }
    break;
Run Code Online (Sandbox Code Playgroud)

但这个丑陋的黑客有效:

    case WM_WTSSESSION_CHANGE:
      if(wParam == WTS_SESSION_UNLOCK)          
      {
         for(int i=0; i<10; ++i)
         {
            if(SwitchDesktop(a_valid_desktop_handle))
            {
                //This will work when i == 5, maybe 6.
                break;
            }
         }
      }
    break;
Run Code Online (Sandbox Code Playgroud)

设置一个计时器(退出消息循环)也有效,但对于这个问题,它只是一个更复杂的循环形式.SwitchDesktop将在完成一系列WM_TIMER消息后继续工作.看起来像是不变的时间,虽然我没有测量它.

SwitchDesktop的MSDN文档提到我将使用自定义Userinit进程失败.但是在切换之前获取当前桌面的名称:

wchar_t name[512];
GetUserObjectInformation(GetThreadDesktop(GetCurrentThreadId()), UOI_NAME, name, sizeof(name)/sizeof(*name), 0);
OutputDebugString(name);
Run Code Online (Sandbox Code Playgroud)

给我default所有的时间.并且因为GetLastError是0 而不是5(访问被拒绝)我非常确定在收到WTS_SESSION_UNLOCK通知之前安全桌面已经消失.

我知道在屏幕被锁定时我无法切换桌面,但桌面解锁后是否有"宽限期",我无法调用SwitchDesktop?

windows winapi wtsapi32

6
推荐指数
1
解决办法
1755
查看次数

JPA 查询超时参数被忽略但 @Transaction 注释有效

我希望 Spring Boot 应用程序对 Postgres 数据库进行的 JPA 查询在 5 秒后超时。

我创建了这个 20 秒查询来测试超时:

@Query(value = "select count(*) from pg_sleep(20)", nativeQuery = true)
int slowQuery();
Run Code Online (Sandbox Code Playgroud)

我在 中设置了以下属性application.config

spring.jpa.properties.javax.persistence.query.timeout=3000
javax.persistence.query.timeout=5000
Run Code Online (Sandbox Code Playgroud)

但是查询在 3s 或 5s 后不会超时(执行仍然需要 20s)。

奇怪的是,如果我注释slowQuery@Transactional(timeout = 10),超时后10秒左右。

我不想注释每个查询。我正在使用 JPA 2.0 和 Tomcat 连接池。

仅通过在应用程序属性文件中设置它们就可以使超时工作需要什么魔法?

java spring timeout jpa jpa-2.0

6
推荐指数
1
解决办法
4763
查看次数

如何正确配置 aws-vault 以与 Ubuntu Linux 20.04 LTS 配合使用?

我全新安装了 Ubuntu 20.04,在 .aws/config 中设置了 [profile ...],并设置了 /credentials,但是根据我是否使用 kwallet 还是秘密服务,我看到了 2 个单独的错误 - 两者似乎都无法按预期工作,初始误差:

$ aws-vault --debug ls
2021/02/23 18:35:47 [keyring] Considering backends: [kwallet secret-service file]
2021/02/23 18:35:47 Loading config file /home/leigh/.aws/config
2021/02/23 18:35:47 Parsing config file /home/leigh/.aws/config
aws-vault: error: The name org.kde.kwalletd was not provided by any .service files
Run Code Online (Sandbox Code Playgroud)

在其他地方的帖子中,建议使用“秘密服务”:export AWS_VAULT_BACKEND=secret-service

然而,这样的设置会引发一个新的错误:

$ aws-vault --debug ls
2021/02/23 18:40:32 [keyring] Considering backends: [secret-service]
2021/02/23 18:40:32 Loading config file /home/leigh/.aws/config
2021/02/23 18:40:32 Parsing config file /home/leigh/.aws/config
aws-vault: error: The collection …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services

6
推荐指数
0
解决办法
8452
查看次数

LDAP 过滤器 - 查找特定 OU 的所有用户

我在使用LDAP Search Filter. 我需要检索的是特定LDAP组的所有用户OU=Staff,OU=Users,OU=Accounts,DC=test,DC=local

我的搜索是:

(&(objectCategory=user)(OU=Staff,OU=Users,OU=Accounts,DC=test,DC=local))
Run Code Online (Sandbox Code Playgroud)

目前它没有返回任何结果。我错过了什么?

php ldap active-directory ldap-query

5
推荐指数
1
解决办法
5万
查看次数

我必须为 argparse.FileType 指定什么模式来追加,保持 - 作为默认值

我必须用这个命令行写一个程序:

demo.py [-h] -f FILENAME [-o]
Run Code Online (Sandbox Code Playgroud)

文件名是强制性的,意味着我们要附加到的文件。-o 标志意味着文件将被覆盖。

这个 argparse 代码几乎有效:

import argparse

parser = argparse.ArgumentParser(description='A foo that bars')

parser.add_argument("-f",
                  "--file", dest="filename", required=True,
                  type=argparse.FileType('a+'),
                  help="The output file (append mode, see --overwrite).")

parser.add_argument("-o",
                  "--overwrite", dest="overwrite",
                  action='store_true',
                  help="Will overwrite the filename if it exists")

args = parser.parse_args()

if args.overwrite:
    args.filename.truncate(0)

print >> args.filename, 'Hello, World!'
Run Code Online (Sandbox Code Playgroud)

但是如果我将-(stdout)指定为文件名,则会出现此错误:

error: argument -f/--file: invalid FileType('a+') value: '-'
Run Code Online (Sandbox Code Playgroud)

我试过aor r+,我得到同样的错误。我在 Windows 上使用 Python 2.7,但它也必须在 Linux 上运行。命令行不能更改为旧版支持。

如何保持argparse对 stdout 速记的内置支持,但支持覆盖功能?

python arguments stdout

4
推荐指数
1
解决办法
1677
查看次数