无法使用GetProcAddress()加载InitializeSecurityContext(),"找不到指定的过程"

时间:2014-04-11 23:31:27

标签: c windows-7 sspi

我一直在尝试创建一个程序来在本地有效地验证用户凭据,而无需客户端和服务器处理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 );

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

作为奖励,如果有人可以指出我需要调用什么来简单地验证本地用户名和密码,那将是很好的。微软的例子看起来有点压倒性的,我不确定什么适用于我的情况。如果你们认为我自己更好地解决这个问题,那很好。

1 个答案:

答案 0 :(得分:0)

根据文档InitializeSecurityContext()Security.hSecur32.lib中定义,因此您真的不需要GetProcAddress()来获取它。只需#include这个标题,就像这个lib一样。

{p>同样适用于QuerySecurityPackageInfo()AcquireCredentialsHandle()