我一直在尝试创建一个程序来在本地有效地验证用户凭据,而无需客户端和服务器处理LogonUser()。我从security.dll和secur32.dll获取InitializeSecurityContext()函数时遇到了麻烦,并且已经收到标题中提到的错误消息。我试着查看不同的文档,看它是不再是一个支持的功能,但我找不到任何说它的东西。我执行的操作与Microsoft示例here非常相似。
我如何加载函数:
#ifdef UNICODE
security.AcquireCredentialsHandle = ( ACQUIRE_CREDENTIALS_HANDLE_FN )GetProcAddress( hdll, "AcquireCredentialsHandleW" );
security.InitializeSecurityContext = ( INITIALIZE_SECURITY_CONTEXT_FN )GetProcAddress( hdll, "InitializeSecurityContextW" );
security.QuerySecurityPackageInfo = ( QUERY_SECURITY_PACKAGE_INFO_FN )GetProcAddress( hdll, "QuerySecurityPackageInfoW" );
#else
security.AcquireCredentialsHandle = ( ACQUIRE_CREDENTIALS_HANDLE_FN )GetProcAddress( hdll, "AcquireCredentialsHandleA" );
security.QuerySecurityPackageInfo = ( QUERY_SECURITY_PACKAGE_INFO_FN )GetProcAddress( hdll, "QuerySecurityPackageInfoA" );
security.InitializeSecurityContext = ( INITIALIZE_SECURITY_CONTEXT_FN )GetProcAddress( hdll, "InitializeSecurityContextA" );
#endif
我检查错误:
if ( !security.InitializeSecurityContext )
return LoadingError( showError, exit );
所有其他功能加载没有问题。
作为奖励,如果有人可以指出我需要调用什么来简单地验证本地用户名和密码,那将是很好的。微软的例子看起来有点压倒性的,我不确定什么适用于我的情况。如果你们认为我自己更好地解决这个问题,那很好。
答案 0 :(得分:0)
根据文档InitializeSecurityContext()
在Security.h
和Secur32.lib
中定义,因此您真的不需要GetProcAddress()
来获取它。只需#include
这个标题,就像这个lib一样。
QuerySecurityPackageInfo()
和AcquireCredentialsHandle()