📄 component b.cpp
字号:
// 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 + -