261 lines
8.0 KiB
C++
261 lines
8.0 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.
|
|
|
|
|
|
|
|
#ifndef __SDKMETHODCOMMON_H__
|
|
#define __SDKMETHODCOMMON_H__
|
|
|
|
#pragma once
|
|
|
|
#include <windows.h>
|
|
#include "eaptypes.h"
|
|
#include "eapmethodtypes.h"
|
|
#include <rtutils.h>
|
|
|
|
extern DWORD g_dwEapTraceId;
|
|
|
|
namespace SDK_METHOD_SAMPLE_COMMON
|
|
{
|
|
|
|
/// This EAP provider implements a single EAP protocol, with this Type Id.
|
|
const BYTE EAPTYPE = 40;
|
|
|
|
/// Following are the details of this EAP Provider. (Author, Vendor, Vendor Type and its Version)
|
|
const DWORD AUTHOR_ID = 311;
|
|
const DWORD VENODR_ID = 0;
|
|
const DWORD VENDOR_TYPE = 0;
|
|
const DWORD VERSION = 1;
|
|
|
|
/// Vendor-type: MPPE Send Key.
|
|
const BYTE MS_MPPE_SEND_KEY = 16;
|
|
|
|
/// Vendor-type: MPPE Receive Key.
|
|
const BYTE MS_MPPE_RECV_KEY = 17;
|
|
|
|
/// The byte length of the actual MPPE key = 32 bytes.
|
|
const BYTE MPPE_KEY_LENGTH = 32;
|
|
|
|
/// The Vendor-ID for the software vendor providing this EAP DLL.
|
|
const DWORD VENDOR_ID_MICROSOFT = 311;
|
|
|
|
/// The Vendor Attribute header is 6 bytes long.
|
|
const BYTE VENDOR_ATTRIBUTE_HEADER_LENGTH = 6;
|
|
|
|
/// The Salt field in front of MPPE Key values is 2 bytes long.
|
|
const BYTE MPPE_KEY_SALT_LENGTH = 2;
|
|
|
|
/// MPPE key block size = 16 bytes. All MPPE keys should be a multiple of
|
|
/// this length.
|
|
const BYTE MPPE_KEY_BLOCK_LENGTH = 16;
|
|
|
|
/// Specify "no flags" for WideCharToMultiByte
|
|
const DWORD NO_FLAGS = 0;
|
|
|
|
/// Determine input string length automatically for WideCharToMultiByte
|
|
const long AUTOMATIC_STRING_LENGTH = -1;
|
|
|
|
/// Maximum Eap Packet Size
|
|
const DWORD MAX_PACKET_SIZE = 1500;
|
|
|
|
/// (???)
|
|
const DWORD MAX_ATTR_IN_EAP_ATTRIBUTES = 20;
|
|
|
|
/// Eap Packet Header Length
|
|
#define EAP_PACKET_HDR_LEN ( sizeof( EapPacket ) - 1 )
|
|
|
|
/// Required for writing registry entries for registering Sdk Eap Methods with EapHost.
|
|
const wchar_t eapHostKeyName[] = L"System\\CurrentControlSet\\Services\\EapHost\\Methods";
|
|
const wchar_t eapMethodName[] = L"311\\40";
|
|
const wchar_t eapHostMethodKeyName[] = L"System\\CurrentControlSet\\Services\\EapHost\\Methods\\311";
|
|
const wchar_t eapMethodId[] = L"40";
|
|
|
|
|
|
//
|
|
// Functions related to EapAttributes
|
|
//
|
|
|
|
|
|
/**
|
|
* Allocate space for the EAPAttributes structure that will contain specified number of EAP attribute.
|
|
*
|
|
* @param attribCount The # of Eap attributes to create.
|
|
*
|
|
* @param ppEapAttributes (input/output) A pointer to the real data buffer pointer.
|
|
* The real pointer will be set to point to the allocated memory.
|
|
*
|
|
* @return A Win32 error code, indicating success or failure.
|
|
*/
|
|
DWORD AllocateAttributes(
|
|
IN DWORD attribCount,
|
|
IN OUT EapAttributes **ppEapAttributes
|
|
);
|
|
|
|
/**
|
|
* Free a EapAttributes structure.
|
|
*
|
|
* This function will walk the chain of attributes, freeing each attribute's
|
|
* Value data pointer, it will free the list's data buffer, and set the former
|
|
* data buffer pointer to point to NULL.
|
|
*
|
|
* @param ppEapAttributes (input/output) A pointer to the real data buffer
|
|
* pointer.
|
|
*
|
|
* @return A Win32 error code, indicating success or failure.
|
|
*
|
|
*/
|
|
DWORD FreeAttributes(
|
|
IN OUT EapAttributes **ppEapAttributes
|
|
);
|
|
|
|
|
|
/**
|
|
* Set an attribute in a pre-allocated list.
|
|
*
|
|
* This function takes the attribute list buffer from AllocateAttributes(),
|
|
* finds the first unset attribute, and sets it to contain the specified data.
|
|
* It allocates memory for the attribute's value member.
|
|
*
|
|
* @param pEapAttributes (input/output) A pointer to the real data buffer pointer.
|
|
* @param eaType New attribute's type (from EapTypes.h).
|
|
* @param dwLength New attribute's length.
|
|
* @param pValue New attribute's value.
|
|
*
|
|
* @return A Win32 error code, indicating success or failure.
|
|
*/
|
|
DWORD AddAttribute(
|
|
IN OUT EapAttributes *pEapAttributes,
|
|
IN EapAttributeType eaType,
|
|
IN DWORD dwLength,
|
|
IN PVOID pValue
|
|
);
|
|
|
|
|
|
/**
|
|
* Append a new attribute onto the end of an existing list (extending list).
|
|
*
|
|
* This function creates a new, larger attribute list, copies attributes
|
|
* from the original list into the new list, and adds the new attribute
|
|
* onto the end of the list.
|
|
*
|
|
*
|
|
* @param ppAttributesList (input/output) A pointer to the real attribute
|
|
* list data buffer pointer. The data will be
|
|
* copied out of this buffer, the buffer freed, and
|
|
* the pointer set to the new attribute list.
|
|
* @param eaType New attribute's type (from EapTypes.h).
|
|
* @param dwLength New attribute's length
|
|
* @param value New attribute's value.
|
|
*
|
|
* @return A Win32 error code, indicating success or failure.
|
|
*/
|
|
DWORD AppendAttributeToList(
|
|
IN OUT EapAttributes **ppAttributesList,
|
|
IN EapAttributeType eaType,
|
|
IN DWORD dwLength,
|
|
IN PVOID value
|
|
);
|
|
|
|
|
|
/**
|
|
* Report a message to the trace log.
|
|
*
|
|
* This function reports the specified message to a file in
|
|
* \c %SystemRoot%\Tracing\[TraceFileName.log], where \c TraceFileName is the
|
|
* string used in the TraceRegister() call. This tracing
|
|
* log can help when trying to debug issues on Eap Methods on clients & servers where
|
|
* physical access is not possible, or where debuggers can't be run easily
|
|
*
|
|
*
|
|
* @param Format [in] An output string format specification, which can
|
|
* include printf-style format values (ie, "%d").
|
|
*
|
|
* @param ... [in] A number of optional arguments, corresponding to
|
|
* the number of format specifiers in the Format
|
|
* parameter.
|
|
*/
|
|
|
|
VOID
|
|
EapTrace(
|
|
IN _In_ CHAR* Format,
|
|
...
|
|
);
|
|
|
|
//
|
|
// Function related to EapError
|
|
//
|
|
|
|
/**
|
|
* Allocates EAP_ERROR structure and fills it using the input parameters.
|
|
*
|
|
* The memory will be freed by EapPeerFreeErrorMemory() or EapMethodAuthenticatorFreeErrorMemory()
|
|
* depending on who the caller of this API is.
|
|
*
|
|
* @param pEapError EAP_ERROR will be allocated at this pointer and
|
|
* populated with above input parameters.
|
|
* @param errCode Win32 error code
|
|
* @param dwReasonCode Reason Code
|
|
* @param pRootCauseGuid Root Cause GUID
|
|
* @param pRepairGuid Repair GUID
|
|
* @param pHelpLinkGuid Help Link GUID
|
|
* @param pRootCauseString String describing the root cause
|
|
* @param pRepairString String describing the repair mechanism
|
|
*
|
|
* @return A Win32 error code, indicating success or failure.
|
|
*/
|
|
DWORD AllocateandFillEapError(
|
|
IN OUT EAP_ERROR** pEapError,
|
|
IN DWORD errCode,
|
|
IN DWORD dwReasonCode,
|
|
IN LPCGUID pRootCauseGuid,
|
|
IN LPCGUID pRepairGuid,
|
|
IN LPCGUID pHelpLinkGuid,
|
|
IN _In_ LPWSTR pRootCauseString,
|
|
IN _In_ LPWSTR pRepairString
|
|
);
|
|
|
|
DWORD CopyWideString(
|
|
IN _In_ LPWSTR pSrcWString,
|
|
OUT _Out_ LPWSTR *pDestWString);
|
|
|
|
//
|
|
// Functions related to host-network and network-host.
|
|
//
|
|
|
|
/// Convert a 32-bit integer from host format to wire format.
|
|
VOID HostToWireFormat32(
|
|
IN DWORD dwHostFormat,
|
|
IN OUT PBYTE pWireFormat
|
|
);
|
|
|
|
/// Convert a 16-bit integer from host format to wire format.
|
|
VOID HostToWireFormat16(
|
|
IN WORD wHostFormat,
|
|
IN OUT PBYTE pWireFormat
|
|
);
|
|
|
|
/// Convert a 16-bit integer from wire format to host format.
|
|
VOID WireToHostFormat16(
|
|
IN WORD wWireFormat,
|
|
IN OUT PBYTE pHostFormat
|
|
);
|
|
|
|
/// Get the current working directory and appends dllName (input param) to it.
|
|
DWORD GetFullPath(
|
|
OUT _Out_ LPWSTR &pathName,
|
|
IN OUT DWORD &pathNameLength,
|
|
IN _In_ LPWSTR dllName,
|
|
IN DWORD sizeofDllNameInBytes);
|
|
|
|
} // End "namespace SDK_METHOD_SAMPLE_COMMON
|
|
#endif // __SDKMETHODCOMMON_H__
|