-1

我正在尝试验证用户是否有权访问该机器。

我正在尝试按照此处所述使用LogonUser

    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)>
4

1 回答 1

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应该查看当前域,因此如果您真的能够使用系统上的任何用户名和密码运行此代码,那么您的系统有问题,或者您的域有问题。

于 2013-01-12T00:26:40.827 回答