使用python检查windows用户是否存在

时间:2013-01-11 23:41:53

标签: python pywin32

我正在尝试验证用户是否可以访问该计算机。

我正在尝试使用LogonUser所述的here

    logging.info("checking credentials")
    try:
        win32security.LogonUser (
            name, 
            domain,
            password,
            win32security.LOGON32_LOGON_NETWORK,
            win32security.LOGON32_PROVIDER_DEFAULT
        )
    except win32security.error, e:
        logging.warn(e)
        raise e
    else:
        logging.info('pass')

无论我将namepassword(比如说​​domain = None)放在哪里,它总是通过。

我错过了什么吗?

更新:重现:

import win32security

print win32security.LogonUser (
                "asdasdasdasdfagf", 
                None,
                "asdasdasdasdasda",
                win32security.LOGON32_LOGON_NETWORK,
                win32security.LOGON32_PROVIDER_DEFAULT
            )

输出:

<PyHANDLE at 34009576 (276)>

1 个答案:

答案 0 :(得分:3)

虽然我怀疑它实际上是你所追求的答案,但我在你要测试的内容和我在我使用的应用程序中成功的方式之间的唯一区别是使用LOGON32_LOGON_NETWORK标志而不是LOGON32_LOGON_INTERACTIVE标志。对于我们的产品所做的事情,我们对桌面交互性有特定的要求,我怀疑它实际上是一个会影响你的结果的变化。

def testLogin(self):
  try:
    LogonUser(self.wrappers['User'].GetValue(),
              self.wrappers['Domain'].GetValue(),
              self.wrappers['Password'].GetRawValue(),
              LOGON32_LOGON_INTERACTIVE,
              LOGON32_PROVIDER_DEFAULT)
    RevertToSelf()
  except Exception, e:
    wx.MessageBox(unicode(e), _("Error"))
    return False
  return True

None的域值应该查看当前域,因此如果您真的能够使用任何用户名运行此代码,并且您的系统上的密码,然后您的系统有问题,或您的域有问题。