SHV 模块
注意
网络访问保护平台从Windows 10开始不可用
(SHV) 模块设置系统运行状况验证程序,包括向 NAP 系统注册和取消注册。
注意
NAP SDK 还包含可在 ...\Samples\NetDS\NAP... 中找到的完整示例代码集。SDK 安装的目录。 此示例集包括一个系统运行状况代理, (SHA) 、SHV 和强制客户端 (EC) 。 它具有在 SHA-SHV 和 SHA-EC 之间设置通信的完整工作 NAP 方案。
#include <windows.h>
#include "stdafx.h"
#include "NapUtil.h"
static const wchar_t friendlyName[] = L"SDK SHV Sample";
static const wchar_t version[] = L"1.0.0.1";
static const wchar_t description[] = L"System Health Validator(SHV)";
static const wchar_t vendor[] = L"Microsoft";
/// Registers the SDK SHV with the NAP Server.
HRESULT RegisterSdkShv()
{
HRESULT hr = S_OK;
CComPtr<INapServerManagement> pSHVMgmt = NULL;
NapComponentRegistrationInfo shvInfo;
ZeroMemory (&shvInfo, sizeof(shvInfo));
hr = pSHVMgmt.CoCreateInstance(CLSID_NapServerManagement, NULL, CLSCTX_INPROC_SERVER);
hr = FillShvComponentRegistrationInfo(&shvInfo);
hr = pSHVMgmt->RegisterSystemHealthValidator(&shvInfo, (CLSID *)&__uuidof(CSampleShv));
FreeComponentRegistration(&shvInfo);
return hr;
}
/// Unregisters the SDK SHV with the NAP Server.
HRESULT UnregisterSdkShv()
{
HRESULT hr = S_OK;
CComPtr<INapServerManagement> pSHVMgmt = NULL;
hr = pSHVMgmt.CoCreateInstance(CLSID_NapServerManagement, NULL, CLSCTX_INPROC_SERVER);
hr = pSHVMgmt->UnregisterSystemHealthValidator(QuarSampleSystemHealthId);
return hr;
}
/// Fill the NapComponentRegistrationInfo structure that needs to be passed during registration.
HRESULT FillShvComponentRegistrationInfo (NapComponentRegistrationInfo *shvInfo)
{
HRESULT hr = S_OK;
shvInfo->id = QuarSampleSystemHealthId;
//<Temporarily till implement the Info Class>
shvInfo->infoClsid = GUID_NULL;
hr = ConstructCountedString(friendlyName, sizeof(friendlyName), &(shvInfo->friendlyName));
hr = ConstructCountedString(description, sizeof(description), &(shvInfo->description));
hr = ConstructCountedString(version, sizeof(version), &(shvInfo->version));
hr = ConstructCountedString(vendor, sizeof(vendor), &(shvInfo->vendorName));
return hr;
}
// Helper Function for FillShvComponentRegistrationInfo.
HRESULT ConstructCountedString(const WCHAR* src, UINT16 len, CountedString* dest)
{
HRESULT hr = S_OK;
DWORD retCode = ERROR_SUCCESS;
hr = AllocateMemory(dest->string, ((len+1)*sizeof(WCHAR)));
dest->length = len;
retCode = StringCchCopy(dest->string, len+1, src);
return hr;
}
// Helper Function for releasing ShaComponentRegistrationInfo members
void FreeComponentRegistration(NapComponentRegistrationInfo *shvInfo)
{
FreeMemory(shvInfo->friendlyName.string);
FreeMemory(shvInfo->description.string);
FreeMemory(shvInfo->version.string);
FreeMemory(shvInfo->vendorName.string);
}