SHV-Modul
Hinweis
Die Netzwerkzugriffsschutzplattform ist ab Windows 10
Richtet ein SHV-Modul (System Health Validator) ein, einschließlich der Registrierung und Aufhebung der Registrierung beim NAP-System.
Hinweis
Das NAP SDK enthält auch einen vollständigen Satz von Beispielcode, der unter ...\Samples\NetDS\NAP... Verzeichnis Ihrer SDK-Installation. Dieser Beispielsatz umfasst einen Systemintegritäts-Agent (SHA), SHV und einen Erzwingungsclient (EC). Es verfügt über vollständige funktionierende NAP-Szenarien, die die Kommunikation zwischen SHA-SHV und SHA-EC einrichten.
#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);
}