【问题标题】:ADsGetObject function taking long time to returnADsGetObject 函数需要很长时间才能返回
【发布时间】:2011-11-04 05:20:37
【问题描述】:

在用户身份验证过程中,我正在调用 ADsGetObject 函数,该函数调用至少需要 15 秒才能返回。我的机器中有近 20 个组。调用堆栈如下所示。延迟的原因可能是什么?

00fcc230 77215ccc 7548179c 000005f9 00000000 ntdll!KiFastSystemCallRet
00fcc234 7548179c 000005f9 00000000 00000000 ntdll!NtWaitForSingleObject+0xc
00fcc2a0 7706efa3 000005f9 ffffffff 00000000 KERNELBASE!WaitForSingleObjectEx+0x98
00fcc2b8 7682c1bf 000005f9 ffffffff 00000000 kernel32!WaitForSingleObjectExImplementation+0x75
00fcc2d0 7682c179 00000000 ffffffff 000003e5 RPCRT4!UTIL_WaitForSyncIO+0x1c
00fcc2ec 7682d488 00000000 00fcc30c 00000000 RPCRT4!UTIL_GetOverlappedResultEx+0x62
00fcc314 7682c0f1 001978c0 0000005c 00238348 RPCRT4!NMP_SyncSendRecv+0xb6
00fcc340 7682ce5d 00238228 0000005c 00fcc464 RPCRT4!OSF_CCONNECTION::TransSendReceive+0xc5
00fcc3c4 7682cdc9 00197790 001a9478 0024e9a8 RPCRT4!OSF_CCONNECTION::SendFragment+0x295
00fcc420 7682cb39 00000018 00000000 ffffffff RPCRT4!OSF_CCALL::SendNextFragment+0x302
00fcc474 7682ca56 0024e9a8 00fcc50c 00fcc4b4 RPCRT4!OSF_CCALL::FastSendReceive+0x239
00fcc494 7682c9df 00fcc4b4 00fcc50c 00fcc538 RPCRT4!OSF_CCALL::SendReceiveHelper+0x55
00fcc4bc 7683c1fc 00238360 00fcc538 00fcc538 RPCRT4!OSF_CCALL::SendReceive+0x43
00fcc4d0 7683c6cf 00fcc50c 74ab1c60 00000001 RPCRT4!I_RpcSendReceive+0x29
00fcc4e4 7683c69d 00fcc538 002383a4 00fcc538 RPCRT4!NdrSendReceive+0x31
00fcc4f4 76895744 7d52523d 00000000 00000000 RPCRT4!NdrpSendReceive+0xc
00fcc90c 74ab5096 74ab1c60 74ab45de 00fcc92c RPCRT4!NdrClientCall2+0x1a6
00fcc924 74ab4d7d 00000000 00000000 00000000 LOGONCLI!DsrGetDcNameEx2+0x19
00fcc998 74ab4cc8 00000000 00000000 00000000 LOGONCLI!DsGetDcNameWithAccountW+0x17e
00fcc9c0 69b49029 00000000 0024f560 00000000 LOGONCLI!DsGetDcNameW+0x20
00fcc9fc 69b48f85 0024f560 00fcca30 00000000 adsnt!DsGetDcNameNTWrapper+0x5c
00fcca3c 69b49207 0024f560 00000001 00fccf04 adsnt!WinNTGetCachedObject+0x26e
00fcced0 69b4557e 0024f560 00fccf00 00fccf04 adsnt!WinNTGetCachedName+0x11a
00fcd988 69b41ddd 00fcd9a0 00fcda48 00fcda38 adsnt!HeuristicGetObject+0x110
00fcda14 69b41cc6 0022d67c 00fcda48 00fcda38 adsnt!GetObjectW+0x1a4
00fcda64 69b41c77 001bb080 0022d67c 00fcdafc adsnt!CWinNTProvider::ResolvePathName+0x3e
00fcda80 76e2cba7 00232a30 001bb080 0022d67c adsnt!CWinNTProvider::ParseDisplayName+0x26
00fcdacc 76e2cad6 001bb080 0022d67c 00fcdafc ole32!FindClassMoniker+0x8b
00fcdb04 6f1535c9 001bb080 0022d67c 00fcdb28 ole32!MkParseDisplayName+0xbb
00fcdb3c 6f1534db 0022d67c 00aa2d68 00fcdb84 ACTIVEDS!GetObjectW+0x117
00fcdb54 007d5ec7 0022d67c 00aa2d68 00fcdb84 ACTIVEDS!ADsGetObject+0x15

【问题讨论】:

  • 最后它是否有效?你能提供更多的上下文吗?
  • 它正在工作,但需要很长时间才能返回。
  • 请您提供更多背景信息?代码行,客户端计算机的情况。

标签: windows winapi authentication windows-7 active-directory


【解决方案1】:

使用Process Monitor 找出需要这么长时间的原因。可能是某种超时。您将在事件日志中看到它。也许你会遇到一个有趣的案例,比如Mark with his slow logons ;)

【讨论】:

  • 感谢您的回答。我发现此调用堆栈阻塞了操作。我想我也会从 Process Monitor 中得到同样的结果。但是这种阻塞的原因是问题。
  • 您不仅可以获得调用堆栈,还可以获得磁盘、注册表和设备活动、函数调用参数和函数结果。当然,这是在黑暗中拍摄的,但也许你会在那里找到一些东西。
  • 我找到了原因,在很多情况下域/用户名不存在。发现域中不存在此类用户时返回错误需要时间!
猜你喜欢
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 2018-09-10
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多