2025-11-28 00:35:46 +09:00

170 lines
5.9 KiB
C++

// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved
#pragma once
#ifndef __SDKCOMMON_H__
#define __SDKCOMMON_H__
#include <windows.h>
#include <NapProtocol.h>
namespace SDK_SAMPLE_COMMON
{
// The System Health ID used by both the SDK SHA (client) & SDK SHV (server).
static const UINT32 QuarSampleSystemHealthId = 0x000137F0;
// Vendor-specific data sent by the client (SHA) to the server (SHV).
// The physical TLV's Value contains the Vendor ID, then this data.
static const BYTE SDK_CLIENT_VENDOR_DATA_HEALTHY[] = { 0xAA, 0xAA };
static const BYTE SDK_CLIENT_VENDOR_DATA_UNHEALTHY[] = { 0xBA, 0xAD };
static const size_t SDK_CLIENT_VENDOR_DATA_SIZE = sizeof(SDK_CLIENT_VENDOR_DATA_HEALTHY);
// Maximum allowed threads for the sample SHV
#define SDK_SHV_MAX_THREADS 128
// Definitions for registry
static const wchar_t SDK_keyRoot[] = L"SOFTWARE\\CLASSES\\";
static const wchar_t SDK_clsidKeyRoot[] = L"SOFTWARE\\CLASSES\\CLSID\\";
static const wchar_t SDK_appidKeyRoot[] = L"SOFTWARE\\CLASSES\\AppID\\";
#define MAX_KEY_LENGTH 255
// The byte size of MAX_PATH in WCHARs, with 1 extra WCHAR for a trailing NULL.
static const size_t MAX_PATH_WCHAR_SIZE = (sizeof(WCHAR) *(MAX_PATH+1));
// Both INapSoHConstructor::Initialize() and INapSoHProcessor::Initialize()
// have a boolean input parameter that indicates whether the SoH being
// manipulated is an SoH Request (TRUE) or an SoH Response (FALSE). The
// following variables hide the actual boolean values behind named constants
// that are less ambiguous, to prevent confusion from other possible
// interpretations of the literal boolean values.
static const BOOL SOH_REQUEST = TRUE;
static const BOOL SOH_RESPONSE = FALSE;
//
// SDK Note:
// Define any supplemental error codes specific to the System Health
// components under development. See the SDK header winerror.h for
// information regarding the contents of HRESULTs, to determine the best
// way to construct new vendor-specific error values.
//
//
// Facility 0x27: The Windows Network Access Protection (NAP) system.
//
// Error: QUAR_E_NOTPATCHED
//
// Meaning: The client must install patches before it will be considered
// healthy.
#define QUAR_E_NOTPATCHED _HRESULT_TYPEDEF_(0x80270050L)
//
// Error: QUAR_E_COMPLIANT
//
// Meaning: The client is considered healthy.
#define QUAR_E_COMPLIANT _HRESULT_TYPEDEF_(0x00000000L)
// Helper Function for populating already allocated CountedString structures
// This makes filling the NapRegistrationInfo struct cleaner in the sample code
HRESULT FillCountedString (
_In_ const WCHAR* src,
_Inout_ CountedString* dest);
// Helper Function for depopulating CountedString structures
// leaves the structure intact, but frees the buffer underneath
// for use with FillCountedString above
HRESULT EmptyCountedString(
_Inout_ CountedString * cs);
// Create an SoH Constructor object.
HRESULT CreateOutputSoHConstructor(
_Outref_ INapSoHConstructor* &pISohConstructor,
_In_ SystemHealthEntityId systemHealthId,
_In_ BOOL sohType);
// Create an SoH Processor object.
HRESULT CreateInputSoHProcessor(
_Outref_ INapSoHProcessor* &pISohProcessor,
_Out_ SystemHealthEntityId &systemHealthId,
_In_ BOOL sohType,
_In_ SoH *pInputSoh);
HRESULT CreateKeyPath(
_In_reads_(cchDest) LPWSTR keyPath,
_In_ size_t cchDest,
_In_z_ const LPCWSTR pKey,
_In_opt_z_ const LPCWSTR pSubKey1,
_In_opt_z_ const LPCWSTR pSubKey2);
HRESULT SdkSetRegistryValue(
_In_z_ const LPCWSTR pKey,
_In_opt_z_ const LPCWSTR pValueName,
_In_ DWORD type,
_In_reads_bytes_(cbData) const void* pData,
_In_ DWORD cbData);
HRESULT SdkSetRegistryStringValue(
_In_z_ const LPCWSTR pKey,
_In_opt_z_ const LPCWSTR pValueName,
_In_z_ const LPCWSTR pData);
HRESULT DeleteRegistryTree(
_In_z_ LPCWSTR baseKey,
_In_z_ LPCWSTR keyName);
// Setting security on COM to allow communication to/from the
// NAPAgent service, which runs as NetworkService
HRESULT InitializeSecurity();
// Release a COM reference (pointer) to an IUnknown object.
void ReleaseObject(
_Pre_opt_valid_ _Post_ptr_invalid_ IUnknown *pIUnknown);
// Free a WCHAR string buffer. Upon exit, the input variable will be set to
// NULL.
void FreeMemory(
_Pre_opt_valid_ _Post_ptr_invalid_ WCHAR* &pAllocatedMemory);
// Free a CountedString struct, including the buffer pointed to by the
// internal string member. Upon exit, the input variable will be set to NULL.
void FreeMemory(
_Pre_opt_valid_ _Post_ptr_invalid_ CountedString* &pAllocatedMemory);
// Allocate a buffer to contain a WCHAR string, which is "stringSizeInBytes" wchars long.
HRESULT AllocateMemory(
_Outref_result_bytebuffer_(stringSizeInBytes) WCHAR* &pString,
_In_ size_t stringSizeInBytes);
// Allocate a buffer to contain a CountedString struct, whose overall string member's
// buffer is "stringSizeInBytes" wchars long.
HRESULT AllocateMemory(
_Outref_ CountedString* &pString,
_In_ size_t stringSizeInBytes);
} // End "namespace SDK_SAMPLE_COMMON".
// The CLSID for the Config COM object
static const GUID CLSID_SDK_SHV_UI = { /* 230b2a03-bbb3-4d50-839b-74f095e2b53e */
0x230b2a03,
0xbbb3,
0x4d50,
{0x83, 0x9b, 0x74, 0xf0, 0x95, 0xe2, 0xb5, 0x3e}
};
#endif // __SDKCOMMON_H__