⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 enumssp.cpp

📁 【内容简介】 本书由一流的权威撰写
💻 CPP
字号:
// EnumSSP.cpp : Defines the entry point for the application.
//

#include "stdafx.h"
#define SECURITY_WIN32
#include <sspi.h>

#pragma comment(lib, "Secur32.lib")

// #define STREXPAND(P1) {P1, _T("#P1") }

struct SSPCAPABILITIES {
	ULONG uCapability;
	LPCTSTR pszDesc;
};


SSPCAPABILITIES g_CapabilityList[] = {
   {SECPKG_FLAG_INTEGRITY       , _T("Supports integrity on messages")},
   {SECPKG_FLAG_PRIVACY         , _T("Supports privacy (confidentiality)")},
   {SECPKG_FLAG_TOKEN_ONLY      , _T("Only security token needed")},
   {SECPKG_FLAG_DATAGRAM        , _T("Datagram RPC support")},
   {SECPKG_FLAG_CONNECTION      , _T("Connection oriented RPC support")},
   {SECPKG_FLAG_MULTI_REQUIRED  , _T("Full 3-leg required for re-auth.")},
   {SECPKG_FLAG_CLIENT_ONLY     , _T("Server side functionality not available")},
   {SECPKG_FLAG_EXTENDED_ERROR  , _T("Supports extended error msgs")},
   {SECPKG_FLAG_IMPERSONATION   , _T("Supports impersonation")},
   {SECPKG_FLAG_ACCEPT_WIN32_NAME   , _T("Accepts Win32 names")},
   {SECPKG_FLAG_STREAM          , _T("Supports stream semantics")},
   {SECPKG_FLAG_NEGOTIABLE      , _T("Can be used by the negotiate package")},
   {SECPKG_FLAG_GSS_COMPATIBLE  , _T("GSS Compatibility Available")},
   {SECPKG_FLAG_LOGON           , _T("Supports common LsaLogonUser")},
   {SECPKG_FLAG_ASCII_BUFFERS   , _T("Token Buffers are in ASCII")},
   {SECPKG_FLAG_FRAGMENT        , _T("Package can fragment to fit")},
   {SECPKG_FLAG_MUTUAL_AUTH     , _T("Package can perform mutual authentication")},
   {SECPKG_FLAG_DELEGATION      , _T("Package can delegate")},
};

void ContructCapabilityList(ULONG capability, CComBSTR& bsRetVal)
{
	const int nItems = sizeof(g_CapabilityList)/sizeof(g_CapabilityList[0]);

	for (int i=0; i<nItems; i++) {
		if (capability & g_CapabilityList[i].uCapability) {
			bsRetVal += "   ";
			bsRetVal += g_CapabilityList[i].pszDesc;
			bsRetVal += "\n";
		}
	}
}


	
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

	ULONG cPackages;
	SecPkgInfo* aPackageInfo;
	SECURITY_STATUS status = ::EnumerateSecurityPackages(&cPackages, &aPackageInfo);

	USES_CONVERSION;
	for (ULONG i=0; i<cPackages; i++) {
		CComBSTR bsOut;
		SecPkgInfo& curPkg = aPackageInfo[i];
		ContructCapabilityList(curPkg.fCapabilities, bsOut);
		MessageBox(NULL, W2T(bsOut), curPkg.Name, MB_OK);
	};



	return 0;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -