我正在尝试验证用户是否可以访问该计算机。
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')
无论我将name
或password
(比如说domain = None
)放在哪里,它总是通过。
我错过了什么吗?
更新:重现:
import win32security
print win32security.LogonUser (
"asdasdasdasdfagf",
None,
"asdasdasdasdasda",
win32security.LOGON32_LOGON_NETWORK,
win32security.LOGON32_PROVIDER_DEFAULT
)
输出:
<PyHANDLE at 34009576 (276)>
答案 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
的域值应该查看当前域,因此如果您真的能够使用任何用户名运行此代码,并且您的系统上的密码,然后您的系统有问题,或您的域有问题。