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

📄 component b.cpp

📁 经验交流,从网上下载的好东西望大家分享
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// local.cpp
#define _WIN32_DCOM
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <iaccess.h>   // IAccessControl
#include <iostream.h>  // For cout
#include "registry.h"  // For registry functions
#include "Component B\component.h" // Generated by MIDL

#define MB_SERVICE_NOTIFICATION          0x00200000L

void display_proxy_info(IUnknown* pUnknown)
{
	DWORD AuthnSvc;
	DWORD AuthzSvc;
	OLECHAR* ServerPrincName;
	DWORD AuthnLevel;
	DWORD ImpLevel;
	RPC_AUTH_IDENTITY_HANDLE pAuthInfo;
	DWORD Capabilities;

	HRESULT hr = CoQueryProxyBlanket(pUnknown, &AuthnSvc, &AuthzSvc, &ServerPrincName, &AuthnLevel, &ImpLevel, &pAuthInfo, &Capabilities);
	if(FAILED(hr))
		cout << "CoQueryProxyBlanket failed" << endl;

	cout << endl << "Proxy security blanket information follows:" << endl;

	switch(AuthnSvc)
	{
	case RPC_C_AUTHN_NONE:
		cout << "Authentication service is RPC_C_AUTHN_NONE." << endl;;
		break;
	case RPC_C_AUTHN_GSS_NEGOTIATE:
		cout << "Authentication service is RPC_C_AUTHN_GSS_NEGOTIATE." << endl;
		break;
	case RPC_C_AUTHN_GSS_KERBEROS:
		cout << "Authentication service is RPC_C_AUTHN_GSS_KERBEROS." << endl;
		break;
	case RPC_C_AUTHN_WINNT:
		cout << "Authentication service is RPC_C_AUTHN_WINNT." << endl;
		break;
	case RPC_C_AUTHN_DEFAULT:
		cout << "Authentication service is RPC_C_AUTHN_DEFAULT." << endl;
		break;
	}

	switch(AuthzSvc)
	{
	case RPC_C_AUTHZ_NONE:
		cout << "Authorization service is RPC_C_AUTHZ_NONE." << endl;
		break;
	case RPC_C_AUTHZ_NAME:
		cout << "Authorization service is RPC_C_AUTHZ_NAME." << endl;
		break;
	case RPC_C_AUTHZ_DCE:
		cout << "Authorization service is RPC_C_AUTHZ_DCE." << endl;
		break;
	case RPC_C_AUTHZ_DEFAULT:
		cout << "Authorization service is RPC_C_AUTHZ_DEFAULT." << endl;
		break;
	}

	wprintf(L"The current principal name is %s.\n", ServerPrincName);
	CoTaskMemFree(ServerPrincName);

	switch(AuthnLevel)
	{
	case RPC_C_AUTHN_LEVEL_DEFAULT:
		cout << "Authentication level is RPC_C_AUTHN_LEVEL_DEFAULT." << endl;
		break;
	case RPC_C_AUTHN_LEVEL_NONE:
		cout << "Authentication level is RPC_C_AUTHN_LEVEL_NONE." << endl;
		break;
	case RPC_C_AUTHN_LEVEL_CONNECT:
		cout << "Authentication level is RPC_C_AUTHN_LEVEL_CONNECT." << endl;
		break;
	case RPC_C_AUTHN_LEVEL_CALL:
		cout << "Authentication level is RPC_C_AUTHN_LEVEL_CALL." << endl;
		break;
	case RPC_C_AUTHN_LEVEL_PKT:
		cout << "Authentication level is RPC_C_AUTHN_LEVEL_PKT." << endl;
		break;
	case RPC_C_AUTHN_LEVEL_PKT_INTEGRITY:
		cout << "Authentication level is RPC_C_AUTHN_LEVEL_PKT_INTEGRITY." << endl;
		break;
	case RPC_C_AUTHN_LEVEL_PKT_PRIVACY:
		cout << "Authentication level is RPC_C_AUTHN_LEVEL_PKT_PRIVACY." << endl;
		break;
	}

	switch(ImpLevel)
	{
	case RPC_C_IMP_LEVEL_DEFAULT:
		cout << "Impersonation level is RPC_C_IMP_LEVEL_DEFAULT." << endl;
		break;
	case RPC_C_IMP_LEVEL_ANONYMOUS:
		cout << "Impersonation level is RPC_C_IMP_LEVEL_ANONYMOUS." << endl;
		break;
	case RPC_C_IMP_LEVEL_IDENTIFY:
		cout << "Impersonation level is RPC_C_IMP_LEVEL_IDENTIFY." << endl;
		break;
	case RPC_C_IMP_LEVEL_IMPERSONATE:
		cout << "Impersonation level is RPC_C_IMP_LEVEL_IMPERSONATE." << endl;
		break;
	case RPC_C_IMP_LEVEL_DELEGATE:
		cout << "Impersonation level is RPC_C_IMP_LEVEL_DELEGATE." << endl;
		break;
	}

//	wprintf(L"The client identity user name is %s.\n", ((SEC_WINNT_AUTH_IDENTITY_W*)pAuthInfo)->User);
//	wprintf(L"The client identity domain name is %s.\n", ((SEC_WINNT_AUTH_IDENTITY_W*)pAuthInfo)->Domain);
//	wprintf(L"The client identity password is %s.\n", ((SEC_WINNT_AUTH_IDENTITY_W*)pAuthInfo)->Password);

	if((Capabilities | EOAC_NONE) == 0)
		cout << "Capabilities include EOAC_NONE" << endl;
	if((Capabilities | EOAC_DEFAULT) == 0)
		cout << "Capabilities include EOAC_DEFAULT" << endl;
	if((Capabilities | EOAC_MUTUAL_AUTH) == 0)
		cout << "Capabilities include EOAC_MUTUAL_AUTH" << endl;
	if((Capabilities | EOAC_STATIC_CLOAKING) == 0)
		cout << "Capabilities include EOAC_STATIC_CLOAKING" << endl;
	if((Capabilities | EOAC_DYNAMIC_CLOAKING) == 0)
		cout << "Capabilities include EOAC_DYNAMIC_CLOAKING" << endl;
	if((Capabilities | EOAC_SECURE_REFS) == 0)
		cout << "Capabilities include EOAC_SECURE_REFS" << endl;
	if((Capabilities | EOAC_ACCESS_CONTROL) == 0)
		cout << "Capabilities include EOAC_ACCESS_CONTROL" << endl;
	if((Capabilities | EOAC_APPID) == 0)
		cout << "Capabilities include EOAC_APPID" << endl;
	if((Capabilities | EOAC_DISABLE_AAA) == 0)
		cout << "Capabilities include EOAC_DISABLE_AAA" << endl;

//	_getch();
}

