0

我一直在尝试创建一个程序来在本地有效地验证用户凭据,而无需客户端和服务器处理 LogonUser() 提供。我在从 security.dll 和 secur32.dll 获取 InitializeSecurityContext() 函数时遇到了麻烦,并且一直收到标题中提到的错误消息。我试图查看不同的文档以查看它是否不再是受支持的功能,但我找不到任何说它的东西。我执行的操作与此处的 Microsoft 示例非常相似。

我如何加载函数:

#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 );

所有其他功能加载没有问题。

作为奖励,如果有人能指出我需要调用什么来简单地验证本地用户名和密码,那就太好了。微软的例子有点让人难以理解,我还不确定什么适用于我的情况。如果你们认为我自己解决这个问题会更好,那很好。

4

1 回答 1

0

根据文档InitializeSecurityContext()中定义的Security.hSecur32.lib所以你真的不需要GetProcAddress()得到它。只是#include这个标题,喜欢这个库。

QuerySecurityPackageInfo()和_AcquireCredentialsHandle()

于 2014-04-11T23:55:11.777 回答