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

📄 clienta.cpp

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

#include "stdafx.h"
#include <tchar.h>

int DisplayUsage()
{
	static LPCTSTR g_pszUsage = 
_T("ClientA.exe [-anon | -iden | -imp | -del | -delB | -cloak]");

	::MessageBox(NULL, g_pszUsage, _T("Usage"), MB_OK);
	return 1;
}

void sub(DWORD dwImpLevel, long lDelegate);

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	if (2 != __argc) {
		return DisplayUsage();
	}

	long lDelegate = 0;
	DWORD dwImpersonationLevel;
	if (!stricmp(__targv[1], "-anon")) {
		dwImpersonationLevel = RPC_C_IMP_LEVEL_ANONYMOUS;
	}else
	if (!stricmp(__targv[1], "-iden")) {
		dwImpersonationLevel = RPC_C_IMP_LEVEL_IDENTIFY;
	}else
	if (!stricmp(__targv[1], "-imp")) {
		dwImpersonationLevel = RPC_C_IMP_LEVEL_IMPERSONATE;
	}else
	if (!stricmp(__targv[1], "-del")) {
		dwImpersonationLevel = RPC_C_IMP_LEVEL_DELEGATE;
	}else
	if (!stricmp(__targv[1], "-delB")) { // delegation at ServerB as well
		dwImpersonationLevel = RPC_C_IMP_LEVEL_DELEGATE;
		lDelegate = 1; // no cloaking
	}else
	if (!stricmp(__targv[1], "-cloak")) { // delegation at ServerB as well
		dwImpersonationLevel = RPC_C_IMP_LEVEL_DELEGATE;
		lDelegate = 2; // cloaking
	}else {
		return DisplayUsage();
	}

	
 	CCPLComInitializer init;

	try {
		sub(dwImpersonationLevel, lDelegate);
	}catch(_com_error& e) {
		::MessageBox(NULL, CPLGetError(e), NULL, MB_OK);
	}

	return 0;
}

void sub(DWORD dwImpLevel, long lDelegate)
{
	HRESULT hr = ::CoInitializeSecurity(
		NULL, 
		-1, 
		NULL, 
		NULL, 
		RPC_C_AUTHN_LEVEL_DEFAULT, 
		dwImpLevel,
		NULL, 
		EOAC_NONE,
		NULL);
	if (FAILED(hr)) {
		_com_issue_error(hr);
	}

	IUnknownPtr spUnk;
	hr = CPLCreateInstance(OLESTR("PVDEV"), 
		__uuidof(SERVERBLib::MyServerB),
		&spUnk);
	if (FAILED(hr)) {
		_com_issue_error(hr);
	}

	SERVERBLib::IMyServerBPtr spServer = spUnk;
	_bstr_t bsOutput = spServer->DoIt(lDelegate);
	::MessageBox(NULL, bsOutput, _T("Output"), MB_OK);
}

⌨️ 快捷键说明

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