void funcs()
{
	DWORD AuthnSvc = 0;
	DWORD AuthzSvc = 0;
	DWORD ImpLevel = 0;
	OLECHAR* ServerPrincName;
	DWORD AuthnLevel = 0;
	RPC_AUTHZ_HANDLE Privs = 0;
	DWORD Capabilities = 0;

	HRESULT hr = CoQueryClientBlanket(&AuthnSvc, &AuthzSvc, &ServerPrincName, &AuthnLevel, NULL, &Privs, &Capabilities);

	if(FAILED(hr))
		cout << "CoQueryClientBlanket failed" << endl;


	switch(AuthnSvc)
	{
	case RPC_C_AUTHN_NONE:
		cout << "RPC_C_AUTHN_NONE ";
		break;
	case RPC_C_AUTHN_GSS_NEGOTIATE  :
		cout << "RPC_C_AUTHN_GSS_NEGOTIATE   ";
		break;
	case RPC_C_AUTHN_GSS_KERBEROS :
		cout << "RPC_C_AUTHN_GSS_KERBEROS  ";
		break;
	case RPC_C_AUTHN_WINNT:
		cout << "RPC_C_AUTHN_WINNT ";
		break;
	case RPC_C_AUTHN_DEFAULT:
		cout << "RPC_C_AUTHN_DEFAULT ";
		break;
	}

	switch(AuthzSvc)
	{
	case RPC_C_AUTHZ_NONE:
		cout << "RPC_C_AUTHZ_NONE ";
		break;
	case RPC_C_AUTHZ_NAME:
		cout << "RPC_C_AUTHZ_NAME ";
		break;
	case RPC_C_AUTHZ_DCE:
		cout << "RPC_C_AUTHZ_DCE ";
		break;
	}

	wprintf(L"ServerPrincName %s.\n", ServerPrincName);
	CoTaskMemFree(ServerPrincName);

	switch(AuthnLevel)
	{
	case RPC_C_AUTHN_LEVEL_NONE:
		cout << "RPC_C_AUTHN_LEVEL_NONE ";
		break;
	case RPC_C_AUTHN_LEVEL_CONNECT:
		cout << "RPC_C_AUTHN_LEVEL_CONNECT ";
		break;
	case RPC_C_AUTHN_LEVEL_CALL:
		cout << "RPC_C_AUTHN_LEVEL_CALL ";
		break;
	case RPC_C_AUTHN_LEVEL_PKT:
		cout << "RPC_C_AUTHN_LEVEL_PKT ";
		break;
	case RPC_C_AUTHN_LEVEL_PKT_INTEGRITY:
		cout << "RPC_C_AUTHN_LEVEL_PKT_INTEGRITY ";
		break;
	case RPC_C_AUTHN_LEVEL_PKT_PRIVACY:
		cout << "RPC_C_AUTHN_LEVEL_PKT_PRIVACY ";
		break;
	}

	switch(ImpLevel)
	{
	case RPC_C_IMP_LEVEL_DEFAULT      :
		cout << "RPC_C_IMP_LEVEL_DEFAULT ";
		break;
	case RPC_C_IMP_LEVEL_ANONYMOUS    :
		cout << "RPC_C_IMP_LEVEL_ANONYMOUS ";
		break;
	case RPC_C_IMP_LEVEL_IDENTIFY     :
		cout << "RPC_C_IMP_LEVEL_IDENTIFY ";
		break;
	case RPC_C_IMP_LEVEL_IMPERSONATE  :
		cout << "RPC_C_IMP_LEVEL_IMPERSONATE ";
		break;
	case RPC_C_IMP_LEVEL_DELEGATE     :
		cout << "RPC_C_IMP_LEVEL_DELEGATE ";
		break;
	}
		cout << endl;


	wprintf(L"Privs %s\n", Privs);

	if((Capabilities | EOAC_NONE) == 0)
		cout << "Capabilities include EOAC_NONE" << endl;
	if((Capabilities | EOAC_DEFAULT) == 0)
		cout << "Capabilities include EOAC_DEFAULT" << endl;
	if((Capabilities | EOAC_MUTUAL_AUTH) == 0)
		cout << "Capabilities include EOAC_MUTUAL_AUTH" << endl;
	if((Capabilities | EOAC_STATIC_CLOAKING) == 0)
		cout << "Capabilities include EOAC_STATIC_CLOAKING" << endl;
	if((Capabilities | EOAC_DYNAMIC_CLOAKING) == 0)
		cout << "Capabilities include EOAC_DYNAMIC_CLOAKING" << endl;
	if((Capabilities | EOAC_SECURE_REFS) == 0)
		cout << "Capabilities include EOAC_SECURE_REFS" << endl;
	if((Capabilities | EOAC_ACCESS_CONTROL) == 0)
		cout << "Capabilities include EOAC_ACCESS_CONTROL" << endl;
	if((Capabilities | EOAC_APPID) == 0)
		cout << "Capabilities include EOAC_APPID" << endl;
	if((Capabilities | EOAC_DISABLE_AAA) == 0)
		cout << "Capabilities include EOAC_DISABLE_AAA" << endl;
}

const IID IID_IAccessControl = {0xEEDD23E0,0x8410,0x11CE,{0xA1,0xC3,0x08,0x00,0x2B,0x2B,0x8D,0x8F}};

long g_cComponents = 0;
long g_cServerLocks = 0;
HANDLE g_hEvent;

class CInsideCOM : public ISum
{
public:
	// IUnknown
	ULONG __stdcall AddRef();
	ULONG __stdcall Release();
	HRESULT __stdcall QueryInterface(REFIID riid, void** ppv);

	// ISum
	HRESULT __stdcall Sum(int x, int y, int* retval);

	CInsideCOM() : m_cRef(1) { g_cComponents++; }
	~CInsideCOM() { g_cComponents--; }

private:
	ULONG m_cRef;
};

ULONG CInsideCOM::AddRef()
{
	return ++m_cRef;
}

ULONG CInsideCOM::Release()
{
	if(--m_cRef != 0)
		return m_cRef;
	SetEvent(g_hEvent);
	delete this;

⌨️ 快捷键说明

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